본문 바로가기

System/Linux

하둡(Hadoop) 설치부터 테스트까지 정리~

하둡(Hadoop) 설치

하둡은 HDFS, MapReduce를 소프트웨어로 구현한 것으로 아파치 Top-Level 프로젝트입니다. 

코어는 Java, C/C++, Python등을 지원하는데요. 기본적으로 JDK는 설치되어 있어야 Hadoop을 구동할 수 있습니다. 

하둡을 구동하기 위해서는 리눅스 환경이 좋은데요. 윈도우는 경우에는 가상머신을 활용하면 됩니다. (맥은 설치가 됩니다.)

저는 우분투를 PC에 설치해서 하둡 설치를 진행했네요. 


다운로드는 http://ftp.daum.net/apache/hadoop/common/ 에서 버전별로 받으시면 됩니다.

현재 1.0.2버전까지 다운로드 할 수 있네요. 저는 1.0.0 버전으로 테스트를 진행했습니다. 


다운로드한 파일(hadoop-1.0.0.tar.gz)을 압축을 풀고 진행하면 됩니다. 

습관적으로 /usr/local 하위 폴더에 압축을 풀었네요.. ^^

# tar xzf hadoop-1.0.0.tar.gz


이제 환경변수 설정을 진행해야 합니다. 먼저 profile을 vi 에디터로 띄웁니다.

# cd ~

# vi .profile

그리고 나서 다음과 같이 환경변수들을 설정해 줍니다.

JAVA_HOME을 먼저 설정하고, 하둡이 설치된 경로인 HADOOP_INSTALL을 지정한 후 PATH에 추가했습니다. 

export JAVA_HOME=/usr/lib/jvm/java-6-sun

export HADOOP_INSTALL=/usr/local/hadoop-1.0.0

export PATH=$PATH:$HADOOP_INSTALL/bin

이제 하둡이 동작하는지 다음과 같이 확인하시면 됩니다. 

# source .profile

# hadoop version

Hadoop 1.0.0

Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1214675

Compiled by hortonfo on Thu Dec 15 16:36:35 UTC 2011


하둡(Hadoop) 환경 설정

하둡은 다음의 세가지 방식 중 한가지로 동작합니다. 

Standalone mode
- 데몬 프로세스가 동작하지 않고 모두 단독의 JVM 내에서 동작한다. 테스트하고 디버그가 쉽기 때문에 개발에 적합하다. 
Pseudo-distributed mode
- 하둡 데몬 프로세스가 로컬 컴퓨터에서 동작하므로 클러스터를 시뮬레이션 할 수 있다. 
Fully distributed mode
- 하둡 데몬 프로세스가 여러 컴퓨터로 구성된 그룹에서 동작한다. 

이 중에서 Standalone mode는 아무것도 설정해 줄 것이 없으므로 저는 Pseudo-distributed mode로 설정해 보도록 하겠습니다. 

Hadoop과 관련된 환경설정 파일들은 conf/ 디렉토리에 있습니다. 

hadoop-env.sh 설정

먼저 conf/hadoop-env.sh 파일에서 JAVA_HOME과 HADOOP_HOME을 설정해 줍니다. 

  1. # vi conf/hadoop-env.sh  
  2. export JAVA_HOME=/usr/lib/jvm/java-6-sun  
  3. export HADOOP_HOME=/usr/local/hadoop-1.0.0  

java와 hadoop이 설치된 경로를 지정해 줍니다. (저와 경로가 다를테니 각자에 맞춰서 해주시면 됩니다.)

이제부터는 XML 파일들을 설정해 볼 차례입니다. 




core-site.xml 설정

core-site.xml 파일은 HDFS와 맵리듀스에 공통적으로 사용되는 IO와 같은 하둡 코어를 위한 환경을 설정하는 파일입니다. 

다음과 같이 설정해 주시면 됩니다. 

  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <!-- Put site-specific property overrides in this file. -->  
  5.   
  6. <configuration>  
  7.  <property>  
  8.   <name>fs.default.name</name>  
  9.   <value>hdfs://localhost:9000</value>  
  10.  </property>  
  11.   
  12.  <property>  
  13.   <name>hadoop.tmp.dir</name>  
  14.   <value>/usr/local/hadoop-1.0.0/hadoop-${user.name}</value>  
  15.  </property>  
  16. </configuration>  

hdfs-site.xml 설정

hdfs-site.xml 파일은 네임노드, 보조 네임노드, 데이터 노드 등과 같이 HDFS 데몬을 위한 환경을 설정하는 파일입니다. 

Pseudo-distributed mode이므로 동일한 서버에 네임 노드와 데이터 노드를 설정했네요. 

  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <!-- Put site-specific property overrides in this file. -->  
  5.   
  6. <configuration>  
  7.  <property>  
  8.   <name>dfs.name.dir</name>  
  9.   <value>/usr/local/hadoop-1.0.0/dfs/name</value>  
  10.  </property>  
  11.   
  12.  <property>  
  13.   <name>dfs.name.edits.dir</name>  
  14.   <value>${dfs.name.dir}</value>  
  15.  </property>  
  16.   
  17.  <property>  
  18.   <name>dfs.data.dir</name>  
  19.   <value>/usr/local/hadoop-1.0.0/dfs/data</value>  
  20.  </property>  
  21. </configuration>  

