Hadoop 2.4.1 설치하기 (소스 컴파일)

우분투 14.04가 설치된 개인 서버에 Stand-Alone으로 하둡 2.4.1을 소스 컴파일 통해 설치해 보았다.
* 장점: 소스 컴파일을 하면 native jar 파일을 사용할 수 있다.

<환경>
OS : Ubuntu 14.04 Server, 64bit (Desktop도 동일)
Java : JRE 1.7.0.65
gcc : gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

먼저 설치시 기본적으로 준비해야 할 사항이다.

0. Prepare before Hadoop Installation

0-1) 필수 패키지 설치

$ sudo apt-get install build-essential maven openjdk-7-jdk cmake libssl-dev ssh

maven : 소스 빌드 진행
cmake : gcc 컴파일
ssh : datanode와 namenode 들간에 접속 프로토콜

0-2) JAVA_HOME 환경변수 설정

$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

확인 ==>

$ env | grep JAVA_HOME
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

0-3) Protobuf 2.5.0 source 설치

설치되어 있다면 버전을 확인할 것 (주의: 버전 2.5만 요구된다. 그 이상은 오류발생)

$ /usr/local/bin/protoc --version
libprotoc 2.5.0

구글코드 페이지 https://code.google.com/p/protobuf/downloads/list?can=2&q=protobuf
소스파일 직접링크 https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz

다운로드 받은 후 빌드하여 설치한다.

$ pwd
/home/$USER/builds
$ mkdir tools
$ cd tools
$ wget https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz
$ tar xvfz protobuf-2.5.0.tar.gz
$ cd protobuf-2.5.0
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

0-4) 하둡은 IPv6와 호환이 잘 되지 않으므로 사용을 중지한다.

$ sudo vi /etc/sysctl.conf
## 다음을 추가
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

이를 적용하기 위해 network 서비스를 재시작한다.
그러나, 잘 안될거다. (괜찮다. 나중에 서버를 껏다 켜면 된다)

$ sudo service networking restart

확인 ==>

$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6
1

준비가 되었으면, 설치를 위한 소스 파일을 다운로드 한다.
(본 설명서는 Source Compile & Install 에 관해 기술되었다)

1. Hadoop Install

1-1) Hadoop 2.4.1 source

미러사이트 페이지 http://www.apache.org/dyn/closer.cgi/hadoop/common/
소스파일 직접링크 http://apache.tt.co.kr/hadoop/common/hadoop-2.4.1/hadoop-2.4.1-src.tar.gz

$ pwd
/home/$USER/builds
$ wget http://apache.tt.co.kr/hadoop/common/hadoop-2.4.1/hadoop-2.4.1-src.tar.gz
$ tar xvfz hadoop-2.4.1-src.tar.gz
$ cd hadoop-2.4.1-src

1-2) Hadoop 2.4.1 build

$ pwd
/home/$USER/builds/hadoop-2.4.1-src
$ mvn package -Pdist,native -DskipTests -Dtar

1-3) Hadoop 2.4.1 install

빌드된 결과물을 /usr/local 으로 옮기고 심볼릭 링크를 건다.

$ sudo mv ./hadoop-dist/target/hadoop-2.4.1 /usr/local/
$ cd /usr/local
$ sudo ln -s ./hadoop-2.4.1 ./hadoop

확인 ==>

$ ls -l /usr/local/hadoop
lrwxrwxrwx 1 root root 12 10월 24 09:56 /usr/local/hadoop -> hadoop-2.4.1

2. Hadoop Environment Setup (환경설정)

2-1) hadoop 그룹 및 hduser 계정 생성

$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
$ sudo adduser hduser sudo

확인 ==>

$ ls -l /home/ | grep hadoop
drwxr-xr-x 4 hduser hadoop 4096 10월 24 09:38 hduser

2-2) hadoop 이하 모든 파일들의 권한 변경

$ sudo chown -R hduser:hadoop /usr/local/hadoop/

2-3) hduser의 localhost에 대한 ssh 접속 권한 설정 (Stand-Alone)

$ su - hduser
## ssh가 설치되었고 sshd가 실행중이어야 한다.
$ ssh-keygen -t rsa -P ""
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

확인 ==>

$ ssh localhost
## 영구적인 접속권한을 만들겠냐는 물음에 yes 입력
## 암호는 빈칸으로 두도록 연속으로 enter키 입력

## 설치를 계속하기 위해 다시 나간다
$ exit

2-4) 여기까지 잘 되었는지 확인해 본다. (version 확인)

