我想从S3到EMR使用工作流程HDFS复制文件,当我运行下面的命令jobflow启动成功,但给了我一个错误,当它试图将文件复制到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 = “减少” TASK_STATUS = “失败” FINISH_TIME = “1359612576612” ERROR =“了java.lang.RuntimeException:减速机任务无法复制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在javax.security.auth.Subject(Child.java:255)在java.security.AccessController.doPrivileged(本机方法)。差分吸收光谱(Subject.java:396)在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)在org.apache.hadoop.mapred.Child.main(Child.java:249)
我得到相同的异常。 它看起来像臭虫是当竞争条件引起的CopyFilesReducer
使用多个CopyFilesRunable
实例从S3下载文件。 问题是,它使用多个线程在同一临时目录,以及线程删除临时目录他们完成时。 因此,当一个线程在另一个之前完成它删除另一个线程仍在使用的临时目录。
我所举报的问题AWS,但在此期间,你可以通过强制减速通过设置变量使用一个单独的线程解决的bug s3DistCp.copyfiles.mapper.numWorkers
在你的工作,配置为1。
我看到造成竞争条件相同的问题。 传递-Ds3DistCp.copyfiles.mapper.numWorkers=1
有助于避免这个问题。
我希望亚马逊修复这个bug。
调整工人对我来说没有工作的数量; 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
问题是地图 - 降低作业失败。 映射器执行完美,但减速创建的集群存储瓶颈。
这解决了我-Dmapreduce.job.reduces = 30,如果它仍然失败尝试
将其降低到20即-Dmapreduce.job.reduces = 20
我将添加整个参数为了便于理解:
在AWS集群:
JAR位置 :命令runner.jar
主类 :无
参数 :S3-DIST-CP -Dmapreduce.job.reduces = 30 --src = HDFS:///用户/ EC2用户/ riskmodel输出--dest = S3:// DEV-定量-riskmodel / 2019_03_30_SOM_EZ_23Factors_Constrained_CSR_Stats /输出--multipartUploadChunkSize = 1000
失败的行动 :继续
在脚本文件:
AWS --profile $ AWS_PROFILE EMR添加步骤--cluster-ID $ CLUSTER_ID --steps TYPE = CUSTOM_JAR,罐= '命令runner.jar',名称= “复制模型输出到S3”,ActionOnFailure =继续,参数数量= [S3-DIST-CP,-Dmapreduce.job.reduces = 20, - SRC = $ OUTPUT_BUCKET, - DEST = $ S3_OUTPUT_LARGEBUCKET, - multipartUploadChunkSize = 1000]