이번 포스팅에서는 하둡은 완전 분산 모드로 설치하는 것을 해보겠다. 완전 분산 모드는 실사용할 때 하둡이라고 보면 된다. 여러 개의 서버를 묶어서 분산 처리할 수 있게 되는데 개인의 환경에서 실제로 여러 개의 서버를 구성하기는 힘들어서 Docker를 이용하여 여러 개의 컨테이너를 마치 클러스터처럼 사용하여 구성해보려고 한다.
Standalone과 Pesudo-Distributed 모드에 대한 설명은 다음 포스팅에서 확인할 수 있다.
Hadoop base 이미지 생성
이전 가상 분산 모드의 이미지에서 약간의 변경이 필요한데 그냥 새롭게 처음부터 하둡 베이스 이미지를 만들어 보도록 하겠다. 기본 centos 이미지 위에서 hadoop 베이스를 만들어 보겠다.
centos 컨테이너 생성 및 접속
$ docker run -it --name hadoop-base centos
필요 디렉토리 생성
# mkdir -p /opt/jdk 추후 javac 심볼릭 링크 및 홈, PATH 설정을 위해 생성
# mkdir -p /opt/hadoop 하둡 홈 디렉토리
# mkdir -p /data/tmp 추후 하둡 환경에서 발생하는 로그 등의 파일 저장
필요 패키지 설치
# yum install -y net-tools
# yum install -y vim-enhanced
# yum install -y wget
# yum install -y openssh-server openssh-clients openssh-askpass
# yum update -y
JAVA 설치 및 환경변수 설정
- javac 설치
# yum install java-1.8.0-openjdk-devel.x86_64 -y
- javac 위치 확인
# which javac
/usr/bin/javac
- jdk 실제경로 확인
# readlink -f /usr/bin/javac
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64/bin/javac
- 위에서 생성한 /opt/jdk에 링크 생성
# ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64 /opt/jdk/current
- 자바 환경변수 정의
# vim /etc/profile
...
export JAVA_HOME=/opt/jdk/current
export PATH=$PATH:$JAVA_HOME/bin
Hadoop 설치 및 환경변수 설정
- 하둡 설치 및 심볼릭 링크 설정
# cd /opt/hadoop
# wget https://mirrors.sonic.net/apache/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
# tar xvzf hadoop-3.3.1.tar.gz
# ln -s /opt/hadoop/hadoop-3.3.1 /opt/hadoop/current
- 하둡 환경변수 설정
# vim /etc/profile
...
export HADOOP_HOME=/opt/hadoop/current
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
sshd 설정
- sshd 실행을 위해 필요한 key 생성
# ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ""
# ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -N ""
# ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -t ed25519 -N ""
- /etc/profile 에서 sshd 실행시키도록 작성
# vim /etc/profile
...
/usr/sbin/sshd
- /etc/profile의 내용들을 적용
# source /etc/profile
ssh 통신을 위한 key 생성
# ssh-keygen -t rsa -P ""
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
이후 ssh가 잘 작동하는지 확인하기 위해 다음의 코드를 입력해본다.
# ssh localhost
다음으로는 하둡 설정을 해보겠다.
Hadoop 설정
하둡 설정 파일이 있는 디렉토리로 이동한다.
# cd $HADOOP_HOME/etc/hadoop
- hadoop-env.sh
# vim hadoop-env.sh
...
export HADOOP_PID_DIR=/opt/hadoop/current/pids
export JAVA_HOME=/opt/jdk/current
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"
- core-site.xml
# vim core-site.xml
...
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master01:9000</value>
</property>
</configuration>
- hdfs-site.xml
# vim core-site.xml
...
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/current/data/datanode</value>
</property>
</configuration>
- yarn-site.xml
# vim yarn-site.xml
...
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master01</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
- mapred-site.xml
# vim mapred-site.xml
...
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
여기까지 진행하면 hadoop base 이미지를 만들었다. 이제 이 이미지를 commit 하여 저장하자.
$ docker commit hadoop-base hadoop-base
클러스터 구성하기
우리는 master 노드 2대와 slave 노드 3대를 이용하여 총 5대를 클러스터로 구성할 것이다.
master01는 Namenode,
master02는 SecondaryNamenode,
이 외 slave는 Datanode로 사용할 것이다.
$ docker run -it --privilleged=True -h master01 --name master01 -p 9870:9870 hadoop-base
$ docker run -it --privilleged=True -h master02 --name master02 hadoop-base
$ docker run -it --privilleged=True -h slave01 --name slave01 hadoop-base
$ docker run -it --privilleged=True -h slave02 --name slave02 hadoop-base
$ docker run -it --privilleged=True -h slave03 --name slave03 hadoop-base
그리고 각 노드들에 대해서 따로 설정을 해줘야 한다.
모든 노드에서 수행
각 노드들에 대해서 /etc/profile을 실행시켜준다.
# source /etc/profile
각 노드들의 IP 주소를 알아내야 한다.
$ docker inspect master01 | grep IPAddress
$ docker inspect master02 | grep IPAddress
$ docker inspect slave01 | grep IPAddress
$ docker inspect slave02 | grep IPAddress
$ docker inspect slave03 | grep IPAddress
그리고 알아낸 IP주소를 이용하여 각 노드들의 /etc/hosts를 다음과 같이 수정해준다.
# vim /etc/hosts
...
172.17.0.2 master01
172.17.0.3 master02
172.17.0.4 slave01
172.17.0.5 slave02
172.17.0.6 slave03
마스터 노드에서 수행
먼저 $HADOOP_HOME/etc/hadoop 디렉토리로 이동하여 master01, master02 노드에서 다음을 수정해준다.
- hdfs-site.xml
# vim hdfs-site.xml
...
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.http.address</name>
<value>master01:9870</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>master02:9868</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/current/data/namenode</value>
</property>
</configuration>
그리고 master01 노드에서 다음을 수정해준다. workers 파일은 worker가 수행할 노드를 적어 놓는 파일이다.
# vim workers
slave01
slave02
slave03
여기까지 설정을 마쳤으면 네임노드를 포맷한 후 하둡을 실행시켜보자.
# hdfs namenode -format
# start-all.sh
이렇게 실행이 완료되면 각 노드에서 jps를 한 결과는 다음과 같다.
[root@master01]# jps
Namenode
ResourceManager
[root@master02]# jps
SecondaryNamenode
[root@slave01]# jps
Nodemanager
Datanode
[root@slave02]# jps
Nodemanager
Datanode
[root@slave03]# jps
Nodemanager
Datanode
그리고 localhots:9870 으로 접속 시 GUI를 확인할 수 있다.
Reference
https://parksuseong.blogspot.com/2019/04/312-3-standalone-pseudo-distributed.html
'Data > Hadoop' 카테고리의 다른 글
[Hadoop] 도커(Docker)로 하둡 설치하기 (Pseudo-distributed) (0) | 2021.12.25 |
---|---|
[Hadoop] 도커(Docker)로 하둡 설치하기 (Standalone) (2) | 2021.12.23 |