今天天气不错,我心情很好,但是在测试代码功能的时候遇到了一个问题,浪费了一些时间,感到惋惜。还好,最终解决了问题,只是集群环境的问题。
问题出现
我的本意是想写一个 MapReduce 程序来扫描 HBase 数据,统计一些信息,但是在测试的时候发现程序卡住了,等了几分钟之后开始出现连续的超时日志,我感觉是连接 HBase 超时,无法读取表的元信息。
MapReduce 扫描数据报错,报错信息如下:
1 | 18:06:43.022 [main] INFO o.a.h.h.util.RegionSizeCalculator - Calculating region sizes for table "YOUR_TABLE_NAME". |

此时我又去检查正在运行的 Spark 程序写入数据有没有问题,发现也是在写入 HBase 时有同样的错误,报错日志如下:
1 | 19/09/17 18:22:49 INFO RpcRetryingCaller: Call exception, tries=10, retries=35, started=68431 ms ago, cancelled=false, msg=row 'YOUR_TABLE_NAME,14df3e2b1626e6e02fc1d772eb34f8ad,99999999999999' on table 'hbase:meta' at region=hbase:meta,,1.1588230740, hostname=dev6,16020,1565930591664, seqNum=0 |

接着我想使用 HBase 自带的 RowCounter 执行 MapReduce 任务扫描数据,测试一下,使用命令:hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'YOUR_TABLE_NAME'。
结果也是超时报错,报错信息如下:
1 | Exception in thread "main" org.apache.hadoop.hbase.client.RetriesExhaustedException: Failed after attempts=36, exceptions: |

由此可以断定,HBase 集群有问题了。
问题分析解决
首先查看集群的服务是不是还正常,一看果然不正常,RegionServer 已经挂了,那就好办了,直接重启即可。
由于是在测试环境,平时不太关注,所以没有注意到服务已经挂了,让运维人员花了 1 分钟帮忙重启一下,确认后没有问题。
最后打开 RegionServer 管理界面,查看集群信息,恢复正常。

我的 MapReduce 任务又欢快地跑起来了。

再试了一下 RowCounter 任务,也可以正常执行。

至此,这个小问题解决。
备注
在搜索资料的过程中,也有人说是以下原因,但是我这里不是这个原因,所以记录下来,仅供读者参考:
- 添加
jar包,com.yammer.metrics->metrics-core hosts添加ip映射

