BigData 기술/Hadoop

DataNode failed volumes 원인 및 해결법

잇서니 2021. 1. 7. 11:08
반응형

 

hadoop 2.7.4 테스트 클러스터 운영 중에 2대의 데이터노드가 shutdown 됐던 적이 있었습니다. 디스크 고장으로 인해 데이터노드 volume에 문제가 생긴 것이 원인이었습니다.

 

원인 파악

1. 데이터노드 로그(/var/log/hadoop-hdfs/hadoop-hdfs-datanode-mnode4.dev.com.log)를 확인해보니 데이터노드의 volume(/data1/hdfs/data)에 문제가 생겼다네요.

(참고) 데이터노드는 volume(로컬디스크)에 block 데이터를 저장합니다.

2018-05-29 10:53:44,775 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:mnode4.dev.com:50010
:DataXceiver error processing WRITE_BLOCK operation src: /172.31.200.59:51176 dst: /172.31.200.58:50010
java.io.InterruptedIOException: Interrupted while waiting for IO on channel java.nio.channels.SocketChannel[]. 60000 millis timeout left.

2018-05-29 10:53:44,775 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Removed volume: /data1/hdfs/data/current
2018-05-29 10:53:44,776 WARN org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Completed checkDirs. Found 1 failure volumes.
2018-05-29 10:53:44,776 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Deactivating volumes (clear failure=false): /data1/hdfs/data
2018-05-29 10:53:44,776 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Removing /data1/hdfs/data from FsDataset.
2018-05-29 10:53:44,843 INFO org.apache.hadoop.hdfs.server.common.Storage: Removing block level storage: /data1/hdfs/data/current/BP-2063310560-172.31.200.49-1521439480841

2018-05-29 10:53:44,844 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DataNode.handleDiskError: Keep Running: false
2018-05-29 10:53:44,844 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: DataNode is shutting down: DataNode failed volumes:/data1/hdfs/data;
2018-05-29 10:53:45,651 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool BP-2063310560-172.31.200.49-1521439480841 (Datanode Uuid 35d46b49-76bb-4ef3-a5c4-de873b6b54df) service to cnode5.dev.com/172.31.200.50:8020
2018-05-29 10:53:45,697 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Ending block pool service for: Block pool BP-2063310560-172.31.200.49-1521439480841 (Datanode Uuid 35d46b49-76bb-4ef3-a5c4-de873b6b54df) service to cnode4.dev.com/172.31.200.49:8020
2018-05-29 10:53:45,798 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Removed Block pool BP-2063310560-172.31.200.49-1521439480841 (Datanode Uuid 35d46b49-76bb-4ef3-a5c4-de873b6b54df)

2018-05-29 10:53:45,798 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Removing block pool BP-2063310560-172.31.200.49-1521439480841
2018-05-29 10:53:47,622 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder: BP-2063310560-172.31.200.49-1521439480841:blk_1074098566_357769, type=HAS_DOWNSTREAM_IN_PIPELINE terminating
2018-05-29 10:53:47,622 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder: BP-2063310560-172.31.200.49-1521439480841:blk_1074098567_357770, type=HAS_DOWNSTREAM_IN_PIPELINE terminating

2018-05-29 10:53:47,800 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Exiting Datanode
2018-05-29 10:53:47,801 INFO org.apache.hadoop.util.ExitUtil: Exiting with status 0
2018-05-29 10:53:47,803 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:

 

 

 

2. 그래서 데이터노드의 시스템로그(/var/log/messeges)를 확인해보니 문제가 생긴 볼륨 (/data1/~~)에 마운트 되어 있는 디스크(/dev/sdb1)가 고장이 났었습니다. 하드웨어 문제였던 것입니다.

 

3. /etc/hadoop/conf/hdfs-site.xml 설정값 중 dfs.datanode.failed.volumes.tolerated 이 0으로 설정되어 있었기 때문에 volume 하나에 문제가 생겨도 datanode 서비스가 멈추게됩니다.

 

조치

HDFS 설정에서 장애가 있는 볼륨(/data1)을 제거하였습니다. (디스크 교체 후에는 다시 붙여야겠죠!)

 

  • dfs.datanode.data.dir 설정 (/etc/hadoop/conf/hdfs-site.xml)

<before>

<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data1/hdfs/data, file:/data2/hdfs/data, file:/data3/hdfs/data, file:/data4/hdfs/data, file:/data5/hdfs/data, file:/data6/hdfs/data, file:/data7/hdfs/data, file:/data8/hdfs/data, file:/data9/hdfs/data,file:/data10/hdfs/data</value>
</property>

 

<after>

<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data2/hdfs/data, file:/data3/hdfs/data, file:/data4/hdfs/data, file:/data5/hdfs/data, file:/data6/hdfs/data, file:/data7/hdfs/data, file:/data8/hdfs/data, file:/data9/hdfs/data,file:/data10/hdfs/data</value>
</property>

 

  • datanode 재시작
# service hadoop-hdfs-datanode start

 

 

참고사항

1.

데이터노드 volume이 여러개 잡혀있는 경우라면 dfs.datanode.failed.volumes.tolerated 설정값을 0보다 높게 잡는 것도 고려해볼만 할 것 같습니다. volume이 1개만 고장나도 데이터노드가 꺼지는 현상을 막고 싶다면요!

 

2.

hadoop 2.4 버전에서는 dfs.datanode.data.dir 설정을 변경한 후 데이터노드를 재시작했는데 네임노드가 갖고 있는 정보와 불일치되는 현상이 있다고 합니다.(볼륨을 제거했는데 네임노드는 여전히 해당 볼륨에 데이터가 있다고 인식함) 자세한 내용은 링크를 참고해주세요.

 

 

반응형