일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- python
- HDFS
- NoSQL
- SlackWebhookOperator
- Lambda architecture
- Service
- yarn
- LDAP
- java
- Windows
- hadoop
- HBase
- Scala
- Kafka
- 정규표현식
- slack app
- slack
- HIVE
- re
- execution_date
- ambari
- docker
- HDP
- jupyter
- 람다 아키텍처
- airflow
- Namenode
- Example DAG
- 빅데이터
- MapReduce
- Today
- Total
IT 삽질기
HDFS 데이터 읽기/쓰기 본문
HDFS에서 데이터를 읽고 쓸 때 어떻게 동작하는지 알아보도록 하자.
해당 내용은 하둡 완벽 가이드 4판의 내용을 정리한 내용입니다.
HDFS 데이터 읽기
HDFS에서 데이터를 읽을 때 아래와 같은 동작을 하게 된다.
1. 클라이언트는 HDFS가 DistributedFileSystem 인스턴스 FileSystem 객체의 open() 메서드를 호출하여 원하는 파일을 연다.
2. DistributedFileSystem은 파일의 첫 번째 블록 위치를 파악하기 위해 RPC를 사용하여 NameNode를 호출
3. NameNode는 데이터의 메타데이터를 저장하고 있기 때문에 저장된 파일의 위치를 알고 이에 해당하는 DataNode의 주소 반환
이때 클러스터의 네트워크 위상에 따라 클라이언트와 가까운 순으로 DataNode가 정렬
(파일을 요구하는 클라이언트가 DataNode이고 해당 데이터를 가지고 있으면 로컬에서 데이터를 읽음)
DistributedFileSystem은 클라이언트가 데이터를 읽을 수 있도록 FSDataInputStream을 반환하고,
FSDataInputStream은 DataNode와 NameNode의 I/O를 관리하는 DFSInputStream을 래핑
4. 파일의 첫 번째 블록의 DataNode주소를 저장하고 있는 DFSInputStreamd은 가장 가까운 DataNode에서 데이터를 전송
5. 데이터 블록이 끝나면 DFSInpuStream은 데이터노드의 연결을 닫고 다음 블록의 데이터 노드를 찾아 데이터를 읽기 시작
6. 모든 블록에 대한 읽기가 끝나면 클라이언트는 FSDataInputStream의 close()를 호출해 연결을 끝냄
HDFS 데이터 쓰기
HDFS에서 데이터를 때 아래와 같은 동작을 하게 된다.
1. 클라이언트에서는 DistributedFileSystem의 create()를 호출해 파일을 생성
2. DistributedFileSystem은 파일시스템의 네임스페이스에 새로운 파일을 생성하기 위해 네임노드에 RPC 요청을 보냄
3. DFSOutputStream은 데이터를 패킷으로 분리, 데이터 큐라 불리는 내부 큐로 패킷을 보내 DataStreamer에서 패킷을 처리
4. NameNode에 복제본을 저장할 DataNode 목록을 요청하고 파이프 라인을 형성해 첫번째 노드에만 데이터를 보내면
파이프 라인에 따라 첫번째 노드가 두번째 노드로 데이터를 전달하는 방식으로 복제본의 수만큼 데이터가 전달되어 저장
5. DFSOutputStream은 DataNode의 승인 여부를 기다리는 ack 큐라 불리는 내부 패킷 큐를 유지하며,
파이프라인의 모든 DataNode로 부터 ack 응답을 받아야 제거
6. 데이터 쓰기를완료할 때 클라이언트는 close() 메서드를 호출
7. 모든 패킷이 완전히 전송되면 NameNode에 파일 완료 신호를 보내 데이터 쓰기 동작이 완료된다.
참고자료
'BigData > Hadoop' 카테고리의 다른 글
Resource Manager Active Standby 전환 이슈 (0) | 2021.03.09 |
---|---|
Ambari HDFS component 재시작 관련 이슈 해결(hadoop_lzo) (0) | 2021.03.08 |
Hadoop 1.0과 Hadoop 2.0 (1 YARN) (0) | 2019.06.10 |
HDFS란 (0) | 2019.06.02 |
Hadoop이란 (0) | 2019.03.13 |