본문 바로가기

미분류/Hadoop

VMware를 이용하여 Hadoop 완전분산모드 구축

 

0. 시작 이전에

- VMware는 설치되어 있다는 가정하에 포스팅을 작성하였다.

- 작성자는 Hadoop 핵 초보이므로 틀린 곳이 있을 수 있다.

- 환경 : VMware 12 Pro , 호스트 : Windows 10 64 Bit (Master) / Windows 7 64 Bit (Slave), 게스트 : CentOS7 64 Bit

- 네트워크 구성도

DNS를 사용하지 않았기 때문에 브릿지로 연결해주었다

1. 공통 설정

 Vagrant를 사용해보려 했으나 Vmware는 라이선스가 필요해 사용이 어려웠다. 때문에 내 컴퓨터에서 Slave 친구들은 전부 세팅해준 후 다른 PC로 옮겼다. 별다른 건 해주지 않고 java 세팅과 yum upgrade만 해주었다.

 마스터 친구는 JAVA 세팅만 일단 해주었다. VMware로 하둡을 구축할 때 호스트 피씨가 한 대라면 네트워크를 신경쓸 필요 없지만 여러 대라면 브리지를 사용하는 것이 편하다.

 (네트워크 설정 그림)

  착실한 노예 3개가 생겼다.

 /etc/hosts 파일을 수정하고 ping을 확인해본다.

2. SSH 키 배포

 연결에 문제가 없다면 SSH 키를 배포에 Master에서 Slave들을 접근할 수 있게 해준다.

 ssh-keygetn -t rsa

생성된 ssh key를 authorized key로 복사하여 배포해준다.

이 때에 slave 들에게 mkdir ./.ssh 폴더를 만들어주고 권한을 부여해주어야 한다.

배포 이후 ssh 접속을 확인한다.

3. Hadoop 설치

 나는 2.9.2 버전을 사용하였다.

http://apache.tt.co.kr/hadoop/common/hadoop-2.9.2/

wget으로 받아준 후 적당한 곳에 둔다. tar -xvzf hadoop-2.8.2.tar.gz 로 압축을 풀어준다. 이후 환경설정을 진행한다.

/etc/profile 수정후 source /etc/profile로 적용해준다.

export JAVA_HOME=/usr/local/jdk1.8 
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 
export JAVA_OPTS="-Dfile.encoding=UTF-8" 
export CLASSPATH="." 
export HADOOP_HOME=/home/centos/hadoop-2.9.2 
export HDFS_NAMENODE_USER="root" 
export HDFS_DATANODE_USER="root" 
export HDFS_SECONDARYNAMENODE_USER="root" 
export HDFS_RESOURCEMANAGER_USER="root" 
export YARN_RESOURCEMANAGER_USER="root" 
export YARN_NODEMANAGER_USER="root" 

이후 hadoop version으로 명령어를 확인한다.

4. Hadoop 환경설정

4-1. hadoop-env.sh (master)

[root@master hadoop]# pwd 
/home/centos/hadoop-2.9.2/etc/hadoop 
[root@master hadoop]# vi hadoop-env.sh
25 : export JAVA_HOME=/usr/local/jdk1.8
113 : export HADOOP_PID_DIR=/home/centos/hadoop-2.9.2/pds

4-2 core-site.xml (all)

<configuration>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://master:9000</value>
   </property>
</configuration>

4-3 hdfs-site.xml (master)

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>2</value>
   </property>
   <property>
      <name>dfs.permission</name>
      <value>false</value>
   </property>
   <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/home/kih/hadoop-2.9.2/namenode</value>
   </property>
   <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/hoem/kih/hadoop-2.9.2/datanode</value>
   </property>
</configuration>

4-4 hdfs-site.xml (slave)

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>2</value>
   </property>
   <property>
      <name>dfs.permission</name>
      <value>false</value>
   </property>
   <property>
      <name>dfs.datanode.data.dir</name>
      <value>file:/hoem/kih/hadoop-2.9.2/datanode</value>
   </property>
</configuration>

4-5 mapred-site.xml (all)

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

4-6 yarn-site.xml (all)

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
   <property>
      <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
</configuration>

4-7 masters/slaves (master)

vi etc/hadoop/masters
master

vi etc/hadoop/slaves
master
slave01
slave02
slvae03

각 slave 마다 hadoop 명령어를 확인한다.

5. 구동

$HADOOP_HOME/bin/hdfs namenode -format

systemctl stop firewalld.service
systemctl disable firewalld.service

namenode  포맷 후 모든 애들의 방화벽을 내려준다.

start-dfs.sh
start-yarn.sh

명령어로 시작해준다.

jps

명령어를 사용하여 제대로 떠있는지 확인해준다.

웹인터페이스에 접속해 확인해본다.

Hadoop : http://master:50070
yarn : http://master:8088

6. 실험

하둡에서 제공하는 분석 프로그램을 실행하여 제대로 작동하는지 확인한다.

[root@master hadoop-2.9.2]# hdfs dfs -mkdir /user
[root@master hadoop-2.9.2]# hdfs dfs -mkdir /user/root
[root@master hadoop-2.9.2]# hdfs dfs -mkdir /user/root/conf
[root@master hadoop-2.9.2]# hdfs dfs -mkdir /input
[root@master hadoop-2.9.2]# hdfs dfs -copyFromLocal /home/centos/hadoop-2.9.2/README.txt /input
[root@master hadoop-2.9.2]# hdfs dfs -ls /input
Found 1 items
-rw-r--r--   2 root supergroup       1366 2019-04-04 17:46 /input/README.txt
[root@master hadoop-2.9.2]# hadoop jar s
sbin/  share/
[root@master hadoop-2.9.2]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount /input/README.txt ~/wordcount-output

map과 reduce로 진행상황을 확인할 수 있다.

결과를 조회해본다.

hdfs dfs -ls ~/wordcount-output

 hdfs dfs -cat ~/wordcount-output/part-r-00000

구축이 성공적으로 이루어진 것을 확인할 수 있다.