'2016/05'에 해당되는 글 12건

  1. 2016.05.31 hadoop 2.0 (YARN) 개요 & Hyper-V를 이용한 실험환경 구성 #2
반응형

 이번 포스팅에서는 지난 포스팅에 이어 개별 노드들을 구성하고, 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

scp core-site.sh hadoop@d1:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp core-site.sh hadoop@d2:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp hdfs-site.xml hadoop@d1:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp hdfs-site.xml hadoop@d2:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp slaves hadoop@d1:/home/hadoop/hadoop-2.6.4/etc/hadoop
scp slaves hadoop@d2:/home/hadoop/hadoop-2.6.4/etc/hadoop

 그리고 네임노드를 포맷한다.
hadoop namenode -format

 NN에서 jps를 입력하면, NameNode, SecondaryNameNode 프로세스가 떠 있는 것을 볼 수 있다.
 hdfs dfsadmin -report를 입력하면 클러스터의 hdfs에 대한 정보와 각 데이터 노드에서의 정보를 볼수 있다.

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 기반으로 코딩하고 실행하는 사례를 설명하도록 하겠다.


반응형
Posted by alias
,