[Hadoop][HDFS] Block

ggydo59·2023년 3월 24일
0

블록(Block)

  • HDFS에서 블록은 지정된 크기로 분할되어있으며, 독립적입니다.
  • 블록의 크기는 128MB이상으로 큰 단위로 분할되어 있는데, 그 이유는 블록의 탐색시간을 단축시킬 수 있기 때문입니다. 그렇게 단축한 시간을 네트워크로 파일을 전송하는데 할애할 수 있게 됩니다. 이로 인해 여러 개의 블록으로 이루어진 대용량 파일의 전송시간은 디스크의 I/O에 의해 크게 영향받습니다.

블록의 분할

  • 지정한 블록의 크기 이상의 파일은 블록 크기로 분할하여 저장합니다.

블록 추상화의 이점

  1. 파일의 하나의 크기가 디스크의 크기보다 커도 블록 단위로 분할하여 저장 혹은 분할할 수 있습니다.
  2. 블록 단위로 추상화를 할 경우, 스토리지의 서브 시스템을 단순하게 만들 수 있어, 파일 탐색 지점이나 메타정보를 기록할 때 사이즈가 정해져 있어서 구현이 쉽습니다.
  3. 장애 시 복구를 하는데 필요한 파일 복제(replication)의 구현에 적합한 구조입니다.
    같은 노드내에 같은 블록이 존재하지 않게 복제하고 노드 고장 시 다른 노드를 통해 데이터를 복구할 수 있니다.

Block Locality

  • Mapreduce 처럼 Hadoop은 데이터 처리한 중간 파일을 로컬 디스크에 저장하므로, 지역성(Locality)가 보장되어 성능을 높일 수 있습니다.
  • 네트워크 이용 안해도 됨
  • 디스크 탐색 시간 절약
  • 블록크기를 이용 CPU 처리시간 증가

Amazon S3 처럼 클라우드 스토리지를 사용하면 속도가 느려지지만, 백업 복구/관리가 용이하고 영구적인 보관이 가능합니다.

Block의 작업 순서

  1. 같은 노드의 데이터
  2. 같은 랙(Rack)에 있는 데이터
  3. 다른 랙의 노드에 있는 데이

Block Scanner

데이터 노드는 주기적으로 블록 스캐너를 실행해서 블록의 체크섬을 체크하고, 오류를 수정합니다.

Block Caching

데이터 노드 중에 자주읽는 블록은 명시적으로 메모리에 캐싱하여 조인에 자주 사용되는 데이터를 모아서 파일 단위로 캐싱해두면 읽기 성능이 좋아집니다.

$ hdfs cacheadmin
Usage: bin/hdfs cacheadmin [COMMAND]
          [-addDirective -path <path> -pool <pool-name> [-force] [-replication <replication>] [-ttl <time-to-live>]]
          [-modifyDirective -id <id> [-path <path>] [-force] [-replication <replication>] [-pool <pool-name>] [-ttl <time-to-live>]]
          [-listDirectives [-stats] [-path <path>] [-pool <pool>] [-id <id>]
          [-removeDirective <id>]
          [-removeDirectives -path <path>]
          [-addPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [-limit <limit>] [-maxTtl <maxTtl>]
          [-modifyPool <name> [-owner <owner>] [-group <group>] [-mode <mode>] [-limit <limit>] [-maxTtl <maxTtl>]]
          [-removePool <name>]
          [-listPools [-stats] [<name>]]
          [-help <command-name>]

# pool 등록 
$ hdfs cacheadmin -addPool pool1
Successfully added cache pool pool1.

# path 등록
$ hdfs cacheadmin -addDirective -path /user/hadoop/shs -pool pool1
Added cache directive 1

# 캐쉬 확인 
 hdfs cacheadmin -listDirectives
Found 1 entry
 ID POOL    REPL EXPIRY  PATH             
  1 pool1      1 never   /user/hadoop/shs

참고

profile
데이터엔지니어입니다.

0개의 댓글