大数据运维:datanode启动后挂了Initialization failed for Block pool

网友投稿 1187 2022-10-05

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

大数据运维:datanode启动后挂了Initialization failed for Block pool

今天我们分析讲述一下大数据运维日常工作中遇到的一个小问题。

1.案发现场还原

查看日志报错如下:

1月 8, 上午10点26:12.689 WARN org.apache.hadoop.hdfs.server.common.Storage Failed to analyze storage directories for block pool BP-465426754-10.5.32.151-1456251355718java.io.IOException: BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: hadoop8/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718 at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.loadBpStorageDirectories(BlockPoolSliceStorage.java:212) at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead(BlockPoolSliceStorage.java:244) at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829) at java.lang.Thread.run(Thread.java:745)11月 8, 上午10点26:12.690 WARN org.apache.hadoop.hdfs.server.common.Storage Failed to add storage for block pool: BP-465426754-10.5.32.151-1456251355718 : BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: hadoop8/dfs/dn/current/BP-465426754-10.5.32.151-145625135571811月 8, 上午10点26:12.690 INFO org.apache.hadoop.hdfs.server.common.Storage Storage directory [DISK]file:/hadoop9/dfs/dn/ has already been used.11月 8, 上午10点26:12.722 INFO org.apache.hadoop.hdfs.server.common.Storage Analyzing storage directories for bpid BP-465426754-10.5.32.151-145625135571811月 8, 上午10点26:12.722 WARN org.apache.hadoop.hdfs.server.common.Storage Failed to analyze storage directories for block pool BP-465426754-10.5.32.151-1456251355718java.io.IOException: BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: hadoop9/dfs/dn/current/BP-465426754-10.5.32.151-1456251355718 at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.loadBpStorageDirectories(BlockPoolSliceStorage.java:212) at org.apache.hadoop.hdfs.server.datanode.BlockPoolSliceStorage.recoverTransitionRead(BlockPoolSliceStorage.java:244) at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395) at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:477) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829) at java.lang.Thread.run(Thread.java:745)

核心最后fetal报错如下,dn服务停止:

11月 8, 上午10点26:12.723 WARN org.apache.hadoop.hdfs.server.common.Storage Failed to add storage for block pool: BP-465426754-10.5.32.151-1456251355718 : BlockPoolSliceStorage.recoverTransitionRead: attempt to load an used block storage: hadoop9/dfs/dn/current/BP-465426754-10.5.32.151-145625135571811月 8, 上午10点26:12.723 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode Initialization failed for Block pool (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd) service to bd15-21-33-62/10.90.48.127:8040. Exiting. java.io.IOException: All specified directories are failed to load. at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478) at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1424) at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1385) at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:317) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:228) at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:829) at java.lang.Thread.run(Thread.java:745)11月 8, 上午10点26:12.723 WARN org.apache.hadoop.hdfs.server.datanode.DataNode Ending block pool service for: Block pool (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd) service to bd15-21-33-62/10.90.48.127:804011月 8, 上午10点26:12.723 INFO org.apache.hadoop.hdfs.server.datanode.DataNode Removed Block pool (Datanode Uuid 889c4b61-14c2-4bca-8ad0-6f7d378511cd)11月 8, 上午10点26:14.724 WARN org.apache.hadoop.hdfs.server.datanode.DataNode Exiting Datanode11月 8, 上午10点26:14.726 INFO org.apache.hadoop.util.ExitUtil Exiting with status 011月 8, 上午10点26:14.729 INFO org.apache.hadoop.hdfs.server.datanode.DataNode SHUTDOWN_MSG: /************************************************************SHUTDOWN_MSG: Shutting down DataNode at bd15-21-131-85/10.21.131.85************************************************************/

2. 分析解决

因为这种是一个大类报错,抛出的异常

排查1:namenode 和 datanode 集群 ID 不匹配?

仔细查看了异常节点的所有数据盘符下的clusterid和namenode的ClusterID发现并没有不同,排除此方法。

尖叫提示:

注意,这种clusterID不一致的情况,一般是是集群namenode 格式化时才会出现的情况,比如集群下线了一个节点,然后重新格式化namenode,再把已经下线的节点上线集群,发现报错,clusterid不一致(因为格式化集群会重新分配clusterid),这种clusterid不一致的一般是小白学习中才会出现的,生产集群你给我格式化namenode看看,老板会让你怀疑人生,牢底坐穿。

所以这种解决方式比如重新格式化namenode,格式化集群肯定可以解决问题,但是不具有实际实操意义。跟你重装一下集群一个道理,简单粗暴没啥意义。

排查2:uuid不一致的问题?

其实一般不会有这种问题,比如uuid不一致等。

排查3:磁盘数据目录有异常,读取数据异常,造成整个节点挂了。

开启日志的debug模式,查看详细信息,慎用,因为会有大量日志,记得关闭

日志查看是/hadoop7数据目录有问题,进入查看,

问题解决:

发现hadoop7目录下有个数据目录权限异常,造成加载失败,造成整个dn加载失败,无法注册。首先把/hadoop7目录直接从datanode的data_dir中删除。重新启动dn即可。

尖叫提示:

有时候报错只是一个大类的报错,抛出的异常,诱因有可能有多种。所以这个时候去查看详细的日志,debug日志,看日志从哪里开始异常的,逐步排查,而不是直接查看fetal失败的日志去百度,大类报错很难百度到问题。生产集群一个大类报错往往有很多种诱因造成,排查是个细致活,尽可能查看详细的日志。

大数据运维大有可为,作为基座,虽然平时会背个锅之类的(只要问题抛出去就不是问题!)。

上一篇:ZJIT 2022智能运维方向系列报告(四) | 数码人运维专家乔冠林:资产数字化赋能IDC绿色低碳运行
下一篇:快速构建智能运维问答机器人的实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~