使用s3distcp将文件从amazon s3复制到hdfs失败

时间:2013-01-31 17:00:09

标签: hadoop amazon-s3 hdfs elastic-map-reduce

我正在尝试使用EMR中的工作流将文件从s3复制到hdfs,当我运行以下命令时,作业流程成功启动,但在尝试将文件复制到HDFS时出现错误。我需要设置任何输入文件权限?

命令:

./ elastic-mapreduce --jobflow j-35D6JOYEDCELA --jar s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar --args'-- src,s3: // odsh /输入/, - DEST,HDFS:///用户

输出

任务TASKID =“task_201301310606_0001_r_000000”TASK_TYPE =“REDUCE”TASK_STATUS =“FAILED”FINISH_TIME =“1359612576612”ERROR =“java.lang.RuntimeException:Reducer任务无法复制1个文件:s3:// odsh / input / GL_01112_20121019 .dat等     在com.amazon.external.elasticmapreduce.s3distcp.CopyFilesReducer.close(CopyFilesReducer.java:70)     在org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:538)     在org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:429)     在org.apache.hadoop.mapred.Child $ 4.run(Child.java:255)     at java.security.AccessController.doPrivileged(Native Method)     在javax.security.auth.Subject.doAs(Subject.java:396)     在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)     在org.apache.hadoop.mapred.Child.main(Child.java:249)

4 个答案:

答案 0 :(得分:6)

我得到了同样的例外。当CopyFilesReducer使用多个CopyFilesRunable实例从S3下载文件时,看起来该错误是由竞争条件引起的。问题是它在多个线程中使用相同的临时目录,并且线程在完成后删除临时目录。因此,当一个线程在另一个线程之前完成时,它会删除另一个线程仍在使用的临时目录。

我已向AWS报告此问题,但同时您可以通过在作业配置中将变量s3DistCp.copyfiles.mapper.numWorkers设置为1来强制reducer使用单个线程来解决此问题。

答案 1 :(得分:2)

我看到同样的问题是由竞争条件造成的。通过-Ds3DistCp.copyfiles.mapper.numWorkers=1有助于避免此问题。

我希望亚马逊修复这个错误。

答案 2 :(得分:2)

调整工人的数量并不适合我; s3distcp在小型/中型实例上总是失败。增加任务作业的堆大小(通过-D mapred.child.java.opts=-Xmx1024m)解决了它。

使用示例:

hadoop jar /home/hadoop/lib/emr-s3distcp-1.0.jar 
    -D mapred.child.java.opts=-Xmx1024m 
    --src s3://source/
    --dest hdfs:///dest/ --targetSize 128
    --groupBy '.*\.([0-9]+-[0-9]+-[0-9]+)-[0-9]+\..*' 
    --outputCodec gzip

答案 3 :(得分:1)

问题在于地图-减少作业失败。映射器执行完美,但是化简器在群集内存中造成瓶颈。

为我解决了这个问题 -Dmapreduce.job.reduces = 30 如果仍然失败,请尝试

将其减少到20,即 -Dmapreduce.job.reduces = 20

为了便于理解,我将添加整个参数:

在AWS集群中:

JAR位置:command-runner.jar

主类:无

参数:s3-dist-cp -Dmapreduce.job.reduces = 30 --src = hdfs:/// user / ec2-user / riskmodel-output --dest = s3:/ / dev-quant-risk-model / 2019_03_30_SOM_EZ_23Factors_Constrained_CSR_Stats / output --multipartUploadChunkSize = 1000

失败时采取的措施:继续

在脚本文件中:

aws --profile $ AWS_PROFILE emr添加步骤--cluster-id $ CLUSTER_ID --steps类型= CUSTOM_JAR,Jar ='command-runner.jar',Name =“将模型输出复制到S3”,ActionOnFailure = CONTINUE ,Args = [s3-dist-cp,-Dmapreduce.job.reduces = 20,-src = $ OUTPUT_BUCKET,-dest = $ S3_OUTPUT_LARGEBUCKET,-multipartUploadChunkSize = 1000]