-
HDFS(하둡분산파일시스템) 읽기, 쓰기, 삭제 시의 Flow 살펴보기Data 2021. 1. 20. 18:21반응형
HDFS는 하둡 환경에서 분산 파일 시스템 기능을 담당하는 하둡의 주요 모듈입니다. 이번 글에서는 HDFS와 관련해 다음과 같은 부분들을 다루고자 합니다:
- HDFS의 주요 목적
- HDFS 주요 개념 및 아키텍쳐
- HDFS(하둡분산파일시스템) 읽기, 쓰기, 삭제 시의 Flow 살펴보기 (이번글)
- HDFS 네임노드 및 데이터노드의 기능과 구현
관련글:
클라이언트, 네임노드, 데이터노드 간에 읽기, 쓰기, 삭제 시의 메커니즘을 알아보면 HDFS가 내부적으로 어떻게 작동하는지 좀 더 상세하게 알 수 있습니다. 이번 글에서는 각 Operation별로 어떤 Flow로 요청과 데이터가 흐르는지 각각 이미지와 같이 알아보겠습니다.
Read
HDFS Client는 Distributed FileSystem 인스턴스를 생성(1)하여 파일의 첫 부분의 블록 위치(데이터노드 상의)를 알기 위해 네임노드에 요청(RPC)합니다 (2). 클라이언트-데이터노드의 거리를 고려하여 블록별로 '가장 가까운 위치'가 연결된 FSDataInputStream이 반환되고, 클라이언트는 이 객체에 read 함수를 계속 실행하여 데이터노드로부터 데이터를 블록별로 읽어옵니다. 파일을 구성하는 블록들은 순차적으로 읽어오게 되며 데이터노드에서의 블록읽기가 진행되어가면서 다음 부분의 블록 위치를 계속적으로 네임노드에서 받아옵니다. 그리고 다 읽어오면 close 함수를 실행하여 연결을 종료합니다.
읽는 동안, 데이터노드와 통신 시 에러가 발생하게 되면 클라이언트는 해당 블록을 가지고 있는 데이터노드 리스트에서 다음으로 가까운 데이터노드에 요청을 보냅니다. 데이터를 읽으면서 checksum을 validation하고 이상이 있을 경우 네임노드에 알려 추후에 반복되는 시도가 없도록 합니다.
이러한 디자인은 네임노드가 오로지 메타정보 전달만을 담당하게 하여 병목이 되는 것을 막고, 데이터는 오로지 여러 군데의 데이터노드를 통해 클라이언트와 직접 송수신하도록 하였습니다.
Write
클라이언트는 DistributedFileSystem의 create()을 실행하여 파일을 생성합니다. DistributedFileSystem은 네임노드의 파일시스템 네임스페이스에 RPC 콜을 요청하여 아무 블록도 없는 파일을 생성합니다.
네임노드는 여러가지 검증을 거쳐 파일 생성 후 적절한 반환값을 보내고 DistributedFileSystem은 FSDataOutputStream을 리턴합니다. 클라이언트는 FSDataOutputStream을 통해 데이터노드에 송신될 데이터를 패킷 단위로 나누고 큐에 넣습니다.
DataStreamer는 네임노드에서 해당 패킷을 저장할 데이터노드 리스트(복제가 존재할 경우, 위에서 Replication Factor 3으로 가정)를 받고 그 리스트의 첫 번째 데이터노드에 데이터 패킷과 저장할 데이터노드 리스트를 보냅니다 (4). 여기서 중요한 점은 두 번째 데이터노드는 클라이언트가 아닌 첫 번째 데이터노드에서 데이터를 받아 저장하게 됩니다. DFSOutputStream도 패킷들을 넣어둔 큐를 가지고 있는데, 데이터노드로부터 ack packet를 받은 경우 해당 패킷을 큐에서 삭제합니다.
Delete
사용자나 애플리케이션에 의해서 파일이 삭제되었을 때, 해당 파일은 HDFS에서 바로 사라지지 않습니다. 대신, HDFS는 해당 파일을 /trash 라는 디렉토리 안으로 rename 합니다. 해당 파일은 /trash에 존재하는한 언제든지 쉽게 원상복귀시킬 수 있습니다. /trash에 남은 파일은 설정된 시간 동안 잔존하다가 시간이 만료되면 네임노드가 해당 파일을 네임스페이스에서 제거하게 됩니다. 파일을 네임스페이스에서 제거하면 파일에 속하는 블록들이 모두 freed하게 됩니다. 그렇기에 파일 삭제 후 HDFS에 가용 공간이 늘어나는 것 사이에는 시간 차이가 있습니다.
Reference
[4] HDFS Scalability: The limits to growth
[5] Architecting Modern Data Platform
반응형'Data' 카테고리의 다른 글
YARN 리소스매니저(Resource Manager) (0) 2021.01.23 YARN(하둡분산자원관리) 실행 구조 및 흐름 (0) 2021.01.23 YARN(하둡분산자원관리) 주요개념 및 아키텍쳐 (0) 2021.01.21 HDFS 네임노드 및 데이터노드의 기능과 구현 (0) 2021.01.20 HDFS(하둡분산파일시스템) 주요 개념 및 아키텍쳐 (0) 2021.01.20 YARN이란? (하둡분산자원관리) (0) 2021.01.19 HDFS란? (하둡분산파일시스템) (0) 2021.01.16 하둡이란? (Apache Hadoop) (0) 2021.01.15