############################################################### 본 문서는 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 RHIPE설치