맥에서 Hadoop을 설치하는 방법입니다. 설치 환경은 아래와 같습니다.
- OS X 10.8.3
- Java 1.7.0_17
- Hadoop 1.0.4
설치 과정은 아래와 같은 단계를 거칩니다.
- 설치 준비
- hadoop 계정 생성
- Java 설치
- SSH 설치
- 설치 및 설정
- hadoop 설치
- hadoop 설정
설치 준비
hadoop 계정 생성
꼭 필요한 과정은 아니지만 보안상의 이유로 hadoop을 위한 별도 계정을 만드는 것이 좋습니다.
전체 이름: Hadoop
계정 이름: hadoop
시스템 환경설정 > 사용자 및 그룹에서 사용자 계정을 추가합니다.
이제 생성한 hadoop 계정으로 로그인 합니다.
Java 설치
$ java -version
터미널에서 위와 같이 입력합니다.
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 계정만 접근을 허용하는 것이 좋습니다.
$ ssh localhost
위와 같이 입력해서 접속이 되는지 확인합니다.
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 localhost
자, 이제 다시 ssh 접속을 해서 패스워드 입력없이 접속이 되면 성공입니다~
설치 및 설정
다운로드 및 설치
설치는 간단합니다. 아래 사이트에 접속해서 파일을 다운 받습니다.
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 파일을 수정해야 합니다.
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이 잘 돌아가는지 테스트 해 볼 수 있습니다.
$ bin/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
dfs.replication 1
mapred.job.tracker localhost:9001
다음은 hadoop daemon을 실행시키는 명령입니다.
$ bin/start-all.sh
hadoop을 실행 시켰으면 log를 보면서 제대로 기동이 됐는지 확인합니다. log 디렉토리는 기본적으로 ${HADOOP_HOME}/logs 입니다.
그 다음 hadoop에서 web interface로 제공하는 NameNode와 JobTracker에 접속해 봅니다.
- NameNode - http://localhost:50070/
- JobTracker - http://localhost:50030/
여기까지 잘 됐다면 위 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을 종료하려면 아래와 같이 입력합니다.
$ bin/stop-all.sh
Fully-Distributed mode는 여기서 다루지 않겠습니다~
'framework > hadoop' 카테고리의 다른 글
GenericOptionsParser 활용(ToolRunner) (0) | 2013.08.02 |
---|---|
Hadoop 실행시 jar 파일 추가하기 (0) | 2009.09.04 |