$ /usr/local/hadoop/bin/hadoop version
Hadoop 2.4.1
Subversion Unknown -r Unknown
Compiled by $USER on 2014-10-24T00:42Z
Compiled with protoc 2.5.0
From source with checksum bb7ac0a3c73dc131f4844b873c74b630
This command was run using /usr/local/hadoop-2.4.1/share/hadoop/common/hadoop-common-2.4.1.jar

3. Hadoop Config Setup (설정파일)

여기서부터는 hduser 계정으로 진행한다.

su - hduser

3-1) temp, namenode, datanode 디렉토리를 생성

$ mkdir /usr/local/hadoop/tmp
$ mkdir /usr/local/hadoop/dfs
$ mkdir /usr/local/hadoop/dfs/data
$ mkdir /usr/local/hadoop/dfs/name
    

3-2) config용 sh 파일 및 xml 파일 작성

모든 config 파일은 ‘/usr/local/hadoop/etc/hadoop’에 있으며, 클러스터를 구성할 경우 모두에게 공통으로 배포된다.

3-2-1) /usr/local/hadoop/etc/hadoop/hadoop-env.sh

# Hadoop Options (added)
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_PREFIX/lib"
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

3-2-2) /usr/local/hadoop/etc/hadoop/yarn-env.sh

# Hadoop Options added
export HADOOP_CONF_LIB_NATIVE_DIR=${HADOOP_PREFIX:-"/lib/native"}
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"

3-2-3) /usr/local/hadoop/etc/hadoop/core-site.xml

<property>
 <name>fs.default.name</name>
 <value>hdfs://localhost:9000</value>
</property>
<property>
 <name>hadoop.tmp.dir</name>
 <value>/usr/local/hadoop/tmp</value>
</property>

3-2-4) /usr/local/hadoop/etc/hadoop/mapred-site.xml

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

3-2-5) /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/dfs/data</value>
<final>true</final>
</property>

3-2-6) /usr/local/hadoop/etc/hadoop/yarn-site.xml


<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.resourcemanager.resource-tracker.address</name>
<value>localhost:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>localhost:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>localhost:8035</value>
</property>

3-3) native 라이브러리 so 파일 복사하기 (옵션)

DFS를 시동하고 난 후,
namenode 또는 datanode 로그파일에 다음과 같은 메시지가 뜬다면..
native libarary 경로 옵션이 제대로 안먹고 있는 것이다.
이런 경우 고민하지 말고 lib/native의 내용을 lib 디렉토리로 복사하자.

# IF hadoop logfiles contains WARN about native lib load fail.
==> WARN org.apache.hadoop.util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

$ cp -f $HADOOP_HOME/lib/native/* $HADOOP_HOME/lib/

4. Hadoop first start-up

4-1) namenode 포맷하기

$ /usr/local/hadoop/bin/hadoop namenode -format

4-2) hadoop 시동하기

$ /usr/local/hadoop/sbin/start-dfs.sh
$ /usr/local/hadoop/sbin/start-yarn.sh

4-3) 확인하기

# '/usr' 디렉토리를 생성하고 조회
$ hadoop fs -mkdir /user
$ hadoop fs -ls /
Found 1 items
drwxr-xr-x - $USER supergroup 0 2014-10-24 00:03 /user

4-4) 하둡 프로세스 6개 확인하기

$ jps
3903 SecondaryNameNode
4058 ResourceManager
4184 NodeManager
5009 Jps
8712 DataNode
3518 NameNode

5. Web UI 확인

5-1) Web UI of NameNode
http://localhost:50070/

5-2) Web UI of SecondaryNameNode
http://localhost:50090/

5-3) Web UI of DataNode
http://localhost:50075/

9. 참고문서

아래 문서들을 바탕으로 작성되었다.

영어로 되어있지만, 너무 깔끔하게 잘 해놔서 고맙다.
http://dogdogfish.com/2014/04/26/installing-hadoop-2-4-on-ubuntu-14-04/

소스컴파일에 관련된 내용을 대부분 참고 (역시 한글이 쵝오!)
http://goodsoftwareunion.blogspot.kr/2014/06/hadoop-240.html

타 계정으로 접근시 WRITE 권한문제 해결을 위해 참고
http://stackoverflow.com/questions/22676593/hadoop-fs-mkdir-permission-denied

하둡 이용에 관한 예제 몇가지 소개
http://www.bogotobogo.com/Hadoop/BigData_hadoop_Running_MapReduce_Job.php

여러대에 설치하기 위해 master, slaves 등을 설정하는 내용 정리(CDH 이용)
http://odysseymoon.tistory.com/33

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: