맥에서 Hadoop을 설치하는 방법입니다. 설치 환경은 아래와 같습니다.
- OS X 10.8.3
- Java 1.7.0_17
- Hadoop 1.0.4
설치 과정은 아래와 같은 단계를 거칩니다.
- 설치 준비
- hadoop 계정 생성
- Java 설치
- SSH 설치
- 설치 및 설정
설치 준비
hadoop 계정 생성
꼭 필요한 과정은 아니지만 보안상의 이유로 hadoop을 위한 별도 계정을 만드는 것이 좋습니다.
전체 이름: Hadoop
계정 이름: hadoop
시스템 환경설정 > 사용자 및 그룹에서 사용자 계정을 추가합니다.
이제 생성한 hadoop 계정으로 로그인 합니다.
Java 설치
터미널에서 위와 같이 입력합니다.
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
Hadoop을 사용하기 위해서는 java 1.6 이상의 버전이 설치되어 있어야 합니다.
혹시 자바가 설치되어 있지 않거나 버전이 1.6 미만이면 아래 사이트를 통해 자바를 설치합니다.
http://docs.oracle.com/javase/7/docs/webnotes/install/mac/mac-jdk.html
SSH 설치
이번 단계에서는 SSH를 통해 local 머신에 접속을 할 수 있도록 하고 접속하되 password를 입력하지 않도록 해야합니다.
시스템 환경설정 > 공유를 선택합니다.
왼쪽에 원격 로그인에 체크를 하면 원격 로그인이 켜집니다. 보안상 새로 추가한 hadoop 계정만 접근을 허용하는 것이 좋습니다.
위와 같이 입력해서 접속이 되는지 확인합니다.
The authenticity of host 'localhost (127.0.0.1) stablished.
RSA key fingerprint is 67:ef:a4:e1:38:51:64:0f:2f:f8:d5:bc:72:b9:4f:a0.
Are you sure you want to continue connecting (yes/no)?
처음 접속하면 위와 같은 메세지가 나오는데 yes 을 입력하면 다음부터는 이 메세지가 출력되지 않습니다.
그런데 아직까지는 ssh 접속할때 패스워드를 입력을 해야합니다. hadoop은 내부적으로 ssh로 통신하므로 패스워드 입력없이 ssh 접속이 가능하도록 설정해야 합니다.
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
위와 같이 입력해서 키를 생성합니다. 중간에 입력을 해야 하는 항목이 나오면 그냥 엔터키를 누르면 됩니다.
The key's randomart image is:
+--[ DSA 1024]----+
| |
| . |
| . . . |
| + + o . |
| o + S + |
| . o o + = . |
| + o o + |
| .oEo o |
| ++ . |
+-----------------+
재미있는 그림도 나오네요 :)
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
키를 생성하면 ~/.ssh 디렉토리에 파일이 생기는데 위와 같이 입력하여 이 키 파일을 같은 디렉토리에 있는 authorized_keys 파일에 추가해 줍니다.
자, 이제 다시 ssh 접속을 해서 패스워드 입력없이 접속이 되면 성공입니다~
설치 및 설정
다운로드 및 설치
설치는 간단합니다. 아래 사이트에 접속해서 파일을 다운 받습니다.
[Hadoop Releases]
Hadoop 버전이 여러가지가 있는데 간단하게 언급하면
- 1.0.x - 현재 안정된 버전
- 1.1.x - 베타 버전
- 2.x.x - 알파 버전
- 0.23.x - 2.x.x 버전과 유사하나 namenode 이중화 구성이 빠짐
- 0.22.x - security 기능 제외
- 0.20.203.x - 안정된 버전(구버전)
- 0.20.x - 구버전
여기서는 1.0.4 버전으로 설치할 것입니다.
적당한 디렉토리에 다운받은 파일의 압축을 풉니다.
$ tar -xzvf hadoop-*.tar.gz
이것으로 설치는 끝입니다 :)
설치가 잘 됐는지 확인해 볼까요?
Hadoop 설정
hadoop cluster를 시작하기 위한 준비 작업으로 hadoop 홈 디렉토리 하위에 conf/hadoop-env.sh 파일을 수정해야 합니다.
Java Home 설정
hadoop-env.sh 파일에서 JAVA_HOME 설정부분에 주석(#)을 제거하고 /Library/Java/Home (또는 /System/Library/Frameworks/JavaVM.framework/Home)를 입력합니다.
혹시 자바를 다른 디렉토리에 설치했으면 자바를 설치한 디렉토리를 적어주면 됩니다.
export JAVA_HOME=/Library/Java/Home
OS X용 환경변수 추가
이 부분 때문에 좀 고생을 했는데, 아래와 같은 내용을 추가해줍니다. (참조: https://issues.apache.org/jira/browse/HADOOP-7489)
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"
아래는 hadoop-env.sh 파일의 예입니다.
# Set Hadoop-specific environment variables here.
# The only required environment variable is JAVA_HOME. All others are
# optional. When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# The java implementation to use. Required.
export JAVA_HOME=/Library/Java/Home
# Extra Java CLASSPATH elements. Optional.
# export HADOOP_CLASSPATH=
# The maximum amount of heap to use, in MB. Default is 1000.
export HADOOP_HEAPSIZE=2000
# Extra Java runtime options. Empty by default.
# export HADOOP_OPTS=-server
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk"
여기까지 했으면 hadoop이 잘 돌아가는지 테스트 해 볼 수 있습니다.
위와 같이 입력했을 때, hadoop 실행 방법이 출력되면 정상입니다.
이제 본격적으로 설정을 해 볼텐데요, Hadoop은 3가지 모드를 지원합니다.
- Standalone mode (Local mode)
- Pseudo-Distributed mode
- Fully-Distributed mode
Standalone mode
기본 설정입니다. 모든 hadoop daemon이 하나의 java process로 실행됩니다.
처음 hadoop-env.sh 파일 수정한 것 외에는 별도 수정할 필요 없이 바로 hadoop을 실행하면 됩니다. local mode 라고도 불리는 것처럼 HDFS에 파일을 올릴 필요없이 local 파일을 바로 access 해서 출력도 local에 생성됩니다. 디버깅할 때 편리합니다.
Standalone으로 실행해 보려면 아래와 같이 입력합니다.
$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
$ cat output/*
Pseudo-Distributed mode
Standalone mode와는 달리 Hadoop daemon들이 각각 별도의 java process로 실행되는데 하나의 node로 실행되는 형태입니다. input 파일은 HDFS 상에 있어야 하고 output 파일도 HDFS에 생성됩니다.
conf/core-site.xml:
fs.default.name
hdfs://localhost:9000
mapred.job.tracker
localhost:9001
위와 같이 설정 파일을 입력했으면 hadoop을 실행해 보기 전에 HDFS를 포맷해야 합니다.
$ bin/hadoop namenode -format
다음은 hadoop daemon을 실행시키는 명령입니다.
hadoop을 실행 시켰으면 log를 보면서 제대로 기동이 됐는지 확인합니다. log 디렉토리는 기본적으로 ${HADOOP_HOME}/logs 입니다.
그 다음 hadoop에서 web interface로 제공하는 NameNode와 JobTracker에 접속해 봅니다.
여기까지 잘 됐다면 위 Standalone mode에서 했던 예제를 해볼까요?
$ bin/hadoop fs -put conf input
hadoop의 conf 디렉토리를 HDFS 에 input 위치에 올리는 명령입니다.
예제 실행은 아래와 같이 합니다.
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
똑같이 결과가 output 디렉토리에 생기는데 Standalone mode와는 다르게 local이 아니고 HDFS상입니다. 결과를 확인해 보려면
$ bin/hadoop fs -get output output
$ cat output/*
위와 같이 HDFS의 output을 local의 output으로 내려받아서 확인해 보거나
$ bin/hadoop fs -cat output/*
HDFS상의 파일을 바로 확인할 수도 있습니다.
마지막으로 hadoop daemon을 종료하려면 아래와 같이 입력합니다.
Fully-Distributed mode는 여기서 다루지 않겠습니다~