【问题标题】:Copy files from S3 to EMR local using Lambda使用 Lambda 将文件从 S3 复制到本地 EMR
【发布时间】:2019-06-26 04:20:02
【问题描述】:
我需要使用 Lambda 以编程方式将文件从 S3 移动到 EMR 的本地目录 /home/hadoop。
S3DistCp 复制到 HDFS。然后我登录 EMR 并在命令行上运行 CopyToLocal hdfs 命令以将文件保存到 /home/hadoop。
有没有一种编程方式在 Lambda 中使用 boto3 从 S3 复制到 Emr 的本地目录?
【问题讨论】:
标签:
amazon-s3
aws-lambda
copy
amazon-emr
【解决方案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"],
}
}
],
)
如果有更好的复制方法,请告诉我。
【解决方案2】:
这需要一种方法让 AWS Lambda 函数远程触发集群上的CopyToLocal 命令。
Lambda 函数可以调用
add-steps 请求集群运行执行此操作的脚本。