使用Lambda将文件从S3复制到EMR本地

时间:2019-06-17 01:27:51

标签: amazon-s3 aws-lambda copy amazon-emr

我需要使用Lambda以编程方式将文件从S3移到EMR的本地目录/ home / hadoop。

S3DistCp复制到HDFS。然后,我登录EMR并在命令行上运行CopyToLocal hdfs命令以将文件获取到/ home / hadoop。

是否存在使用Lambda中的boto3将S3复制到Emr的本地目录的编程方式?

2 个答案:

答案 0 :(得分:1)

我编写了一个测试Lambda函数,以将作业步骤提交给EMR,该步骤将文件从S3复制到EMR的本地目录。这行得通。

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"],
                                         }
                                     }
                                 ],
                            )

如果有更好的复制方法,请告诉我。

答案 1 :(得分:0)

AWS Lambda函数需要一种方法来远程触发集群上的CopyToLocal命令。

Lambda函数可以调用 add-steps请求集群运行执行此操作的脚本。