2014-04-25 38 views
10

पर पाइस्पार्क स्क्रिप्ट चल रहा है, मैं वर्तमान में स्पार्क्स प्री कॉन्फिगर किए गए ./ec2 निर्देशिका का उपयोग कर ईसी 2 के क्लस्टर का उपयोग करके अपने अपाचे स्पार्क पाइस्पार्क स्क्रिप्ट को स्वचालित करता हूं। स्वचालन और शेड्यूलिंग उद्देश्यों के लिए, मैं क्लस्टर को स्क्रिप्ट भेजने के लिए बोटो ईएमआर मॉड्यूल का उपयोग करना चाहता हूं।ईएमआर

मैं ईएमआर के क्लस्टर पर स्पार्क बूट करने और स्पार्क स्थापित करने में सक्षम था। मैं भी इस तरह के तरह pyspark की मेरी स्थानीय मशीन के संस्करण का उपयोग कर, और स्थापित करने के मास्टर द्वारा ईएमआर पर एक स्क्रिप्ट शुरू करने के लिए कर रहा हूँ:

$: MASTER=spark://<insert EMR master node of cluster here> ./bin/pyspark <myscriptname.py> 

बहरहाल, यह है कि स्क्रिप्ट स्थानीय रूप से चलाने के लिए मुझे की आवश्यकता है, और इस तरह मैं नहीं कर रहा हूँ बोटो की क्षमता को पूरी तरह से लाभ उठाने में सक्षम 1) क्लस्टर शुरू करें 2) स्क्रिप्ट चरणों को जोड़ें और 3) क्लस्टर को रोकें। मुझे spark-shell (scala) के लिए script-runner.sh और emr "step" कमांड का उपयोग करके उदाहरण मिल गए हैं, लेकिन मुझे लगता है कि पाइथन मॉड्यूल (pyspark) के साथ ऐसा करने का एक आसान तरीका है। पहले से बहुत - बहुत धन्यवाद!

उत्तर

3

यह उपयोगी हो सकता है हालांकि यह बोटो का उपयोग नहीं करता है।

क्लस्टर बनाने के लिए aws cli का उपयोग करें और इसमें चरणों (स्पार्क नौकरी) जोड़ें।

1) क्लस्टर बनाएँ:

aws emr create-cluster --name "Spark cluster" --ami-version 3.8 --applications Name=Spark --ec2-attributes KeyName=ir --log-uri s3://Path/logs --instance-type m3.xlarge --instance-count 1 --use-default-roles 

2) कदम (चिंगारी नौकरी जोड़ें)। ध्यान दें कि आपकी पायथन लिपि मास्टर नोड में संग्रहीत की जानी चाहिए (इस मामले में यह/home/hadoop/स्पार्क में है)।

aws emr add-steps --cluster-id j-xxxxxxx --steps Name=Spark,Jar=s3://eu-west-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args=[/home/hadoop/spark/bin/spark-submit,--deploy-mode,client,/home/hadoop/spark/myscript.py],ActionOnFailure=CONTINUE 

आप दो चरणों को एक साथ जोड़ सकते हैं और क्लस्टर/रन जॉब बना सकते हैं और क्लस्टर को समाप्त कर सकते हैं।

कुछ नोट: 1) मैं कई तरीके की कोशिश की है के बाद से मैं था S3 से स्क्रिप्ट, लेकिन कोई किस्मत :(

तो मैं 2 या तो Boto या एडब्ल्यूएस नोड के लिए CLI का उपयोग कर इसे कॉपी करने समाप्त हो गया) को पढ़ने के लिए। परीक्षण है कि emr में एक नोड पर चरण में तैनाती मोड क्लाइंट के लिए क्लाइंट है, आपको क्लस्टर में इसे बदलना चाहिए।

1

आपको एस 3 से स्क्रिप्ट तक पहुंचने के लिए तैनाती मोड को क्लाइंट (क्लाइंट के बजाए) में बदलने की आवश्यकता है।

5

यहां एक great example है जिसे इसे कॉन्फ़िगर करने की आवश्यकता है। पायथन कोड के लिए "एक त्वरित उदाहरण" पर ब्राउज़ करें।

हालांकि, ताकि ईएमआर-4.7.2 में काम कर बातें बनाने के लिए, कुछ बदलाव है, तो यहां किए जाने के लिए एक एडब्ल्यूएस CLI आदेश है कि मेरे लिए काम किया है था: एक

aws emr add-steps --cluster-id <Your EMR cluster id> --steps Type=spark,Name=TestJob,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://your-source-bucket/code/pythonjob.py,s3a://your-source-bucket/data/data.csv,s3a://your-destination-bucket/test-output/],ActionOnFailure=CONTINUE 

यहाँ और है

from __future__ import print_function 
from pyspark import SparkContext 
import sys 
if __name__ == "__main__": 
    if len(sys.argv) != 3: 
     print("Usage: testjob ", file=sys.stderr) 
     exit(-1) 
    sc = SparkContext(appName="MyTestJob") 
    dataTextAll = sc.textFile(sys.argv[1]) 
    dataRDD = dataTextAll.map(lambda x: x.split(",")).map(lambda y: (str(y[0]), float(y[1]))).reduceByKey(lambda a, b: a + b) 
    dataRDD.saveAsTextFile(sys.argv[2]) 
    sc.stop() 

यह S3 से data.csv फ़ाइल पढ़ता है, हर पंक्ति विभाजन, पहले मूल्य से स्ट्रिंग के लिए पहला मान और एक दूसरे फ्लोट करने के लिए, समूह में कनवर्ट करता है और दूसरे स्तंभ में मानों का योग है, और लिखते हैं: pythonjob.py फ़ाइल की सामग्री परिणाम एस 3 पर वापस।

कुछ टिप्पणियाँ:

  • मैं spark.yarn.submit.waitAppCompletion=true तो कि मैं कंसोल में काम निष्पादन की निगरानी कर सकते छोड़ने का फैसला किया है।
  • इनपुट और आउटपुट पथ (sys.argv[1] और sys.argv[2] क्रमशः) स्क्रिप्ट को नौकरी के टुकड़े (Args अनुभाग add-steps कमांड में) के हिस्से के रूप में पारित किया जाता है)।
  • Be aware कि आपको यूआरआई s3n:// और s3:// के लिए हडोप 2.7+ के लिए अपने काम को कॉन्फ़िगर करते समय उपयोग करना होगा।
  • यदि आपका क्लस्टर वीपीसी में है, तो आपको VPC Endpoint for Amazon S3 बनाना होगा यदि आप अपनी ईएमआर नौकरियों में पढ़ना/लिखना चाहते हैं।
+0

यदि आप एक बड़े गिट भंडार के भीतर एक स्क्रिप्ट चलाने के लिए चाहते हैं तो क्या होगा? मैं एक बूटस्ट्रैप एक्शन के माध्यम से क्लस्टर में रिपो क्लोन कर सकता हूं लेकिन फिर आप 'स्पार्क-सबमिट --मास्टर यार्न/पथ/से/script_to_run.py' कैसे करते हैं? –

+0

@EvanZamir, मुझे लगता है कि आप उस मामले में [कमांड धावक] (http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html) का उपयोग करने का प्रयास कर सकते हैं –

संबंधित मुद्दे