HBase scan超时

来源:互联网 发布:mysql 余数 编辑:程序博客网 时间:2024/05/22 06:26

问题描述:

每天凌晨1:00调用脚本完成HBase增量数据导出到集群外,以做离线分析,脚本调用的是hbase提供的export接口。该程序已连续运行30天,今天突然失败。

分析:查看任务日志,HBase数据导出到HDFS这一步就失败了。

通过YARN查看该export MapReduce job,该job中有83个map task,其中82个已经完成,剩下1个map task一直处在running状态,正常情况下半个小时左右整个程序可以跑完,但是这个map task已经处在running状态。正是这个task导致整个程序挂住。

正常情况下半个小时左右整个程序可以跑完,但是这个map task已经处在running状态。
查看HBase服务状态良好,通过manager查看该task所在regionserver节点状态正常,通过HMaster查看增量导出失败表所在该regionserver的region状态正常,由此基本可以判断HBase服务本身没问题。

通过YARN查看该task日志,发现报错OutOfOrderScannerNextException,判断scan操作读超时,调整客户端参数hbase.client.scanner.caching值由100到50,即一次scan操作返回50行数据,减少了每次scan花费的时间,降低了调用next时超时的可能性。另外,调整客户端配置hbase.rpc.timeout值从60000到600000,增加客户端rpc操作超时容忍时间。

改完以上配置后,手动调用重启程序,顺利执行完成。


为什么前30天程序可以正常运行,但是今天突然出现异常?

个人认为可能有两点原因:

1.scanner挂住的的map task所在的region的数据量较大,导致scan时延大

2.该集群业务量增加或业务高峰导致网络IO负载大,(或者网络本身的问题导致网络IO慢),最终导致一次scan时间较长。