我正在尝试将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%
我漏了什么吗?感谢您的帮助。
另外,我想知道在哪里可以找到主节点上的日志文件,以查看作业是否失败,从而导致循环?谢谢
2条答案
按热度按时间1mrurvl11#
在我的例子中,我将一个大的压缩文件从hdfs复制到s3,hadoop distcp比s3-dist-cp快得多。
当我检查日志时,多个上传部分在reduce步骤花费了很长时间。对于s3 dist cp,上传一个块(134mb)需要20秒,而对于hadoop distcp,只需要4秒。
distcp和s3distcp的区别在于distcp在s3(目标文件系统)创建临时文件,而s3distcp在hdfs创建临时文件。
我还在研究为什么多上传性能与distcp和s3distcp有很大的不同,希望有人能在这里有所贡献。
fykwrbwg2#
如果您可以使用hadoop2.8.0进行调查,并使用s3a://filesystem,那么您可以获得它现在收集的大量文件系统统计信息。
一个真正的性能杀手是rename(),这在s3客户机中是通过复制然后删除来模仿的:如果任何一个distcp运行都试图用重命名来执行原子distcp,那么每6-10mb的数据就会增加大约1秒的延迟。上传后延迟16秒的134mb将与“这是一个重命名”匹配