我正在尝试将193 GB数据从s3复制到HDFS。我正在为s3-dist-cp和hadoop distcp运行以下命令:
s3-dist-cp --src s3a://PathToFile/file1 --dest hdfs:///user/hadoop/S3CopiedFiles/
hadoop distcp s3a://PathToFile/file1 hdfs:///user/hadoop/S3CopiedFiles/
我在主节点上运行这些并且还检查正在传输的数量。 花了大约一个小时,在复制之后,一切都被删除,磁盘空间在我的集群中的4个核心实例中显示为99.8%,并且hadoop作业永远运行。 一旦我运行命令,
16/07/18 18:43:55 INFO mapreduce.Job: map 0% reduce 0%
16/07/18 18:44:02 INFO mapreduce.Job: map 100% reduce 0%
16/07/18 18:44:08 INFO mapreduce.Job: map 100% reduce 14%
16/07/18 18:44:11 INFO mapreduce.Job: map 100% reduce 29%
16/07/18 18:44:13 INFO mapreduce.Job: map 100% reduce 86%
16/07/18 18:44:18 INFO mapreduce.Job: map 100% reduce 100%
立即打印,然后复制数据一小时。它重新开始。
16/07/18 19:52:45 INFO mapreduce.Job: map 0% reduce 0%
16/07/18 18:52:53 INFO mapreduce.Job: map 100% reduce 0%
我在这里遗漏了什么?任何帮助表示赞赏。
此外,我想知道在哪里可以找到主节点上的日志文件,看看作业是否失败并因此循环? 谢谢
答案 0 :(得分:0)
就我而言,我将一个大的压缩文件从hdfs复制到s3,然后 hadoop distcp比s3-dist-cp快得多。
当我检查日志时,多上传部分在缩小步骤中需要很长时间。 对于s3-dist-cp,上传一个块(134MB)需要20秒,而hadoop distcp只需要4秒。
distcp和s3-dist-cp之间的区别是distcp在s3(目标文件系统)创建临时文件,而s3-dist-cp在hdfs创建临时文件。
我仍在调查为什么多重上传性能与distcp和s3-dist-cp有很大不同,希望有一些有良好洞察力的人可以在这里做出贡献。
答案 1 :(得分:0)
如果您可以为您的调查选择Hadoop 2.8.0并使用s3a://文件系统,您可以获取它现在收集的大量文件系统统计信息。
一个真正的性能杀手是rename(),它通过复制然后删除在s3客户端中模仿:如果distcp运行尝试使用重命名进行原子distcp,那么就会增加一个延迟每6-10MB数据1秒。对于16s的上传后延迟,134MB将与"它重命名"