Study/Hadoop

Step3. 의사 분산 모드 (Pseudo Distributed Mode)

빨간당무 2014. 4. 10. 03:51

본 문서는 하둡(Hadoop)에서 의사 분산 모드(Pseudo Distributed Mode)를 설정하는 방법을 기술하고 있다. 

본 문서의 내용은 본 문서가 작성된 일자 이전 대해서 확인 된 방법으로써 이후 변경된 내용을 담고 있지 않거나 혹은 일부는 추후 업데이트할 예정이다. 




  • 의사 분산 모드? (Pseudo Distributed Mode)

하나의 서버에서 하둡 소프트웨어 데몬들을 모두 실행하여 HDFS를 사용함. 데몬들은 다음과 같음.

- 네임노드

- 2차 네임노드

- 데이터노드

- 잡 트래커

- 태스크 트래커


  • conf/hadoop-env.sh 수정

$ vi $HADOOP_HOME/conf/hadoop-env.sh 내용은 아래와 같다.
# The java implementation to use.  Required.
#export JAVA_HOME=/usr/lib/jvm/java-6-jdk

위 내용에서 #을 제거하고 실제 경로로 바꿔준다.

# The java implementation to use.  Required.
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64


  • SSH(Secure Shell) 자동 로그인을 위한 공개키와 비밀키 생성

$ ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa


$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys


ssh-keygen으로 한 쌍의 공개키와 비밀키를 생성하는데, id_dsa는 private key, id_dsa.pub 는 public key가 된다.

생성한 공개키로 SSH 자동 로그인 하고 싶은 시스템의 ~/.ssh/authorized_keys라는 파일 뒤에 추가한다.


자동 로그인이 되는지 아래와 같이 실행해 본다.

$ ssh localhost


자동 로그인이 안되는 경우 공개/비밀키 생성에 문제가 있거나 authorized_keys 에 추가가 잘못되었을 가능성이 높다.

자동 로그인을 확인한 후 다시 빠져 나온다.

$ exit


  • 의사 분산 환경설정 파일 편집
$ vi $HADOOP_HOME/conf/mapred-site.xml
mapred-site.xml은 MapReduce 프레임워크와 관련된 내용을 담고 있으며, 아래와 같이 포트번호를 지정함. 

$ vi $HADOOP_HOME/conf/hdfs-site.xml
hdfs-site.xml은 HDFS(Hadoop Distributed File System)과 관련된 내용을 담고 있으며, 블록 복제수를 지정하는데 여기서는 하나의 서버에서 실험하는 의사 분산 모드이기 때문에 1로 지정함.


vi $HADOOP_HOME/conf/core-site.xml

core-site.xml은 네임노드 위치 지정과 관련된 내용을 담고 있으며, 네임노드의 주소를 지정함. 


위 3개의 환결설정 파일은 앞서 데몬들 중 

- 네임노드 - localhost:9000

- 2차 네임노드 - 아직 미지정 - conf/masters

- 데이터노드 - 아직 미지정 - conf/slaves

- 잡 트래커 - localhost:9001

- 태스크 트래커 - 아직 미지정 - conf/slaves

만 지정한 상태이다. 


$ vi $HADOOP_HOME/conf/masters

를 확인하면 현재 localhost 만 지정되어 있는데 여기서 2차 네임노드가 지정할 수 있다. 


$ vi $HADOOP_HOME/conf/slaves

를 확인하면 현재 localhost 만 지정되어 있는데 여기서 데이터노드와 태스크 트래커 서버 리스트를 지정할 수 있다.




  • HDFS 포맷하기
포맷에 앞서 hdfs-site.xml 설명 내에 dfs.data.dir 파라미터가 가리키는 디렉토리를 데이터 노드에서 사용할 위치인데 해당 파라미터를 사용하지 않는 다면 기본으로 /tmp/hadoop-(사용자이름)/dfs/data 디렉토리를 사용함. 문제는 /tmp 디렉토리에 셋업되면 서버가 reboot 될 때 /tmp 디렉토리가 정리될 수 있음 그래서 다른 위치로 지정하기를 추천함. 아니면 hadoop.tmp.dir 을 다른 곳으로 설정함. 
여기서는 $HADOOP_HOME/dfs/data 디렉토리에 지정하도록 한다. 우선 디렉토리를 생성하고, 
mkdir $HADOOP_HOME/dfs
mkdir $HADOOP_HOME/dfs/data
hdfs-site.xml 파일을 아래와 같이 수정한다. 
$ vi $HADOOP_HOME/conf/hdfs-site.xml

reference : hdfs-default.html

위와 가팅 데이터 노드 위치를 변경하고 HDFS로 포맷을 아래와 같이 수행한다. 하둡 실행 위치가 환경 변수에 추가되어 있을 때, 
$ hadoop namenode -format





  • 5개 데몬 실행하기

$ start-all.sh


위와 같이 실행 시킨 후 5개 데몬이 모두 실행되었는지 확인하려면 jps 커맨드(자바 스포레스를 보여주는 커맨드)를 실행

$ jps


만약 위에서 5개 데몬이 정상수행되지 않는 경우 $HADOOP_HOME/logs 에서 각 hadoop-(사용자이름)-(데몬이름).log 파일을 확인하여 진행할 수 있다. 


모든 데몬을 종료하려면

$ stop-all.sh




  • 설치 확인 - 웹 인터페이스 이용

http://localhost:50030/ - 잡 트래커 웹 인터페이스 (맵리듀스)

http://localhost:50070/ - 네임노드 웹 인터페이스 (HDFS)


http://localhost:50075/ - 데이터노드 웹 인터페이스 

http://localhost:50060/ - 태스크 트래커 웹 인터페이스


  • 설치 확인 -  하둡 셸 커맨드를 이용
$ hadoop fs -ls /





  • wordcount 예제 실행

실행에 앞서 HDFS 상의 입력 파일들과 출력 디렉토리가 필요함. 따라서 입력 파일들을 HDFS 위에 만들어 주어야 함. 


$ cd $HADOOP_HOME

$ hadoop fs -mkdir /input

$ hadoop fs -copyFromLocal README.txt /input

$ hadoop fs -ls /input



wordcount를 실행한다. 

hadoop jar hadoop-examples-1.0.3.jar wordcount /input/README.txt /output


에러 없이 수행되었다면 HDFS의 /output 디렉토리 내용을 확인

$ hadoop fs -ls /output


최종 데이터는 /output/part-r-00000 파일은 HDFS에 있기 때문에 내용을 그대로 볼 수 없고 하둡 파일 셸 커맨드를 이용해서. 

-copyToLocal - 로컬 파일 시스템으로 내려서 보거나

-cat - 바로 화면으로 출력해서 볼 수 있음.

$ hadoop fs -cat /output/part-r-00000 | more




Reference : 

1. 직접 해보는 하둡 프로그래밍, 이지스퍼블리싱, 한기용 저

2. 하둡(Hadoop) 설치부터 테스트까지 정리~, http://blog.acronym.co.kr/329