前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次job运行缓慢的事件

记一次job运行缓慢的事件

原创
作者头像
Bob hadoop
修改2021-01-22 18:05:31
1.5K0
修改2021-01-22 18:05:31
举报
文章被收录于专栏:日常杂记日常杂记

最近在整理以前写过的事件记录发现了一篇比较常见的故障分享给大家。

2018年4月18日

业务人员反馈部分job运行缓慢,于是进行了统计观察,resource manager页面观察到如下现象。

1、作业比以前运行的时间变长

具体大概是个别job平时1小时搞定,偶尔会出现2小时左右,集群计算资源也没打满状态。

2、Job的日志中有以下WARN的信息

代码语言:javascript
复制
2018-04-18 00:16:11,632 WARN [ResponseProcessor for block BP-<pool_id>:blk_<block_id>] org.apache.hadoop.hdfs.DFSClient: Slow ReadProcessor read fields took 57485ms (threshold=30000ms);
ack: seqno: 4 status: SUCCESS status: SUCCESS status: SUCCESS downstreamAckTimeNanos: 3284342, targets:
[DatanodeInfoWithStorage[x.x.x.x:50010,DS-26391dd6-c34d-4f7a-a6ff-6b9d264a6edd,DISK],
DatanodeInfoWithStorage[x.x.x.x:50010,DS-1840e064-e616-49d5-8ead-91f65bb3af93,DISK],
DatanodeInfoWithStorage[x.x.x.x:50010,DS-e884e0d2-b1a1-414d-925c-5d6efd1258e4,DISK]]

3、Datanode的日志中有以下WARN信息

代码语言:javascript
复制
2018-04-17 06:23:48,796 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write packet to mirror took 341ms (threshold=300ms)
2016-06-21 06:23:55,775 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow BlockReceiver write data to disk cost:873ms (threshold=300ms)
2018-04-17 08:37:52,397 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow flushOrSync took 534ms (threshold=300ms), isSync:false, flushTotalNanos=533345033ns
2018-04-17 08:38:57,929 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Slow manageWriterOsCache took 331ms (threshold=300ms)

看到如上的告警大概就清楚了,单个节点的硬件问题可能会在整个群集中导致“Slow”错误。

如果你的集群处于或接近资源上限(内存,cpu或磁盘),则你在处理作业时,你的集群可能无法确保数据本地化,因此需要在网络上传输数据块。如果是这种情况,由于使用集群上的额外负载来传输数据块,因此可能会在作业或数据节点中看到WARN消息。

于是总结了几个出现警告的信息,记录为以后遇到做总结

代码语言:javascript
复制
Slow BlockReceiver write packet to mirror

这表明在网络上写入块时有延迟

代码语言:javascript
复制
Slow BlockReceiver write data to disk cost

这表示在将块写入OS缓存或磁盘时存在延迟

代码语言:javascript
复制
Slow flushOrSync

这表示在将块写入OS缓存或磁盘时存在延迟

代码语言:javascript
复制
Slow manageWriterOsCache

这表示在将块写入OS缓存或磁盘时存在延迟

需要注意的是,在生产环境的正常负载下,一些集群的WARN消息在datanode日志中是正常的。当单个节点具有比正常情况更多的上述WARN消息时,表明存在底层硬件问题。

4、解决办法

以下步骤将有助于确定导致DataNode日志中的“Slow”消息的底层硬件问题。

1)在每个DataNode上运行以下命令来收集所有Slow消息的计数:

代码语言:javascript
复制
egrep -o "Slow.*?(took|cost)" /path/to/current/datanode/log | sort | uniq -c

该命令将提供DataNode日志中所有“Slow”消息的计数。输出将类似于:

代码语言:javascript
复制
1000 Slow BlockReceiver write data to disk cost
234 Slow BlockReceiver write packet to mirror took
4 Slow flushOrSync took
6 Slow manageWriterOsCache took

2)如果单个节点的一个或多个类别的”Slow“消息比其他主机的”Slow“消息数量多出数量级,则需要调查底层硬件问题。

3)如果Slow消息数最多的是Slow BlockReceiver write packet tomirror took,请通过以下命令的输出来调查可能的网络问题:

ifconfig -a(定期检查问题主机上增加的errors和dropped的数量,往往代表的是网卡,网线或者上游的网络有问题)

netstat -s(与正常节点相比,查找大量重新传输的数据包或其他异常高的指标)。

netstat -s | grep -i retrans(整个集群执行)。 (在一个或多个节点上查找大于正常的计数)。

4)如果Slow消息最多的是一些其他消息,请使用以下命令检查磁盘问题:

iostat[高iowait百分比,超过15%]

iostat -x和sar -d(特定分区的高await或%util)

dmesg (磁盘错误)

使用smartctl对磁盘进行健康检查:停止受影响节点的所有Hadoop进程,然后运行sudo smartctl -H /dev/<disk>,检查HDFS使用的每块<disk>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档