HDFS 性能不佳:"Slow BlockReceiver write packet to mirror"

Poor HDFS performances: "Slow BlockReceiver write packet to mirror"

我想在新硬件堆栈上实例化另一个新 Hadoop 集群时提交一个奇怪的行为。

一切安装完成后,只要我们尝试在 HDFS 上执行任何 I/O 操作,我们就可以在数据节点日志中看到许多这样的消息:

15/01/14 22:13:07 WARN datanode.DataNode: Slow BlockReceiver write packet to mirror took 6339ms (threshold=300ms)
15/01/14 22:13:26 INFO DataNode.clienttrace: src: /10.10.5.7:17276, dest: /10.10.5.4:50010, bytes: 176285, op: HDFS_WRITE, cliID: DFSClient_NONMAPREDUCE_-832581408_1, offset: 0, srvID: af886556-96db-4b03-9b5b-cd20c3d66f5a, blockid: BP-784291941-127.0.1.1-1420922413498:blk_1073742333_1531, duration: 19383299287

紧随其后的是著名的:

java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read (...)

我们怀疑双 VLAN + 绑定网络接口 (2x10 GBps) 不是其中的一部分,但是,当然,我们仔细检查了很多这些点,但一无所获:iperfdd/hdparm,增加 Xmx (8 GB),sysbench... 我们只发现当 运行 HDFS 时集群在其磁盘上有相当大的 await 时间(>500ms,与我们的日志消息相关),但我们无法清楚地解释发生了什么。

即使你们都怀疑 HDD 是造成我们麻烦的原因,有人可以解释这些日志消息吗?我们在源代码中找不到任何有趣的东西,除了它在执行 flush 时发生(有道理...)。

设置:

这是来自用户 ML 的交叉post,因为到目前为止我还没有得到答案 ;-(.

我在使用慢速 HDFS 时遇到了同样的问题。

我设法解决了第二个错误:

java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read (...)

通过增加DataNode Java xmx.

希望这对您有所帮助。

好吧,实际上我们已经解决了这个问题。这是由于我们的网络 MTU,与 FS 无关。我们的实验性 MTU 太大,导致了此类行为。回到经典价值观会让事情恢复正常。