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

lqfhib0f  于 2021-06-04  发布在  Hadoop
关注(0)|答案(4)|浏览(505)

我正在尝试使用emr中的工作流将文件从s3复制到hdfs,当我运行以下命令时,jobflow成功启动,但在尝试将文件复制到hdfs时出现错误。是否需要设置任何输入文件权限?
命令:
./elastic mapreduce--jobflow j-35d6joyedcela--jar s3://us-east-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar--args'--src,s3://odsh/input/,--dest,hdfs:///users
输出
task taskid=“task\u 2013013106066\u 0001\u r\u000000”task\u type=“reduce”task\u status=“failed”finish\u time=“1359612576612”error=“java.lang.runtimeexception:reducer task未能复制1个文件:s3://odsh/input/gl\u 01112\u 20121019.dat etc at 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)位于javax.security.auth.subject.doas(subject)的java.security.accesscontroller.doprivileged(本机方法)。java:396)在org.apache.hadoop.security.usergroupinformation.doas(用户组信息。java:1132)在org.apache.hadoop.mapred.child.main(child。java:249)

yvgpqqbh

yvgpqqbh1#

调整工人的数量对我不起作用;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
vlju58qv

vlju58qv2#

问题是map-reduce作业失败了。mapper执行得很完美,但是reducer在集群内存中造成了瓶颈。
这为我解决了-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\u 03\u 30\u som\u ez\u 23factors\u constrained\u csr\u stats/output--multipartuploadchunksize=1000
失败时的操作:继续
在脚本文件中:
aws--profile$aws\u profile emr add steps--cluster id$cluster\u id--steps type=custom\u jar,jar='command-runner.jar',name=“将模型输出复制到s3”,actionfailure=continue,args=[s3 dist cp,-dmapreduce.job.reduces=20,--src=$output\u bucket,--dest=$s3\u output\u largebucket,--multipartuploadchunksize=1000]

dwthyt8l

dwthyt8l3#

我也有同样的例外。它看起来像是一个错误是由比赛条件,当 CopyFilesReducer 使用多个 CopyFilesRunable 示例从s3下载文件。问题是它在多个线程中使用同一个temp目录,并且线程在完成后会删除temp目录。因此,当一个线程在另一个线程之前完成时,它会删除另一个线程仍在使用的临时目录。
我已经向aws报告了这个问题,但是与此同时,您可以通过设置变量强制reducer使用单个线程来解决这个bug s3DistCp.copyfiles.mapper.numWorkers 在作业配置中设置为1。

hof1towb

hof1towb4#

我看到同样的问题是由比赛条件引起的。经过 -Ds3DistCp.copyfiles.mapper.numWorkers=1 有助于避免问题。
我希望亚马逊能修复这个错误。

相关问题