mapred-site.xml

mapred-site.xml 파일은 Job Tracker와 Task Tracker 같은 맵리듀스 데몬을 위한 환경을 설정하는 파일입니다. 

  1. <?xml version="1.0"?>  
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>  
  3.   
  4. <!-- Put site-specific property overrides in this file. -->  
  5.   
  6. <configuration>  
  7.  <property>  
  8.   <name>mapred.job.tracker</name>  
  9.   <value>localhost:9001</value>  
  10.  </property>  
  11.   
  12.  <property>  
  13.   <name>mapred.local.dir</name>  
  14.   <value>${hadoop.tmp.dir}/mapred/local</value>  
  15.  </property>  
  16.   
  17.  <property>  
  18.   <name>mapred.system.dir</name>  
  19.   <value>${hadoop.tmp.dir}/mapred/system</value>  
  20.  </property>  
  21. </configuration>  

slaves

이 파일은 데이터 노드와 Task Tracker를 작동시킬 컴퓨터의 목록을 작성하는 파일입니다. 

실제 분산 환경으로 처리할 때는 데이터 노드에 해당하는 컴퓨터의 IP 주소나 호스팅 명을 써 주시면 됩니다. 

전 Pseudo-distributed mode이므로 localshot라고만 했네요. 

localhost

SSH 설정

Fully distributed mode에서는 Master 서버와 Slave 서버들이 상호 접속이 가능하도록 SSH를 설정해야 합니다. 

물론 Pseudo-distributed mode에서도 이와 같은 설정이 필요합니다. 

왜냐하면 Hadoop은 내부적으로 Pseudo-distributed mode와 Fully distributed mode를 구분하지 못하기 때문입니다.

그러므로 위와 같이 Slaves를 localhost로 설정했더라도 데몬 프로세스를 실행시키기 위해서 로컬호스트에 암호 입력없이 SSH 로그인할 수 있도록 설정할 필요가 있습니다. 

그래서 서로 SSH 키를 생성하고 복사하는 과정이 필요한데요. Pseudo-distributed mode이므로 다음과 같이 한번만 해주시면 됩니다. 

(참고로 SSH는 미리 설치되어 있어야 합니다.)

# ssh-keygen -t rsa

# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys


# ssh localhost

마지막의 #ssh localhost 를 실행해서 제대로 접속되는지 확인할 수 있습니다. 

네임 노드 포맷

이제 마지막으로 네임노드를 HDFS로 포매팅 해주면 모든 세팅은 종료 됩니다. 

다음과 같이 해 주면 됩니다. 

# hadoop namenode -format

드디어 Hadoop 관련 설정을 마무리 했네요. 

저도 각각의 항목들을 모두 이해한 것은 아니지만 대략적으로 각각의 파일이 어떤 것을 하는지 알고 있으면 될 것 같습니다. 


하둡(Hadoop) 실행 및 UI 확인 

Hadoop을 실행하는 명령어는 다음과 같습니다. HDFS만 시작할 수도 있고, 맵리듀스만 실행할 수도 있으면 전체를 한번에 시작할 수도 있네요. 

# start-all.sh //HDFS & 맵리듀스 모두 실행

# start-mapred.sh //맵리듀스만 실행

# start-dfs.sh //HDFS만 실행


# stop-all.sh // HDFS & 맵리듀스 모두 중단

# stop-mapred.sh // 맵리듀스만 중단

# stop-dfs.sh // HDFS만 중단

Hadoop을 실행하고 난 후, 웹 기반의 UI로 모니터링할 수 있도록 제공하고 있습니다. 

각각의 URL은 다음과 같습니다. 

# 맵리듀스

http://localhost:50030 

# HDFS

http://localhost:50070

실행한 화면은 다음과 같네요. 


      


하둡 (Hadoop) 실행 테스트

위 그림을 보면 실제로 맵리듀스를 1개 테스트한 결과를 볼 수 있을 겁니다. 

다음과 같이 Hadoop 배포판에 포함된 기본적인 예제를 테스트했네요. 

여러분도 세팅을 마무리 한 후, 한번 테스트 해보시기 바랍니다. 지정된 텍스트 파일에서 단어의 개수를 체크하는 예제네요. 

# cd /usr/local/hadoop-1.0.0

# hadoop dfs -mkdir input

# hadoop dfs -put CHANGES.txt input/

# hadoop jar hadoop-examples-1.0.0.jar wordcount input output

CHANGES.txt 는 하둡 설치 디렉토리에 있는 변경된 내역을 정리한 파일입니다. 

이 파일에 있는 단어의 수를 체크해서 출력하는 내용입니다. 



ps. HADOOP_HOME을 설정하고 실행하면 다음과 같은 메시지가 나타납니다. 

Warning: $HADOOP_HOME is deprecated.

HADOOP_HOME이 deprecated 되었다고 하던데요. 일단 예제는 잘 돌아갑니다. 

나중에 한번 제대로 확인해 봐야겠네요~


2012/05/22 - [클라우드&BigData/하둡(Hadoop)] - 하둡 맵리듀스 프로그래밍을 위한 이클립스 플러그인 설정 #1

2012/05/25 - [클라우드&BigData/하둡(Hadoop)] - 하둡(hadoop) 맵리듀스 프로그래밍을 위한 이클립스 설정 및 맵리듀스 개발 #2