2016-09-19 29 views
7

पर चल रहे boto3 में एमआर नौकरी के लिए स्ट्रीमिंग चरण जोड़ें I AWS EMR 2.4 से AWS EMR 5.0 तक पाइथन में लिखी गई कुछ एमआर नौकरियों को माइग्रेट करने का प्रयास कर रहा हूं। अब तक मैं boto 2.4 का उपयोग कर रहा था, लेकिन यह ईएमआर 5.0 का समर्थन नहीं करता है, इसलिए मैं boto3 में स्थानांतरित करने की कोशिश कर रहा हूं। इससे पहले, बोटो 2.4 का उपयोग करते समय, मैंने StreamingStep मॉड्यूल का उपयोग इनपुट स्थान और आउटपुट स्थान निर्दिष्ट करने के साथ-साथ मेरे मैपर और रेड्यूसर स्रोत फ़ाइलों का स्थान निर्दिष्ट करने के लिए किया था। इस मॉड्यूल का उपयोग करके, मुझे प्रभावी ढंग से अपनी नौकरी चलाने के लिए कोई जार बनाने या अपलोड करने की आवश्यकता नहीं थी। हालांकि, मैं boto3 दस्तावेज़ीकरण में कहीं भी इस मॉड्यूल के बराबर नहीं पा रहा हूं। मैं अपने एमआर नौकरी में boto3 में स्ट्रीमिंग चरण कैसे जोड़ सकता हूं, ताकि मुझे इसे चलाने के लिए एक जार फ़ाइल अपलोड करने की आवश्यकता न हो?AWS EMR 5.0

उत्तर

5

यह दुर्भाग्यपूर्ण है कि boto3 और EMR API को खराब तरीके से दस्तावेज किया गया है। न्यूनतम, शब्द उदाहरण गिनती के रूप में विचार करेंगे इस प्रकार है:

import boto3 

emr = boto3.client('emr') 

resp = emr.run_job_flow(
    Name='myjob', 
    ReleaseLabel='emr-5.0.0', 
    Instances={ 
     'InstanceGroups': [ 
      {'Name': 'master', 
      'InstanceRole': 'MASTER', 
      'InstanceType': 'c1.medium', 
      'InstanceCount': 1, 
      'Configurations': [ 
       {'Classification': 'yarn-site', 
        'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]}, 
      {'Name': 'core', 
      'InstanceRole': 'CORE', 
      'InstanceType': 'c1.medium', 
      'InstanceCount': 1, 
      'Configurations': [ 
       {'Classification': 'yarn-site', 
        'Properties': {'yarn.nodemanager.vmem-check-enabled': 'false'}}]}, 
     ]}, 
    Steps=[ 
     {'Name': 'My word count example', 
     'HadoopJarStep': { 
      'Jar': 'command-runner.jar', 
      'Args': [ 
       'hadoop-streaming', 
       '-files', 's3://mybucket/wordSplitter.py#wordSplitter.py', 
       '-mapper', 'python2.7 wordSplitter.py', 
       '-input', 's3://mybucket/input/', 
       '-output', 's3://mybucket/output/', 
       '-reducer', 'aggregate']} 
     } 
    ], 
    JobFlowRole='EMR_EC2_DefaultRole', 
    ServiceRole='EMR_DefaultRole', 
) 

मैं Boto के साथ ऐसा करने की आवश्यकता होगी, याद नहीं है, लेकिन मैं vmem-check-enabled अक्षम किए बिना सरल स्ट्रीमिंग का काम चल रहा है ठीक से मुद्दों पड़ा है।

इसके अलावा, अपनी स्क्रिप्ट S3 पर कहीं स्थित है, तो इसे का उपयोग -files (जोड़कर #filename तर्क को क्लस्टर में डाउनलोड की गई फ़ाइल filename रूप में उपलब्ध करा) डाउनलोड करें।

+0

सहायता के लिए बहुत बहुत धन्यवाद। इसने काम कर दिया। दुर्भाग्य से मैंने इसके लिए सेट किया गया बकाया कुछ जवाब देने से कुछ घंटे पहले समाप्त हो गया। लेकिन वैसे भी एक टन धन्यवाद। :) –