이번 포스팅에서는 지난 포스팅에 이어 개별 노드들을 구성하고, YARN 실험을 위한 클러스터를 구성해 보자. 네트워크 구성은 다음과 같다.
1. 기본 프로그램 설치
다음의 프로그램들을 설치한다.
(기본 프로그램 설치)
sudo apt-get update sudo apt-get upgrade sudo reboot sudo apt-get install openjdk-8-jdk sudo apt-get install build-essential sudo apt-get install htop |
(snappy library 설치)
wget https://github.com/google/snappy/tarball/master sudo apt-get install pkgconf sudo apt-get install libtool sudo apt-get install automake ./autogen.sh ./configure make sudo make install |
(SSH Key 설정)
ssh localhost ^D ssh-keygen -t rsa cp .ssh/id_rsa.pub .ssh/authorized_keys |
(Hadoop 설치)
wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz tar xzvf hadoop-2.6.4.tar.gz |
2. 네트워크 설정
노드의 네트워크는 eth0 은 인터넷(다시 말해 공유기로)으로 나가고 eth1은 내부 네트워크로 연결된다. 다음과 같이 /etc/network/interfaces 를 수정해 준다.
auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.1.50 netmask 255.255.255.0 |
sudo service networking restart 로 네트워크를 재시작해준다.
3, 호스트 이름 설정
노드의 호스트 이름을 설정한다. /etc/hosts를 다음과 같이 설정한다.
127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.1.50 NN 192.168.1.51 D1 192.168.1.52 D2 |
4, VM Copy
sudo init 0로 설정한 노드를 중지시키고, Hyper-V에서 내보내기를 한다.
내보내기가 완료되면 "가상 컴퓨터 가져오기" 를 한다.
가져오기 형식에서는 "가상 컴퓨터 복사(새로운 고유 ID만들기를 선택한다.)
hadoop_d1 과 hadoop_d2를 동일한 방식으로 생성한다.
5. 데이터 노드 설정
1. 메모리 증설(4G->8G)
VM 설정에서 메모리를 8196MB 로 변경한다.
2. 호스트이름 변경
hadoop_d1 에 접속하여 host 이름을 변경한다. sudo vi /etc/hostname 에서 NN을 D1으로 변경한다. 그리고 다음의 명령을 실행한다. sudo hostname D1
3. IP Address 변경
sudo vi /etc/network/interfaces 에서 eth1 의 ip address를 192.168.1.51 로 바꿔 준다.
4. D2 설정
D2노드노 동일하게 설정한다. 단 호스트 이름은 D2로, ip address는 192.168.1.52로 바꿔준다.
다 설정이 되었으면 NN에서 다음과 같이 접속해 본다. ssh D1, ssh D2 패스워드 없이 접속이 가능하면 노드 설정은 성공한 것이다.
6. Second Disk 설정
데이터 저장을 위한 Disk를 추가한다. Hyper-V에서 NN, D1, D2에 각각 가상 디스크를 100G씩 설정한다. 이떄 I/O 가 많이 발생할수 있으니, 서로 다른 물리적 디스크에 할당한다. (NN는 상관 없음)
sudo fdisk /dev/sdb
n p 1 \n \n w
sudo mkfs.ext4 /dev/sdb
sudo mkdir /data
sudo vi /etc/fstab 에서 다음 라인 추가
/dev/sdb /data ext4 errors=remount-ro 0 1
sudo chown -R hadoop /data
7. 하둡 환경 설정
1. 하둡 실행 환경 설정
이전 포스팅에서 VM을 카피하였으면 각 노드에 hadoop-2.6.4가 다운로드 되어 있을 것이다.
hadoop-env.sh 에는 hadoop을 실행하는 쉘 스크립트 파일로 JDK Path, Class Path 등을 이 파일 최상위에 설정한다. 다음과 같이 hadoop-env.sh 파일 맨 앞에 환경들을 추가한다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME=/home/hadoop/hadoop-2.6.4 export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop |
yarn-env.sh 에는 YARN이 실행되는 쉘 스크립트파일로 hadoop-env.sh와 같이 설정한다.
2. core-site.xml 설정
core-site.xml 은 hdfs와 맵리듀스에서 공통적으로 사용할 환경 정보를 설정한다.
<configuration> <property> <name>fs.default.name</name> <value>hdfs://nn:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data</value> </property> <property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, org.apache.hadoop.io.compress.SnappyCodec</value> </property> </configuration> |
3. hdfs-site.xml 설정
hdfs-site.xml은 hdfs와 관련된 설정 정보를 저장한다.
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permission</name> <value>false</value> </property> <property> <name>dfs.namenode.http-address</name> <value>nn:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>nn:50090</value> </property> </configuration> |
4. slaves 설정
slaves는 데이터 노드를 설정하는 부분이다. 다음과 같이 설정한다.
d1 d2 |
5. hdfs 시작
4.1에서 4.4까지 설정하면 /home/hadoop/hadoop-2.6.4/etc/hadoop 폴더에서다음과 같이 설정 파일을 카피한다.
scp hadoop-env.sh hadoop@d1:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp hadoop-env.sh hadoop@d2:/home/hadoop/hadoop-2.6.4/etc/hadoop
6 mapred-site 설정
mapred-site는 맴리듀스에 대한 어플리케이션 설정이다. 다음과 같이 설정한다. 특이한 것은 snappycodec을 설정한 것이다.
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapred.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property> </configuration> |
7 yarn-site 설정
yarn-stie.xml은 Resource Manager, Node Manager를 설정한다. 특이한 것은 노드의 메모리를 6G, 코어를 3개로 제한한 것이다.
<configuration> <property> <name>yarn.resourcemanager.address</name> <value>nn:8050</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>nn:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>nn:8025</value> </property> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>nn:8141</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/yarn/local</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/yarn/log</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>6144</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>3</value> </property> </configuration>
|
4.8 YARN 실행
네임노드에서 start-yarn.sh 를 입력하면 실행된다. 네임노드에는 NameNode, SecondaryNameNode, ResourceManager 프로세스가 실행되어 있음을 알수 있고, d1-2는 DataNode, NodeManager가 실행되어 있음을 알 수 있다.
다음 포트팅은 하둡계의 HelloWorld인 wordcount를 YARN 기반으로 코딩하고 실행하는 사례를 설명하도록 하겠다.