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) 不是其中的一部分,但是,当然,我们仔细检查了很多这些点,但一无所获:iperf
,dd
/hdparm
,增加 Xmx
(8 GB),sysbench
...
我们只发现当 运行 HDFS 时集群在其磁盘上有相当大的 await
时间(>500ms,与我们的日志消息相关),但我们无法清楚地解释发生了什么。
即使你们都怀疑 HDD 是造成我们麻烦的原因,有人可以解释这些日志消息吗?我们在源代码中找不到任何有趣的东西,除了它在执行 flush
时发生(有道理...)。
设置:
- Hadoop 2.6.0
- 9 个数据节点
- Debian 3.2.63-2+deb7u2 x86_64
- 10 个 1TB SAS 驱动器
- OpenJDK 运行时环境 (IcedTea 2.5.3) (7u71-2.5.3-2~deb7u1)
- OpenJDK 64 位服务器 VM(构建 24.65-b04,混合模式)
这是来自用户 ML 的交叉post,因为到目前为止我还没有得到答案 ;-(.
我在使用慢速 HDFS 时遇到了同样的问题。
我设法解决了第二个错误:
java.net.SocketTimeoutException: 60000 millis timeout while waiting
for channel to be ready for read (...)
通过增加DataNode Java xmx.
希望这对您有所帮助。
好吧,实际上我们已经解决了这个问题。这是由于我们的网络 MTU,与 FS 无关。我们的实验性 MTU 太大,导致了此类行为。回到经典价值观会让事情恢复正常。
我想在新硬件堆栈上实例化另一个新 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) 不是其中的一部分,但是,当然,我们仔细检查了很多这些点,但一无所获:iperf
,dd
/hdparm
,增加 Xmx
(8 GB),sysbench
...
我们只发现当 运行 HDFS 时集群在其磁盘上有相当大的 await
时间(>500ms,与我们的日志消息相关),但我们无法清楚地解释发生了什么。
即使你们都怀疑 HDD 是造成我们麻烦的原因,有人可以解释这些日志消息吗?我们在源代码中找不到任何有趣的东西,除了它在执行 flush
时发生(有道理...)。
设置:
- Hadoop 2.6.0
- 9 个数据节点
- Debian 3.2.63-2+deb7u2 x86_64
- 10 个 1TB SAS 驱动器
- OpenJDK 运行时环境 (IcedTea 2.5.3) (7u71-2.5.3-2~deb7u1)
- OpenJDK 64 位服务器 VM(构建 24.65-b04,混合模式)
这是来自用户 ML 的交叉post,因为到目前为止我还没有得到答案 ;-(.
我在使用慢速 HDFS 时遇到了同样的问题。
我设法解决了第二个错误:
java.net.SocketTimeoutException: 60000 millis timeout while waiting for channel to be ready for read (...)
通过增加DataNode Java xmx.
希望这对您有所帮助。
好吧,实际上我们已经解决了这个问题。这是由于我们的网络 MTU,与 FS 无关。我们的实验性 MTU 太大,导致了此类行为。回到经典价值观会让事情恢复正常。