使用 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 MBS3 >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的主要内容,如果未能解决你的问题,请参考以下文章

将文件/块从 HDFS 复制到从节点的本地文件系统

Pyspark - 将文件从本地(边缘节点)复制到 HDFS 位置时出错

将数据/文件从 Windows 复制到 Linux 机器或 HDFS

如何将文件从 HDFS 复制到本地文件系统

将文件从HDFS复制到本地

Hadoop HDFS 将文件从多个文件夹复制到一个目标文件夹