본문 바로가기

hadoop

Hadoop Cluster 구축

### 환경
- 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-worker1
hadoop-worker2
hadoop-worker3

- Hadoop Worker 노드 목록을 지정.
- start-dfs.sh 명령시 이 파일에 있는 호스트로 ssh접속후 DataNode 띄움
hdfs namenode -foramt
start-all.sh

 

Master

hadoop-master

Slave

hadoop-worker

 

NameNode

분산 처리 시스템에서 마스터를 담당하며 메타데이터, 데이터 노드 관리

  • 각 데이터 노드에서 전달하는 메타 데이터를 받은 후에 전체 노드의 메타데이터 정보와 파일 정보를 묶어서 관리
  • 데이터를 저장할 때 기본적으로 블록 단위로 들어옴. 이때 들어온 블록들을 어떤 데이터 노드에 저장할지 정해줌
  • 네임 노드와 데이터 노드는 3초마다 하트비트를 주고 받는데, 이러한 일림이 오지 않으면 문제가 생겼다고 판단하여 다른 데이터 노드에 복제된 블럭을 가지고 와서 사용

메타데이터 : 파일 이름, 크기, 생성시간, 접근 권한 등으로 구성

DataNode

데이터들이 저장되는 컴퓨터, 파일을 저장하는 역할을 하며 블록 단위로 저장

주기적으로 네임노드에 하트 비트와 블록 리포트를 전달

  • 하트 비트 : 데이터 노드의 동작 여부를 판단하는데 이용
  • 블록 리포트 : 블록의 변경사항을 확인하고 네임노드의 메타데이터를 갱신

SecondaryNameNode

  • namenode가 구동되고 나면 Edits파일이 주기적으로 생성
  • namenode의 트랜잭션이 빈번하면 빠른 속도로 Edits 파일이 생성

=> Fsimage와 Edits 파일을 주기적으로 merge하여 최신 블록의 상태로 파일을 생성

 

NodeManager

각각의 노드에서 컨테이너를 생성하고 실행 및 관리

컨테이너의 상태를 모니터링하고, 필요한 경우 컨테이너를 다시 시작

ResourceManager

클러스터 전체 자원 사용량 관리(자원 할당, 스케줄링)

 

 

 

◇ 참고

- https://velog.io/@dddwsd/1-Hadoop-HDFS%EC%9D%98-architecture