मुझे फ़ाइलों को S3 से EMR के स्थानीय dir/home/hadoop प्रोग्रामेटिक रूप से लैम्ब्डा का उपयोग करके स्थानांतरित करने की आवश्यकता है।

S3DistCp HDFS को कॉपी करता है। मैं फिर ईएमआर में लॉगिन करता हूं और फाइलों को /home/hadoop पर लाने के लिए कमांडलाइन पर एक CopyToLocal hdfs कमांड चलाता हूं।

क्या लैम्ब्डा में boto3 का उपयोग करके S3 से Emr के स्थानीय dir में कॉपी करने के लिए कोई प्रोग्रामेटिक तरीका है?

1
Rhiya 17 जून 2019, 04:27

2 जवाब

सबसे बढ़िया उत्तर

मैंने EMR को एक जॉब स्टेप सबमिट करने के लिए एक परीक्षण लैम्ब्डा फ़ंक्शन लिखा था जो S3 से EMR के स्थानीय dir में फ़ाइलों की प्रतिलिपि बनाता है। यह काम किया।

emrclient = boto3.client('emr', region_name='us-west-2')

def lambda_handler(event, context): 
EMRS = emrclient.list_clusters( ClusterStates = ['STARTING', 'RUNNING', 'WAITING'] ) 
clusters = EMRS["Clusters"] 
print(clusters)
for cluster in clusters: 
    ID = cluster["Id"]
    response = emrclient.add_job_flow_steps(JobFlowId=ID,
                                 Steps=[
                                     {
                                         'Name': 'AWS S3 Copy',
                                         'ActionOnFailure': 'CONTINUE',
                                         'HadoopJarStep': {
                                             'Jar': 'command-runner.jar',
                                             'Args':["aws","s3","cp","s3://XXX/","/home/hadoop/copy/","--recursive"],
                                         }
                                     }
                                 ],
                            )

अगर कॉपी करने के बेहतर तरीके हैं, तो कृपया मुझे बताएं।

2
Rhiya 25 जून 2019, 23:20

क्लस्टर पर CopyToLocal कमांड को दूरस्थ रूप से ट्रिगर करने के लिए AWS लैम्ब्डा फ़ंक्शन के लिए एक तरीके की आवश्यकता होगी।

लैम्ब्डा फ़ंक्शन कॉल कर सकता है क्लस्टर से अनुरोध करने के लिए ऐड-स्टेप्स एक स्क्रिप्ट चलाएँ जो यह क्रिया करती है।

0
John Rotenstein 17 जून 2019, 04:36