티스토리 뷰

도커를 이용해서 하둡 클러스터를 'Pseudo-Distributed' 모드로 설치를 해보자. 'Pseudo-Distributed' 모드는 하둡 클러스터를 구성하는 데몬들을 하나의 머신에 모두 구동시키는 방법을 말한다. 데몬들이 모두 구동되고 서로 통신을 하긴 하지만 실제로 분산되지는 않고 하나의 클러스터에 구동되기 때문에 'Pseudo-distributed' 모드라고 한다.

 

기본적으로는 '도커 컨테이너 기반으로 하둡(Hadoop) 클러스터 실행해보기 - HDFS on Docker' 포스트에서 진행했던 내용과 비슷하다.

 

하둡 도커 이미지 만들기

하둡을 구동할 도커 이미지를 만들어보자. (위 포스트에서 만든 이미지를 그대로 써도 된다.)

 

우선 우분투 이미지를 구동시킨다.

$ docker run -it --name hadoop-pseudo-distributed ubuntu

apt-get 패키지를 업데이트 한다.

# apt-get update

하둡 구동에 필요한 다양한 패키지들을 설치한다.

# apt-get install openjdk-8-jdk -y
# apt-get install vim -y
# apt-get install wget -y
# apt-get install ssh -y

ssh를 설치하고 별도의 로그인 절차없이 바로 접속할 수 있도록 키 파일을 생성해주자. 

# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

'Missing privilege separation directory: /run/sshd' 오류가 발생하지 않도록 관련 디렉토리도 만들어준다.

# mkdir /var/run/sshd

 

하둡 홈으로 사용할 디렉토리를 만들고 하둡 아카이브 파일을 다운로드한다.

# mkdir /hadoop_home
# cd /hadoop_home
# wget http://mirrors.sonic.net/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
# tar xvzf hadoop-2.7.7.tar.gz

bashrc를 열어서 환경 변수들을 설정한다.

# vi ~/.bashrc
...
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/hadoop_home/hadoop-2.7.7
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# run sshd
/usr/sbin/sshd

 

수정한 환경변수들을 적용한다.

$ source ~/.bashrc

 

각 데몬들이 홈으로 사용할 경로를 생성한다.

# mkdir /hadoop_home/temp
# mkdir /hadoop_home/namenode_home
# mkdir /hadoop_home/datanode_home

이제 각 데몬들을 위한 설정 파일들을 세팅해줘야한다.

 

mapred-site.xml 파일을 mapred-site.xml 파일로부터 생성해준다.

# cd $HADOOP_CONFIG_HOME
# cp mapred-site.xml.template mapred-site.xml

'core-site.xml', 'hdfs-site.xml', 'mapred-site.xml' 파일에 설정을 다음과 같이 해준다.

 

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop_home/temp</value>
    </property>

    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
        <final>true</final>
    </property>
</configuration>

 

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop_home/namenode_home</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop_home/datanode_home</value>
        <final>true</final>
    </property>
</configuration>

 

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>localhost:9001</value>
    </property>
</configuration>

 

hadoop-env.sh 파일의 마지막에 JAVA_HOME 환경 변수를 추가한다.

...
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

 

이제 네임노드를 포맷한다.

# hadoop namenode -format

호스트 운영체제에서 지금까지 만들어 놓은 도커 이미지를 커밋해 놓자.

$ docker commit hadoop-psedo-distributed ubuntu:hadoop

 

하둡 클러스터 구동하기

이제 하둡 클러스터를 구동해보자. start-all.sh 스크립트를 실행하면 하둡 클러스터가 구동된다. 

# start-all.sh

구동 스크립트를 실행시키면 뭔가를 계속 묻는데, 'yes'를 입력해서 계속 진행한다.

 

설치가 끝나고 jps 명령을 이용해서 잘 구동되었는지 확인한다.

# jps
6896 DataNode
6387 ResourceManager
7285 NodeManager
7063 SecondaryNameNode
7384 Jps
6766 NameNode

 

다음 명령을 이용해서 HDFS에 디렉토리를 만들어보자.

# hadoop fs -mkdir -p /user/dave
# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2019-11-16 14:16 /user

 

디렉토리가 만들어졌음을 볼 수 있다.

 

간단한 테스트 해보기

설치된 하둡의 LICENSE.txt 파일에 WordCount 예제를 돌려보겠다.

# cd $HADOOP_HOME
# ls
LICENSE.txt NOTICE.txt README.txt bin etc include lib libexec sbin share

 

테스트를 위한 테스트 디렉토리를 HDFS에 생성하고, hadoop fs 명령을 이용해서 구축한 클러스터에 LICENSE.txt 파일을 올린다.

# hadoop fs -mkdir -p /test
# hadoop fs -put LICENSE.txt /test
# hadoop fs -ls /test
Found 1 items
-rw-r--r-- 2 root supergroup 86424 2019-11-16 07:05 /test/LICENSE.txt

 

하둡 패키지에 기본적으로 제공되는 jar 파일을 이용해서 wordcount 예제를 돌려본다.

# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /test /test_out

 

MapReduce 작업이 Submit 되고 짧은 수행시간안에 작업이 끝난다. 이제 WordCount 결과를 살펴보자.

# hadoop fs -cat /test_out/*
...
wherever 1
whether 9
which 32
which, 2
which: 1
who 2
whole, 2
whom 8
will 7
with 99
withdraw 2
within 20
without 42
work 11
work, 3
work. 2
works 3
works, 1
world-wide, 4
worldwide, 4
would 1
writing 2
writing, 3
written 11
xmlenc 1
year 1
you 9
your 4
252.227-7014(a)(1)) 1
§ 1
“AS 1
“Contributor 1
“Contributor” 1
“Covered 1
“Executable” 1
“Initial 1
“Larger 1
“Licensable” 1
“License” 1
“Modifications” 1
“Original 1
“Participant”) 1
“Patent 1
“Source 1
“Your”) 1
“You” 2
“commercial 3
“control” 1

 

이런 결과가 나온다.

 

결과 파일을 보면,

# hadoop fs -ls /test_out
Found 2 items
-rw-r--r-- 2 root supergroup 0 2019-11-15 07:08 /test_out/_SUCCESS
-rw-r--r-- 2 root supergroup 22239 2019-11-15 07:08 /test_out/part-r-00000

 

리듀서에서 만든 결과 파일이 HDFS 클러스터에 잘 만들어져 있는걸 확인할 수 있다.

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
1,455
Today
0
Yesterday
21
링크
«   2020/02   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
글 보관함