일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- redis
- 물리삭제
- aws ec2
- logstash
- Next.js
- AWS
- ci/cd
- node exporter
- 로그 백업
- Django
- unique constraint
- Locust
- DAG
- 계정 관리
- NoSQL
- elasticsearch
- 논리삭제
- 오블완
- grafana
- hard delete
- nginx
- soft delete
- Airflow
- slack
- hive
- prometheus
- JWT
- 티스토리챌린지
- Hadoop
- docker
- Today
- Total
먹수의 개발일지
[Docker] Ubuntu에 Hadoop 클러스터 구성하기 본문
클러스터 구축 방향 및 환경
일반적으로 다수의 컴퓨터로 하둡 클러스터를 구성하지만 다수의 컴퓨터를 보유하여 진행하기 어렵기 때문에, 하나의 컴퓨터에서 docker를 활용하여 클러스터를 구성하려고 한다.
- 로컬 환경 : Mac OS
- Docker OS : Ubutu 22.04
- Hadoop 3.3.6
- NameNode 1개, DataNode 3개
Ubuntu에 Hadoop 설치를 위한 환경 세팅
Docker를 통한 Ubuntu 이미지 다운로드 및 container 생성
사용할 Ubuntu 버전의 이미지를 다운로드 및 실행한다.
$ docker run ubuntu:22.04
만약 다운받은 이미지를 원하는 이름으로 다시 만들고 싶거나 새로운 container를 만들고 싶다면 아래와 같이 이름(ubuntu)로 지정하여 실행해주면 된다.
$ docker run --restart always --name ubuntu -dt ubuntu:22.04
실행중인 ubuntu 컨테이너에 접속한다.
$ docker exec -it ubuntu /bin/bash
기본 프로그램 설치 및 환경설정
ubuntu라는 이름의 container에 hadoop과 기타 프로그램들을 설치한 뒤 이미지화시켜 다수의 container를 생성해보자.
→ 하둡 클러스터는 여러개의 서버가 필요한데, 각 서버마다 세팅을 하기는 번거롭기 때문이다.
ref) Hadoop - Supported Java Versions 확인
기본 프로그램(wget, vim, ssh, java)을 설치한다.
$ apt-get update
$ apt install wget -y
$ apt install vim -y
$ apt install openssh-server openssh-client -y
$ apt install openjdk-8-jdk -y
공개키를 생성한다.
$ ssh-keygen -t rsa -b 4096 -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ sudo ssh-keygen -A
java 환경변수 설정을 위해 java가 설치된 경로를 확인하고, bashrc 파일에 JAVA_HOME과 HADOOP_CLASSPATH를 추가한다.
readlink의 결과에서 전체가 아닌 jre 이전까지 경로를 JAVA_HOME에 넣어주자.
$ readlink -f /usr/bin/java
# /usr/lib/jvm/java-8-openjdk-arm64/jre/bin/java
$ vim ~/.bashrc
#bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
Hadoop 설치하기
hadoop 3.3.6 버전을 사용했다. 설치할 hadoop을 확인한 후 설치 및 압축을 해제해준다.
ref) 설치 가능한 hadoop 버전 확인
$ mkdir hadoop_home
$ cd hadoop_home
$ wget <https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz>
$ tar -xvzf hadoop-3.3.6.tar.gz
hadoop이 설치 되었다면 bashrc 파일에 환경변수를 설정한다. hadoop을 설치한 경로에서 pwd로 위치를 확인한 후 해당 경로를 입력해 준다.
$ pwd
# /home/hadoop_home
$ vim ~/.bashrc
#bashrc
.
.
export HADOOP_HOME=/home/hadoop_home/hadoop-3.3.6
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
.
.
$ source ~/.bashrc
Hadoop 설정 파일 세팅
아래 경로로 이동하여 3개의 hadoop 설정 파일들을 수정한다.
$ cd $HADOOP_CONFIG_HOME
fs.default.name의 value는 추후에 세팅할 NameNode의 hostname을 적어주면 된다. 여기서는 참고한 블로그와 동일하게 nn으로 지정하였다.
1) core-site.xml
<!-- core-site.xml -->
<configuration>
<!-- 하둡에서 발생하는 임시 데이터를 저장하기 위한 공간 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop_home/temp</value>
</property>
<!-- 모든 데이터 노드들이 nameNode에 9000번 포트로 통신을 한다 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn:9000</value>
<final>true</final>
</property>
</configuration>
2) hdfs-site.xml
<!-- hdfs-site.xml -->
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
<final>true</final>
</property>
<!-- 네임노드의 HDFS 파일시스템 메타데이터를 저장하는 경로의 목록 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/hadoop_home/namenode_dir</value>
<final>true</final>
</property>
<!-- 데이터노드의 HDFS 블록을 저장하는 경로의 목록 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/hadoop_home/datanode_dir</value>
<final>true</final>
</property>
</configuration>
hadoop.tmp.dir, dfs.namenode.name.dir, dfs.datanode.data.dir의 value에는 각 데이터를 저장할 경로를 적어주고, 해당 폴더들을 생성한다.
$ mkdir /hadoop_home/temp
$ mkdir /hadoop_home/namenode_dir
$ mkdir /hadoop_home/datanode_dir
3) mapred-site.xml
- Hadoop YARN을 위한 실행 프레임워크 classic, local, yarn 을 선택할 수 있다.
- yarn을 선택했을 경우 yarn-site.xml을 경우 내용을 추가해줘야 한다.
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>nn:9001</value>
</property>
</configuration>
+) hadoop-env.sh
- 추후에 hadoop을 root로 실행할 경우 아래 설정을 추가해줘야한다. 하지만 별도의 hadoop user로 실행하도록 권장한다.
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
마지막으로 NameNode를 포맷해주고 docker container 접속을 종료한다.
$ hdfs namenode -format
$ exit
Hadoop 클러스터 구성 및 실행
작업한 컨테이너를 commit하여 하둡 base이미지를 생성한다.
# docker commit [작업한 컨테이너명] [원하는 이미지명:태그]
$ docker commit ubuntu hadoop:v1
hadoop 클러스터는 NameNode 1개, DataNode 3개로 구성하겠다.
NameNode container를 실행한다.
- --network hadoop-net : 미리 생성해둔 docker network에 연결해준다. 기존에 사용되던 link옵션은 legacy로 삭제될 예정이기 때문에 docker network를 사용했다. 같은 호스트내에서 container들이 연결될 수 있도록 해주기 위한 작업이다.
- -h nn : 컨테이너의 호스트 이름을 nn으로 설정한 것이다.
- hadoop 3버전부터는 default 포트가 9870으로 변경되었다.
$ docker run -d --network hadoop-net -it -h nn --name nn -p 9870:9870 hadoop:v1 /sbin/init
DataNode container 3개를 각각 실행한다.
#DataNode1
$ docker run -d --network hadoop-net -it -h dn1 --name dn1 hadoop:v1 /sbin/init
#DataNode2
$ docker run -d --network hadoop-net -it -h dn2 --name dn2 hadoop:v1 /sbin/init
#DataNode3
$ docker run -d --network hadoop-net -it -h dn3 --name dn3 hadoop:v1 /sbin/init
NameNode와 DataNode 연결하기
hadoop 구성을 위해선 NameNode 가 DataNode 의 ip를 알아야한다.
docker inspect 명령어를 통해 확인할 수 있다.
$ docker inspect nn | grep IPAddress
$ docker inspect dn1 | grep IPAddress
$ docker inspect dn2 | grep IPAddress
$ docker inspect dn3 | grep IPAddress
NameNode 컨테이너에 접속하여 서 DataNode에 해당하는 hosts 정보를 아래처럼 입력한다.
$ vim /etc/hosts
#hosts
....
172.18.0.2 nn
172.18.0.3 dn1
172.18.0.4 dn2
172.18.0.5 dn3
→ container를 stop 시키고 재실행했을 때 hosts 파일은 초기화된다. 그래서 매번 conatiner를 다시 시작할 때마다 hosts 파일을 작성하고 싶지 않다면 shell script를 만들어 놓으면 좋을 것 같다.
DataNode들의 서버를 지정해줘야 한다.
/* NameNode Terminal */
$ cd $HADOOP_CONFIG_HOME
$ vim workers
#workers
dn1
dn2
dn3
Hadoop 실행하기
start-all.sh
# 모든 프로세스 종료하기
#stop-all.sh
아래 명령어로 하둡 프로세스가 잘 작동하는지 확인할 수 있다.
jps
마지막으로 localhost:9870으로 접속하면 하둡 UI페이지를 확인할 수 있다.
References
https://bernardosr1.medium.com/setting-up-hadoop-with-2-workers-linux-aa5870a63af
'데이터 엔지니어링 > Hadoop' 카테고리의 다른 글
[Hive] Hive (하이브) 설치 및 Hadoop 연동하기 (2) | 2024.11.16 |
---|---|
[Hadoop] 하둡 명령어 정리 디렉토리 생성/삭제 및 파일 조회 (2) | 2024.11.09 |