본문 바로가기
BigData 기술/Hadoop

DataNode failed volumes 원인 및 해결법

by 잇서니 2021. 1. 7.
반응형

 

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 설정을 변경한 후 데이터노드를 재시작했는데 네임노드가 갖고 있는 정보와 불일치되는 현상이 있다고 합니다.(볼륨을 제거했는데 네임노드는 여전히 해당 볼륨에 데이터가 있다고 인식함) 자세한 내용은 링크를 참고해주세요.

 

 

반응형

'BigData 기술 > Hadoop' 카테고리의 다른 글

Hadoop 클러스터 구축 과정  (4) 2021.04.01
[HDFS] 네임노드 구동과정 (Namenode Startup Process)  (8) 2021.01.05
[HDFS] Block Pool 개념 정리  (8) 2021.01.04
[HDFS] 하둡 Balancer 과정  (1060) 2020.07.20
[HDFS] Rack Awareness 란  (911) 2020.07.15

댓글