http://datamining.dongguk.ac.kr/wiki/index.php/Hadoop_%EB%AA%85%EB%A0%B9%EC%96%B4
###############################################################
본 문서는 hadoop 클러스터를 구축하는 방법에 대하여 설명한다.
###############################################################
* 테스트 환경은 아래와 같다.
* OS: ubuntu 12.04
* 클러스터 환경: 1대의 master와 5대의 slave
[목 차]
1. Java 설치
2. SSH 설치 및 공개 키 설정
3. hadoop 설치
########################################################
# 1. Java 설치
# hadoop은 java로 구현되었기 때문에 java를 반드시 설치해야 한다.
########################################################
1.1 java 설치
----------------------------------------------------------------------------------
$ sudo add-apt-repository ppa:upubuntu-com/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
----------------------------------------------------------------------------------
(주1) Ubuntu를 최소 시스템으로 설치하여 "add-apt-repository" 명령어를 찾을 수 없는 경우
아래를 실행한 후 1.1 실행할 것
$ sudo apt-get install python-software-properties
1.2 자바 설치 확인
----------------------------------------------------------------------------------
$ java -version
----------------------------------------------------------------------------------
########################################################
#java version "1.7.0_04"
#Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
#Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)
########################################################
########################################################
# 2. SSH 설치 및 공개 키 설정
# : hadoop클러스터에서 master와 slave들 간에 통신은 SSH를 이용한다.
# 따라서 모든 컴퓨터들은 SSH를 설치 해야 하고,
# master에서 암호없이 slave에 접속하기 위해서 공개 키가 필요하다.
########################################################
2.1 SSH 설치
- ubuntu를 설치했을 경우는 기본적으로 ssh가 설치 되어있지만, 설치가 안되있다면 아래의 코드를 통해 설치
----------------------------------------------------------------------------------
$ sudo apt-get install ssh
----------------------------------------------------------------------------------
2.2 공개 키 설정
- 모든 slave에 master ip 등록
----------------------------------------------------------------------------------
$ sudo vi /etc/hosts.allow
----------------------------------------------------------------------------------
sshd: 203.247.248.250 # master ip 또는 ALL
- [master] 공개 키 생성
----------------------------------------------------------------------------------
$ sudo vi /etc/ssh/sshd_config
----------------------------------------------------------------------------------
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
----------------------------------------------------------------------------------
$ mkdir ~/.ssh
$ ssh-keygen -t rsa -P ""
$ cp /home/stat/.ssh/id_rsa.pub /home/stat/.ssh/authorized_keys
----------------------------------------------------------------------------------
- [master] master에서 생성한 공개 키를 모든 slave로 복사
----------------------------------------------------------------------------------
$ scp /home/stat/.ssh/authorized_keys 203.247.248.241:/home/stat/.ssh/.
$ scp /home/stat/.ssh/authorized_keys 203.247.248.242:/home/stat/.ssh/.
$ scp /home/stat/.ssh/authorized_keys 203.247.248.243:/home/stat/.ssh/.
$ scp /home/stat/.ssh/authorized_keys 203.247.248.244:/home/stat/.ssh/.
$ scp /home/stat/.ssh/authorized_keys 203.247.248.245:/home/stat/.ssh/.
scp /home/stat/.ssh/authorized_keys 203.247.232.233:/home/jskim/.ssh/.
----------------------------------------------------------------------------------
- [master, slaves] 디렉토리 및 파일 권한 변경
----------------------------------------------------------------------------------
$ chmod 755 ~/.ssh
$ chmod 644 ~/.ssh/authorized_keys
----------------------------------------------------------------------------------
-test
----------------------------------------------------------------------------------
$ sudo /etc/init.d/ssh restart
$ ssh localhost
----------------------------------------------------------------------------------
- 행여 안될 경우에는 ssh-keygen -R 203.247.248.241 또는 known_hosts를 지우고 위의 공개 키 설정 절차를 다시 실행
(기존에 저장되있던 hosts(공개 키)때문에 안되는 경우가 발생함)
- host 지정 (master와 slave 모두 설정)
----------------------------------------------------------------------------------
$ sudo vi /etc/hosts
----------------------------------------------------------------------------------
203.247.248.250 master
203.247.248.241 slave01
203.247.248.242 slave02
203.247.248.243 slave03
203.247.248.244 slave04
203.247.248.245 slave05
- hosts 일치
ex) master의 경우
----------------------------------------------------------------------------------
$ sudo vi /etc/hostname
----------------------------------------------------------------------------------
master
----------------------------------------------------------------------------------
$ sudo /bin/hostname -F /etc/hostname
----------------------------------------------------------------------------------
ex) slave01의 경우
----------------------------------------------------------------------------------
$ sudo vi /etc/hostname
----------------------------------------------------------------------------------
slave01
----------------------------------------------------------------------------------
$ sudo /bin/hostname -F /etc/hostname
----------------------------------------------------------------------------------
##############################################
############### 3. hadoop 설치 ###############
##############################################
- hadoop을 구축하기 위해서는 동일하게 설정된 hadoop관련 파일을 master와 slave에 설치해야 한다.
이에 master에 hadoop파일을 설정 한 후에 동일한 파일을 slave에 복사하는 절차로 hadoop 클러스터를 구축하도록 하겠다.
1) hadoop 다운로드 및 압축 해제
$ cd /home/stat
$ wget http://mirror.apache-kr.org//hadoop/common/hadoop-1.0.3/hadoop-1.0.3.tar.gz
$ tar xvfz hadoop-1.0.3.tar.gz
$ ls
$ ln -s hadoop-1.0.3 hadoop #/home/stat/hadoop 가 hadoop의 설치디렉토리가 된다.
2) hadoop 환경설정
hadoop-env.sh 설정
----------------------------------------------------------------------------------------
: Hadoop이 실행하는 모든 프로세스에 적용되는 시스템 환경 값에 대한 스크립트
환경변수에 대해서 시스템 변수로 등록해 사용하는 방식이 아니라,
이 파일에 모든 환경 변수를 설정하고 이 파일을 전체 클러스터 노드에 복사해 사용함
----------------------------------------------------------------------------------------
$ vi /home/stat/hadoop/conf/hadoop-env.sh
###############################################################
# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=2000
# JAVA HOME
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_HOME=/home/stat/hadoop
export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
# for R
export LD_LIBRARY_PATH=/home/stat/lib/R/i686-pc-linux-gnu-library/2.15:$LD_LIBRARY_PATH
# Warning: $HADOOP_HOME is deprecated.
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
###############################################################
core-site.xml 설정
----------------------------------------------------------------------------------------
Hadoop 설치 후 로그파일, 네트워크 튜닝, I/O튜닝, 파일 시스템 튜닝, 압축 등과 같이 기본적인 하부 시스템 설정
맵리듀스에서도 공통으로 사용
----------------------------------------------------------------------------------------
$ vi /home/stat/hadoop/conf/core-site.xml
###############################################################
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
###############################################################
hdfs-site.xml 설정
----------------------------------------------------------------------------------------
Hadoop파일 시스템을 위한 설정파일로 자세한 항목은 hdfs-default.xml파일을 참고
----------------------------------------------------------------------------------------
$ vi /home/stat/hadoop/conf/hdfs-site.xml
###############################################################
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/temp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/stat/filesystem/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/stat/filesystem/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
###############################################################
mapred-site.xml 설정
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
$ vi /home/stat/hadoop/conf/mapred-site.xml
###############################################################
<configuration>
<property>
<name>mapred.system.dir</name>
<value>/home/stat/filesystem/mapreduce/system</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/stat/filesystem/mapreduce/local</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
<property>
<name>mapred.child.jvm.opts</name>
<value>-Xmx1g -Xms1g -Djava.library.path=/usr/local/lib/R/site-library </value>
</property>
</configuration>
###############################################################
- masters / slaves 노드 추가하기
----------------------------------------------------------------------------------------
masters: 세컨드리 네임 노드가 실행될 서버지정
slaves: 데이터 노드가 실행될 서버지정
hadoop-metrics.properties - Hadoop에서 각 기능별(파일시스템, 맵리듀스)로 모니터링 데이터를 수집하는 방식에 대한 설정
./conf/masters 파일을 열어 master 컴퓨터의 ip 혹은 호스트명을 입력한다.
※ master 라고 입력한다.
./conf/slaves 파일을 열어 slave 컴퓨터들의 ip 혹은 호스트명을 입력한다.
※ ip를 입력해도 되지만 /etc/hosts에 slave 호스트명을 추가하고 호스트명을 입력하는 것도 좋은 방법이다.
----------------------------------------------------------------------------------------
$ vi /home/stat/hadoop/conf/masters
master
$ vi /home/stat/hadoop/conf/slaves
slave01
slave02
slave03
slave04
slave05
3) hadoop 설정파일 복사 (master에 설정한 파일을 slave로 복사)
- master 서버
###############################################################
$ cd /home/stat/
$ tar -cvzf hadoop.tgz ./hadoop-1.0.3
###############################################################
-slave에 디렉토리생성
- 생성된 hadoop.tgz를 /var/www로 복사
###############################################################
$ sudo cp /home/stat/hadoop.tgz /var/www/hadoop.tgz
###############################################################
- slave 서버
###############################################################
$ cd /home/stat
$ wget http://203.247.248.250/hadoop.tgz
$ tar -xvzf hadoop.tgz
$ ln -s hadoop-1.0.3 hadoop
###############################################################
4) hadooop 실행
- namenode 포맷(master 에서 실행)
$ ./hadoop/bin/hadoop namenode -format
- hadoop 서버시작(master 에서 실행: 작업디렉토리는 "/home/stat"라고 가정)
$ ./hadoop/bin/start-all.sh
- slave 서버: slave 서버로그 확인
$ cd /home/stat/hadoop/logs
$ ls
hadoop-webservice-datanode-slave-01.log
hadoop-webservice-datanode-slave-01.out
hadoop-webservice-tasktracker-slave-01.log
hadoop-webservice-tasktracker-slave-01.out
- hadoop 실행
$ ./start-all.sh
- hadoop 종료시
$ ./hadoop/bin/stop-all.sh
- hdfs 실행
$ ./start-dfs.sh
- mapreduce 실행
$ ./start-mapred.sh
- http://203.247.248.250:50030/ 에서 mapreduce 설정 확인가능
- http://203.247.248.250:50070/ 에서 hdfs 설정 확인가능
5) test
- dfs 디렉토리 생성
$ ./home/stat/hadoop/bin/hadoop dfs -mkdir input
- dfs 파일 input
$ vi test.txt
$ ./hadoop dfs -put test.txt input2
- dfs 파일 조회
$ ./hadoop dfs -ls input2
-dfs 파일 삭제
$ ./hadoop dfs -rm input/test.txt
Deleted hdfs://master:9000/user/hadoop/input/data.log
$ ./hadoop dfs -ls input
$ ./hadoop dfs -rm - output
$ ./hadoop dfs -put test.txt input
-word count
$ ./hadoop dfs -put test.txt input2
$ ./hadoop jar ../hadoop-examples-1.0.3.jar wordcount input2 output3
$ ./hadoop dfs -copyToLocal output3 aaa
$./hadoop dfs -copyToLocal out_pois aaa
Prerequisites for Installing RHIPE
1.A working Hadoop cluster
2.R installed as a shared library
3.Google protocol buffers
4.Environment variables
- Prerequisite 1: Hadoop
- Prerequisite 2: R as a Shared Library
# R 제거
$ sudo apt-get remove r-base-core
# R 설치: 아래 참고하여 설치할 것
####################################################
$ wget http://infostat.dongguk.ac.kr/CRAN/src/base/R-2/R-2.15.1.tar.gz
$ tar -xzf R-2.15.1.tar.gz
$ cd R-2.15.1
# need to build shared library (--enable-R-shlib)
$ ./configure --enable-R-shlib # --prefix=...
//오류시 아래 패키지 설치 후 재시도
$ sudo apt-get install libX11-dev
$ sudo apt-get install libxt-dev
//#설치
$ sudo make
$ sudo make install
####################################################
- Prerequisite 3: Protocol Buffers
####################################################
# Download Protobuf from here.
$ wget http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.gz
# Decompress downloaded file.
$ tar -xzf protobuf-2.4.1.tar.gz
$ cd protobuf-2.4.1
# configuration
$ sudo ./configure --prefix /usr
# Set Environment Path
$ export LD_LIBRARY_PATH=/usr/local/lib
# install
$ sudo make
$ sudo make install
$sudo vi /etc/profile
---맨뒤에 아래 추가
PATH=$PATH:/home/stat/hadoop/bin:/home/stat/R-2.15.1/bin
export PATH
----
$source /etc/profile 해주시면 적용됩니다.
####################################################
5.Install binutils-gold for (Ubuntu 11.10).
This package is used to resolve link error when compiling RHIPE in (Ubuntu 11.10).
I found an article that describes linker of Ubuntu is changed slightly in order of parameters, therefore, RHIPE makes many many link errors.
To install, just follow the command if binutils-gold is not installed.
$ sudo apt-get install binutils-gold
- Prerequisite 4: Environment Variable
$ sudo vi /etc/R/Rprofile.site
####################################################
Sys.setenv(JAVA_HOME="/usr/lib/jvm/java-7-oracle")
Sys.setenv(HADOOP_HOME="/home/stat/hadoop")
Sys.setenv(HADOOP_BIN="/home/stat/hadoop/bin")
####################################################
- Installing Rhipe
####################################################
$ wget https://github.com/downloads/saptarshiguha/RHIPE/Rhipe_0.67.tar.gz
또는
$ wget http://datamining.dongguk.ac.kr/hadoop/Rhipe_0.67.tar.gz
$ tar -xzf Rhipe_0.67.tar.gz
$ sudo R CMD INSTALL Rhipe_0.67.tar.gz
####################################################
#아래의 에러발생시
g++ -I/usr/share/R/include -DNDEBUG -fpic -O3 -pipe -g -I. -O3 -pipe -g -DHAVE_UINTPTR_T `/usr/lib/R/bin/R CMD config --cppflags` `pkg-config --cflags protobuf` -c signal.cc -o signal.o
/bin/bash: pkg-config: 명령어를 찾을 수 없음
$ sudo apt-get install pkg-config
######
네이티브 스내피 라이브러리를 하둡으로 복사
wget http://anova.dongguk.ac.kr/snappy-1.0.5.tar.gz
tar -xzf snappy-1.0.5.tar.gz
cd snappy-1.0.5
./configure --enable-shared
sudo make
sudo make install
cp /usr/local/lib/libsnappy.* /home/stat/hadoop/lib/native/Linux-amd64-64
cp /usr/local/lib/libsnappy*.* /home/stat/hadoop/lib/native/Linux-i386-32