AIOps 一场颠覆传统运维的盛筵
1187
2022-10-05
大数据运维: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
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失败的日志去百度,大类报错很难百度到问题。生产集群一个大类报错往往有很多种诱因造成,排查是个细致活,尽可能查看详细的日志。
大数据运维大有可为,作为基座,虽然平时会背个锅之类的(只要问题抛出去就不是问题!)。
发表评论
暂时没有评论,来抢沙发吧~