스크린샷 2014-05-08 오후 5.54.25

하둡으로 삽질한지 거의 한달이 되었다.

일주일 정도 작업해서 싱글로 워드카운트 예제 성공한 후 분산모드를 위해

서버도 32비트에서 64비트 최신으로 업데이트했으나 연이은 실패…

한달여만에 2대로 분산처리에 성공하였다.

인터넷 자료가 많은 도움이 되었으나 구 버전 설명을 그대로 이용하다가 여러번 시행착오를 겪기도 했다.

본 글에서는 하둡 2.3.0 버전을 사용하였다.

 

구성

서버 : 듀얼코드, RAM 4G – 2대

OS : 우분투 데스트탑 12.10 i386

Hadoop 2.3.0

우분투 i386에서 싱글로 성공한 뒤 amd64로 갈아업었지만

이번엔 엄청난 실행 오류를 맞이했었다.

서칭해보니 하둡사이트에는 32비트용으로 올라가있고 64bit에서 실행하려면

리빌드해야한단다. 설치도 겨우하고있던터라 포기하고 다시 32비트로 깔았다.

우분투만 10번 설치한것 같다.

편의상 2대의 아이피는 아래와 같이 기재하였다.

xxx.xxx.xxx.1 hmaster
xxx.xxx.xxx.2 hslave

 

OS 준비

(리눅스가 처음인 분들을 위해 상세히 적었습니다. 양해부탁드려요^^;)

우분투 설치 시 편의상 계정을 hadoop로 하고 호스트명을 각각 hmaster, hslave로 정하였다.
atp-get으로 기본 프로그램들을 설치한다.

$ sudo apt-get install ssh //ssh 설치

$ sudo apt-get install vsftpd // ftp 설치

$ sudo vi /etc/vsftpd.conf // ftp 환경파일 수

// 아래 항목만 수정하면됩니다. 주석으로 된 부분 주석 제거
anonymous_enable=no
local_enable=Yes
write_enable=Yes
local_unmask=022

$ sudo service vsftpd restart // ftp 재시작

// jdk 설치 (하둡은 java기반이므로..)
$ sudo apt-get -y install openjdk-7-jdk

 

하둡 설치

http://hadoop.apache.org 에서 하둡 프로그램 파일을 다운로드 받아 ftp로 업로드한다.

계정 홈에서 압축해제한다.

$ sudo tar xvf hadoop-2.3.0.tar

압축해제한 폴더를 usr/local로 옮겨 준다.

$ sudo cp -r hadoop-2.3.0 /usr/local/hadoop

hadoop 게정에 위 디렉토리 권한이 없는 경우 아래 명령으로 해결한다.

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

 

* 하둡 계정을 별도로 생성해서 관리하고자 할 경우

아래와 같이 계정 생성해준다.
$ sudo addgroup hadoop
$ sudo adduser –ingroup hadoop hadoop

// 프로파일 수정

$ vi ~/.profile

# JDK 7.0

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/jre

# hadoop home

export HADOOP_HOME=/usr/local/hadoop

# hadoop bin

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

// 프로파일 재로딩
$ source ~/.profile

// 변수 확인
$ echo $JAVA_HOME  –  $HADOOP_HOME
// 아래 내용이 출력되어야 함
/usr/lib/jvm/java-7-openjdk-i386/jre – /usr/local/hadoop

// ssh자동로그인을 위한 rsa키 만들기
$ ssh-keygen -t rsa -P “”

생성후 인증키 복사 ~/.ssh/authorized_keys 가 존재 할지도 모르니 cat >> 이용

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 755 ~/.ssh/authorized_keys

// 비번없이 접속테스트
$ ssh hadoop@localhost

하둡 셋팅

$ vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh
// 아래 내용 수정
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
// site.xml 수정

vi /usr/local/hadoop/etc/hadoop/core-site.xml

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://hmaster:9000</value>
  </property>
</configuration>

 

vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>

  <property>
    <name>dfs.name.dir</name>
    <value>/usr/local/hadoop/dfs/name</value>
  </property>

  <property>
    <name>dfs.data.dir</name>
    <value>/usr/local/hadoop/dfs/data</value>
  </property>
</configuration>
$ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.tem* /usr/local/hadoop/etc/hadoop/mapred-site.xml
$ vi /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
  <property>
    <name>mapred.job.tracker</name>
    <value>hmaster:9001</value>
  </property>
</configuration>
$  vi /usr/local/hadoop/etc/hadoop/mapred-env.sh

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

호스트 설정

$ sudo vi /etc/hosts

127.0.0.1 localhost
#127.0.1.1 hmaster
xxx.xxx.xxx.1 hmaster
xxx.xxx.xxx.2 hslave

여기까지 2대 모두 동일하게 셋팅한다 .

 

ssh 공개키 공유 

// hmaster에서
$ scp ~/.ssh/id_rsa.pub hadoop@hslave:~/hmaster_key

// hslave에서
$ scp ~/.ssh/id_rsa.pub hadoop@hmaster:~/hslave_key

// hmaster에서
$ cat ~/hslave_key >> ~/.ssh/authorized_keys

// hslave에서
$ cat ~/hmaster_key >> ~/.ssh/authorized_keys

하둡 실행

여기서 부터는 hmaster에서 실행합니다.
// namenode 포멧
$ /usr/local/hadoop/bin/hadoop namenode -format

// 하둡 실행
$ /usr/local/hadoop/sbin/start-all.sh

// 제대로 실행되었는지 데몬 확인하기
hadoop@hmaster:~$ jps
429 ResourceManager
2298 Jps
32477 NameNode
32746 SecondaryNameNode

hadoop@hslave:~$ jps
19787 DataNode
20270 Jps

// 웹브라우저에서 모니터링하기
http://xxx.xxx.xxx.1:50070  으로 접속해 보자.
하둡 데몬이 실행중이면 아래와 같은 화면이 나온다.

데쉬보드 메뉴를 클릭해보자.
hslave 항목이 들어있다.


datanode 에 아무것도 없으면 데이터 입출력을 할 수 없다.

예제 실행

인터넷에 돌아다니는 wordcount 예제 파일을 사용하였다.
계정 홈에 jar 파일과 분석할 입력파일(텍스트)을 업로드한다.
~/in/* 에 입력파일들이 있다고 가정하고

// dfs 디렉토리 준비

hadoop@hmaster:~$ hadoop dfs -mkdir /input

// dfs로 입력파일 전달
hadoop@hmaster:~$ hadoop dfs -put ./in/* /input/*
// 예제 실행

hadoop@hmaster:~$ hadoop jar wordcount.jar kr.bigmark.wordcount.WordCount /input /output

처리결과 확인

hadoop dfs -cat /output/*00000

의미없는 로그파일을 넣었더니 위와같이 나왔다.

왼쪽이 단어, 오른쪽이 단어 개수이다.

 

예제를 다시 실행하려면 output을 날려주어야한다.

$ hadoop dfs -rmr /output

 

참고

http://sidcode.tistory.com/213

http://mymailcool.tistory.com/entry/hadoop-Fully-distributed-Mode-구축

http://jy86.tistory.com/entry/ㅇ-1

http://ragon.tistory.com/entry/하둡-완전-분산-설치4개의-노드로-1대는-마스터-3대는-계산노드로-사용

 


4 Comments

김진희 · 2014년 5월 9일 at 10:40

Good~~!!

답글 남기기

Avatar placeholder