0

在尝试使用 distcp 将大量数据泵送到另一个集群时,我们遇到了一个奇怪的问题。

给出一些数字,

数据大小 = 320GB 映射器数量 = ~70 我们集群中的节点总数 82 src 集群:hadoop 0.20 目标集群:hadoop 2.0.2

当我们开始这项工作时,所有映射器都成功完成,但最后一个需要太长时间,当它完成/失败时,它基本上会冻结作业跟踪器近 15 分钟,之后所有任务跟踪器都会重新启动,从而重新启动所有作业当时正在集群中运行。

我们有多个 distcp 作业将数据传输到 S3 以及具有相同 hadoop 设置的其他集群,并且没有遇到这个问题。这个过程和其他的唯一区别就是这里我们使用的是webhdfs,webhdfs是瓶颈吗?

我们还尝试减小文件大小,检查网络带宽是否饱和,机器负载,但仍然无法解决这个问题。

另外,当两个hadoop版本不同时,是否有其他方式进行数据传输而不是使用webhdfs

谢谢

4

1 回答 1

0

在设置 ganglia 以收集统计信息并使用 jconsole 之后,我们将问题缩小到阻塞线程。

决议是增加

mapred.job.tracker.handler.count 从当前值 64 到 128

我们对该问题的最佳假设是,所有 Distcp 映射器倾向于同时完成,从而在清理过程中阻塞了许多线程,并冻结了 Job tracker 10-15 分钟

于 2013-12-11T04:44:29.453 回答