使用 S3DistCp 将文件从 HDFS 复制到 EMR 集群上的 S3
Posted
技术标签:
【中文标题】使用 S3DistCp 将文件从 HDFS 复制到 EMR 集群上的 S3【英文标题】:Copying files from HDFS to S3 on EMR cluster using S3DistCp 【发布时间】:2018-06-26 10:59:42 【问题描述】:我在 从 HDFS 复制 800 个 avro 文件,大小约为 136 MB 到 S3 >EMR 集群,但我得到了这个异常:
8/06/26 10:53:14 INFO mapreduce.Job: map 100% reduce 91%
18/06/26 10:53:14 INFO mapreduce.Job: Task Id : attempt_1529995855123_0003_r_000006_0, Status : FAILED
Error: java.lang.RuntimeException: Reducer task failed to copy 1 files: hdfs://url-to-aws-emr/user/hadoop/output/part-00258-3a28110a-9270-4639-b389-3e1f7f386ed6-c000.avro etc
at com.amazon.elasticmapreduce.s3distcp.CopyFilesReducer.cleanup(CopyFilesReducer.java:67)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:179)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:635)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:390)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
EMR 集群的配置是:
core-site fs.trash.checkpoint.interval 60
core-site fs.trash.interval 60
hadoop-env.export HADOOP_CLIENT_OPTS -Xmx10g
hdfs-site dfs.replication 3
任何帮助将不胜感激。
编辑:
运行 hdfs dfsadmin -report 命令,得到以下结果:
[hadoop@~]$ hdfs dfsadmin -report
Configured Capacity: 79056308744192 (71.90 TB)
Present Capacity: 78112126204492 (71.04 TB)
DFS Remaining: 74356972374604 (67.63 TB)
DFS Used: 3755153829888 (3.42 TB)
DFS Used%: 4.81%
Under replicated blocks: 126
Blocks with corrupt replicas: 0
Missing blocks: 63
Missing blocks (with replication factor 1): 0
这表明该块丢失。这是否意味着我必须再次重新运行程序?如果我看到 Under replicated blocks 的输出,它会显示 126。这意味着将复制 126 个块。我怎么知道,它会复制丢失的块吗?
此外,在过去 30 分钟内,Under replicated blocks 的值是 126。有没有办法强制它快速复制?
【问题讨论】:
顺便说一句,我现在面临同样的问题,但我没有任何缺失的块 【参考方案1】:我遇到了同样的“Reducer task failed to copy 1 files”错误,我在 HDFS /var/log/hadoop-yarn/apps/hadoop/logs 中找到了与 s3-dist-cp 启动的 MR 作业相关的日志.
hadoop fs -ls /var/log/hadoop-yarn/apps/hadoop/logs
我将它们复制到本地:
hadoop fs -get /var/log/hadoop-yarn/apps/hadoop/logs/application_nnnnnnnnnnnnn_nnnn/ip-nnn-nn-nn-nnn.ec2.internal_nnnn
然后在文本编辑器中检查它们以找到有关 Reducer 阶段详细结果的更多诊断信息。就我而言,我从 S3 服务收到错误消息。您可能会发现不同的错误。
【讨论】:
以上是关于使用 S3DistCp 将文件从 HDFS 复制到 EMR 集群上的 S3的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark - 将文件从本地(边缘节点)复制到 HDFS 位置时出错