### 환경
- Rocky Linux release 8.10
- hadoop 3.2.4
- jdk 1.8
### 구성
- hadoop-master 192.168.56.114
- hadoop-worker1 192.168.56.115
- hadoop-worker2 192.168.56.116
- hadoop-worker3 192.168.56.117
### 사전 작업
- java(jdk) 설치 및 JAVA_HOME 설정
- hadoop 클러스터 노드들 ssh 설정
Hadoop-Master
core-site.xml
- 코어 설정(기본 파일시스템, 임시 디렉터리)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>cha</value>
</property>
<property>
<name>hadoop.security.token.service.use_ip</name>
<value>true</value>
</property>
</configuration>
- fs.defaultFS : 기본 파일시스템 URI 지정
- tmp.dir : 하둡이 내부적으로 임시 데이터를 저장할 디렉토리 경로
- hadoop.http.staticuser.user : 웹 UI를 통해 접근할 때 사용하는 가상의 사용자 이름
- hadoop.security.token.service.use_ip : IP기반 토큰 체크 여부
hadoop-env.sh
- 데몬 실행에 필요한 OS 환경 변수
export JAVA_HOME=/data/java
export PATH=$PATH:$JAVA_HOME/bin
- 하둡 데몬들이 사용할 java경로
hdfs-site.xml
- HDFS 관련 설정(네임노드/데이터노드 디렉토리, 복제본 수, 권한 설정등)
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///data/hadoop/dfs/namesecondary</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.rpc-bind-host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
- dfs.namenode.name.dir : NameNode(메타데이터)파일 로컬 디스크 저장 경로
- datanode.data.dir : DataNode 로컬 디스크 저장 경로
- dfs.namenode.checkpoint.dir : NameNode의 메타데이터 주기적으로 병합
- dfs.namenode.datanode.registration.ip : DataNode로부터 등록 요청을 받았을때, 호스트명/아이피 검증
- dfs.replication : 복제본 갯수
- dfs.permissions.enable : HDFS 파일/디렉터리에 대한 POSIX 권한(소유자, 그룹, 권한비트등)을 사용할지 여부
- dfs.namenode.rpc-bind-host : NameNode가 RPC포트에 어떤 IP로 바인드 할지
- dfs.webhdfs.enabled : WebHDFS 기능 활성화, HDFS에 업로드/다운로드 할때 필요
workers
hadoop-worker2
hadoop-worker3
- Hadoop Worker 노드 목록을 지정.
- start-dfs.sh 명령시 이 파일에 있는 호스트로 ssh접속후 DataNode 띄움
hdfs namenode -foramt
start-all.sh
Master
Slave
NameNode
분산 처리 시스템에서 마스터를 담당하며 메타데이터, 데이터 노드 관리
- 각 데이터 노드에서 전달하는 메타 데이터를 받은 후에 전체 노드의 메타데이터 정보와 파일 정보를 묶어서 관리
- 데이터를 저장할 때 기본적으로 블록 단위로 들어옴. 이때 들어온 블록들을 어떤 데이터 노드에 저장할지 정해줌
- 네임 노드와 데이터 노드는 3초마다 하트비트를 주고 받는데, 이러한 일림이 오지 않으면 문제가 생겼다고 판단하여 다른 데이터 노드에 복제된 블럭을 가지고 와서 사용
메타데이터 : 파일 이름, 크기, 생성시간, 접근 권한 등으로 구성
DataNode
데이터들이 저장되는 컴퓨터, 파일을 저장하는 역할을 하며 블록 단위로 저장
주기적으로 네임노드에 하트 비트와 블록 리포트를 전달
- 하트 비트 : 데이터 노드의 동작 여부를 판단하는데 이용
- 블록 리포트 : 블록의 변경사항을 확인하고 네임노드의 메타데이터를 갱신
SecondaryNameNode
- namenode가 구동되고 나면 Edits파일이 주기적으로 생성
- namenode의 트랜잭션이 빈번하면 빠른 속도로 Edits 파일이 생성
=> Fsimage와 Edits 파일을 주기적으로 merge하여 최신 블록의 상태로 파일을 생성
NodeManager
각각의 노드에서 컨테이너를 생성하고 실행 및 관리
컨테이너의 상태를 모니터링하고, 필요한 경우 컨테이너를 다시 시작
ResourceManager
클러스터 전체 자원 사용량 관리(자원 할당, 스케줄링)
◇ 참고
- https://velog.io/@dddwsd/1-Hadoop-HDFS%EC%9D%98-architecture