본문 바로가기
BigData 기술/Hadoop

[HDFS] Block Pool 개념 정리

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

 

HDFS에 데이터가 어떻게 저장되는지 이해하기 위해 Block Pool을 알아보겠습니다.

 

Block Pool은 네임스페이스에 할당된 공간이라고 보면 된다. Block Pool에 블록 관리에 필요한 메타데이터(블록 위치 정보 등)를 저장한다. Block Pool은 메모리에 저장된다. Block Pool ID는 BP-<랜덤숫자>-<네임노드IP> 형식으로 만들어진다. 네임노드 웹 UI(http://<네임노드IP>:50070)에서 Block Pool ID를 확인할 수 있다. 

HDFS Federation이 구성된 경우가 아니라면, 네임스페이스가 여러개 구성된 것이 아니기 때문에 Block Pool도 1개일 것이다.

데이터노드는 모든 Block Pool에 있는 블록들을 volume(로컬디스크)에 저장한다. 예를 들어, 데이터노드의 /data1/hdfs/data/current/BP-783442380-192.168.5.181-1588667915739/finalized 하위에 blk_1073963908 블록 파일이 저장되는 것이다.

  • volume 설정 (/etc/hadoop/conf/hdfs-site.xml)
    • dfs.datanode.data.dir : DN이 block 파일들을 저장하는 경로
    • dfs.datanode.failed.volumes.tolerated : the number of volumes that are allowed to fail before a datanode stops offering service.
      MTO 테스트 클러스터는 0으로 설정함. 즉, volume 하나만 문제가 생겨도 datanode 서비스를 중지시키겠다는 의미.

 

 


데이터노드 로그를 보면서 block 데이터들이 어떻게 저장되는지 확인해보겠습니다.

 

  • 데이터노드는 block report를 주기적으로 네임노드에게 보낸다. 네임노드는 block report를 받아 HDFS에 저장된 파일들의 최신정보를 유지한다.
2018-05-31 17:38:58,213 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Successfully sent block report 0x17b809f69b1f09, containing 8 storage report(s), of which we sent 8. The reports had 16496 total blocks and used 1 RPC(s). This took 38 msec to generate and 33 msecs for RPC and NN processing. Got back no commands.

 

  • 데이터노드는 block 파일들을 다른 DN한테 받는다. (블록 복제하는 경우)
  • HDFS에 데이터를 쓰면 데이터노드 3개가 파이프라인으로 연결되어 데이터를 넘기는 방식으로 블록을 저장한다.

2018-05-31 09:54:53,990 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-2063310560-172.31.200.49-1521439480841:blk_1074137301_396511 src: /172.31.200.60:35291 dest: /172.31.200.60:50010
2018-05-31 09:54:57,089 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder: BP-2063310560-172.31.200.49-1521439480841:blk_1074137301_396511, type=HAS_DOWNSTREAM_IN_PIPELINE
.
.
.

2018-05-31 17:39:34,466 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Receiving BP-2063310560-172.31.200.49-1521439480841:blk_1074146959_406176 src: /172.31.200.55:58507 dest: /172.31.200.60:50010
2018-05-31 17:39:34,604 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Received BP-2063310560-172.31.200.49-1521439480841:blk_1074146959_406176 src: /172.31.200.55:58507 dest: /172.31.200.60:50010 of size 32516726

 

  • 이렇게 받은 block 파일을 스케쥴링하고 delete 하는 과정을 거치기도한다.(블록삭제하는경우)
    • volume의 rbw 경로에 저장된 경우, 블럭이 HDFS client에게 쓰이고 있는 것.
    • volume의 finalized 경로에 저장된 경우, 블럭이 HDFS client에게 쓰이지 않고 완료된 것.

2018-05-31 20:40:12,350 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Scheduling blk_1074137301_396511 file /data6/hdfs/data/current/BP-2063310560-172.31.200.49-1521439480841/current/rbw/blk_1074137301 for deletion
2018-05-31 20:40:12,353 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-2063310560-172.31.200.49-1521439480841 blk_1074137301_396511 file /data6/hdfs/data/current/BP-2063310560-172.31.200.49-1521439480841/current/rbw/blk_1074137301

2018-06-06 19:34:08,566 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Scheduling blk_1074146959_406176 file /data3/hdfs/data/current/BP-2063310560-172.31.200.49-1521439480841/current/finalized/subdir6/subdir46/blk_1074146959 for deletion
2018-06-06 19:34:08,630 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetAsyncDiskService: Deleted BP-2063310560-172.31.200.49-1521439480841 blk_1074146959_406176 file /data3/hdfs/data/current/BP-2063310560-172.31.200.49-1521439480841/current/finalized/subdir6/subdir46/blk_1074146959



 

 

참고링크

 

HDFS Federation

Hug - March - HDFS Federation View more presentations from Yahoo! Developer Network Hadoop World 2011에서 발표되었던 HDFS Federation 요약 video를 보고 이해한 거 + 대략적인 소스 분석을 토대로 한 거라..

xlos.tistory.com

 

반응형

댓글