-> 하둡 3.1.2 설치 1편 - 독립실행모드(Standalone), 가상분산모드(Pseudo-distributed), 완전분산모드(Fully distributed)
2. 가상분산모드편
-> 하둡 3.1.2 설치 2편 - 독립실행모드(Standalone), 가상분산모드(Pseudo-distributed), 완전분산모드(Fully distributed)
3. 완전분산모드편
-> 하둡 3.1.2 설치 3편 - 독립실행모드(Standalone), 가상분산모드(Pseudo-distributed), 완전분산모드(Fully distributed)
이번편에서는 하둡 시스템 운영용으로 완전분산모드를 설치해본다.
독립실행모드와 가상분산모드의 경우 장비 1대만 있으면 충분했지만 완전분산모드는 실제 장비 여러 대를 클러스터하여 구성할 것이다.
하둡 3.1.2버전으로 설치할 것이며 대부분의 예제가 1.대 버전이어서 조금 힘들었다. 2.대 예제는 별로 없고 3.대는 참고할만한 예제가 정말 없었다.(내가 못찾았을 수도 있지만..)
결론부터 말하자면 계속 데이터노드가 안떠서 고생했는데 이게 제대로 된건지 확실치가 않으니 몇가지 테스트해보고 잘못된 점이 있으면 수정해야겠다.
구성 시나리오는 총 5대로 구성할것이고 마스터노드 2대, 슬레이브노드 3대 이다.
master01 - namenode
master02 - secondarynamenode
slave01 - datanode
slave02 - datanode
slave03 - datanode
실제 운영하려면 한 노드에 마스터+슬레이브를 같이두는 것보다는 물리적으로 분리시키는 것이 좋을 것이기 때문에 이렇게 구성했다.
참고로 세컨더리네임노드는 네임노드의 백업이 아니다. 혹시나해서 네임노드를 죽여도 세컨더리 노드가 Active-StandBy 모드로 살아나지 않는다.
ip주소는 다음처럼 세팅을 하고자한다.
master01 192.168.10.1
slave01 192.168.10.2
slave02 192.168.10.3
slave03 192.168.10.4
master02 192.168.10.5
네트마스크는 255.255.255.0
게이트웨이는 192.168.10.254
네임서버는 192.168.10.254로 설정을 하기로 한다.
먼저 master01부터 적용해보자.
centos7은 ens33으로 되있어서 이를 수정해주었다.
gedit /etc/sysconfig/network-scripts/ifcfg-ens33
파일 내부를 다음과 같이 수정하였다.
그리고 네트워크를 재시작하면 적용이 된다.
같은 작업을 각각의 노드에 모두 적용하고 네트워크를 재시작하였다.
단 각 노드별로 ip만 바꿔주면 된다. (192.168.10.1~5까지 세팅하였다.)
이제 각 host명을 변경한다.
gedit /etc/hosts
모든 노드에 들어가서 다음과 같이 수정한다.
각 호스트이름도 바꿔준다.
gedit /etc/hostname
각각의 노드를 master01, master02, slave01, slave02, slave03으로 바꿔주었다.
그리고 각 노드에 적용을 해준다.
그리고 각각의 노드에서 터미널을 닫았다가 열면 호스트명이 localhost가 아닌 정해준 이름으로 표현이 된다. 이제 5대 모두 reboot해주자.
각 노드에서 각 노드별로 ping을 날려서 연결이 되는지 확인해보자.
master01 -> slave01, slave02, slave03를 해주고
master02 -> slave01, slave02, slave03를 해주고
slave01 -> master01, slave02, slave03를 해주고
...
slave02, 03도 똑같이 3대 노드에 ping 을 날려서 잘 가는지 확인한다.
하둡은 각 노드간에 로그인을 해야 데이터를 주고받을 수 있는데 이때 ssh를 통해 통신을 한다. 따라서 ssh 공개키를 복사한다.
먼저 master01에서 생성한 공개키를 모든 노드에 복사한다.
사실 기존에 가상분산모드에서 만든 노드를 복사해서 사용했기 때문에 공개키까지 복사가 되어서 ssh 연결이 되지만 처음이라고 생각하고 모두 다시설정하기로 한다.
먼저 master01부터 진행하는데 master02~slave03까지 4대에 인증키를 복사해준다.
scp -rp ~/.ssh/authorized_keys root@slave03:~/.ssh/authorized_keys
scp -rp ~/.ssh/authorized_keys root@master02:~/.ssh/authorized_keys
공개키를 복사해주고 master01에서 master02, slave01~slave03까지 ssh 접속이 되는 것을 확인할 수 있다.
각 노드마다 ssh 노드명을 쳐서 접속이 되는지 확인한다.
똑같은 반복작업이지만 잘 되는지 꼭 해주도록 하자.
이제 하둡 파일들을 수정한다.
다음은 hadoop-env.sh를 수정하는데 master만 진행한다.
gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh
HADOOP_PID_DIR의 경로를 설정해준다.
다음은 core-site.xml을 수정하는데 모든 노드에서 진행한다.
gedit $HADOOP_HOME/etc/hadoop/core-site.xml
다음은 hdfs-site.xml를 모든 노드에서 수정한다.
gedit $HADOOP_HOME/etc/hadoop/hdfs-site.xml
master
slave
다음은 mapred-site.xml을 잡트래커 설정을 수정하며 모든 노드에 mapreduce 설정을 해준다.
gedit $HADOOP_HOME/etc/hadoop/mapred-site.xml
gedit $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<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>
보통 여기까지 작업하면 masters, slaves 파일을 수정(없으면 생성)하는 것 같은데 그냥 skip하고 workers라는 파일이 있어서 master에서만 workers파일을 수정해주었다.
gedit $HADOOP_HOME/etc/hadoop/workers
이후 마스터노드1번기를 포맷한다.
$HADOOP_HOME/bin/hdfs namenode -format
모든 노드의 방화벽을 내려준다.
systemctl stop firewalld.service
systemctl disable firewalld.service
이제 완전분산모드 하둡을 올려볼 것인데 master01에서 각각의 명령어를 날렸다.
start-dfs.sh를 수행한 후 각각 노드 변화
master01에는 NameNode가 올라왔다.
master02에는 SecondaryNameNode가 올라왔다.
slave01~03에는 DataNode가 올라왔다.
다음으로 start-yarn.sh를 수행하고 각각 노드 변화
master01에는 ResourceManager, NodeManager가 올라왔다.
master02에는 NodeManager가 올라왔다.
slave01~03에는 NodeManager가 올라왔다.
이제 정상적으로 동작하는지 테스트를 해봐야겠다.
하둡 Cluster Setup 가이드를 참고했다. (링크)
20190414 추가
독립, 가상분산모드에서 테스트했던 wordcount를 테스트해본다.
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/root
hdfs dfs -mkdir /user/root/cont
hdfs dfs -mkdir /input
hdfs dfs -copyFromLocal /home/centos/hadoop-3.1.2/README.txt /input
먼저 하둡 파일시스템에 /user, /user/root, /user/root/conf, /input 디렉토리를 생성하고 /input에 로컬에 있는 README.txt 파일을 올린다.
잘 올라온 것을 확인했다.
이제 샘플을 돌려본다.
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /input/README.txt ~/wordcount-output
결과는 다음과 같다.