하둡 설치 신현호 이영건
하둡 설치 전 작업 ssh, rsync, jdk 를 설치한다. 마스터의 경우 하둡 파일시스템의 쓰기 권한을 위해서는 root 계정으로 로그인 해야한다.
테스트 환경 리눅스 : 우분투 11.04 하둡 버전: hadoop-0.20.2 Jdk 버전: jdk1.6.0_25 하둡은 /hadoop 폴더에 설치 -/hadoop/hadoop-0.20.2 jdk 는 /usr/jdk1.6.0_25 폴더에 설치
설정 파일 설명 hadoop-env.sh - Hadoop이 실행하는 모든 프로세스에 적용되는 시스템 환경 값에 대한 스크립트 - 환경변수에 대해서 시스템 변수로 등록해 사용하는 방식이 아니라, 이 파일에 모든 환경 변수를 설정하고 이 파일을 전체 클러스터 노드에 복사해 사용 core-site.xml - Hadoop 설치 후 로그파일, 네트워크 튜닝, I/O튜닝, 파일 시스템 튜닝, 압축 등과 같이 기본적인 하부 시스템 설정 - 맵리듀스에서도 공통으로 사용 hdlf-site.xml - Hadoop파일 시스템을 위한 설정파일로 자세한 항목은 hdfs-default.xml파일을 참고 Masters - 세컨드리 네임 노드가 실행될 서버지정 Slaves - 데이터 노드가 실행될 서버지정 hadoop-metrics.properties - Hadoop에서 각 기능별(파일시스템, 맵리듀스)로 모니터링 데이터를 수집하는 방식에 대한 설정
하둡 설치 하둡 다운로드 메인 페이지 : http://hadoop.apache.org 다운로드 : http://hadoop.apache.org/core/releases.html 설치 버전 : hadoop-0.20.2 ./conf : 환경설정 파일 존재 ./bin : 실행 파일 존재 ./logs : 로그 파일 존재 ./docs : 도움말 문서 존재 압축을 풀고 자신이 원하는 폴더로 이동 tar xvzf hadoop-* 명령 이용 (* 버젼임) 하둡 설정 파일 초기화 하기 (./ 은 하둡이 설치된 폴더) ./src/core/core-default.xml 의 내용을 ./conf/core-site.xml 로 붙여 넣는다. ./src/hdfs/hdfs-default.xml 의 내용을 ./conf/hdfs-site.xml 로 붙여 넣는다. ./src/mapred/mapred-default.xml 의 내용을 ./conf/mapred-sitd.xml 로 붙여 넣는다.
/conf/hadoop-env. sh 설정 (아래 내용을 추가 또는 변경한다 ./conf/hadoop-env.sh 설정 (아래 내용을 추가 또는 변경한다. 아래 내용중 주석이 있는 경우 #제거) export JAVA_HOME=/usr/local/jdk1.6.0_25 export HADOOP_HOME=/hadoop/hadoop-0.20.2 export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves export HADOOP_LOG_DIR=${HADOOP_HOME}/log 참고 : jdk 와 hadoop이 다른 곳에 설치 되었다면 JAVA_HOME 과 HADOOP_HOME의 값을 자신이 설치된 경로로 바꾸어주면된다. ./conf/core-site.xml (아래의 속성 값을 찾아 아래와 같이 변경한다.) <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> <description> The name of the default file system. Either the literal string "local" or a host:port for NDFS. </description> </property> <property> <name>hadoop.tmp.dir</name> <value>/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> 참고 : 속성 값에 지정한 경로의 실제 폴더가 없어도 하둡 실행시 자동으로 폴더가 생성되므로 폴더를 미리 만들 필요는 없다. fs.default.name : name 서버 경로 hadoop.tmp.dir : 하둡의 모든 데이터 저장과 임시 공간에 대한 최상위 경로
/conf/hdfs-site. xml (아래의 속성 값을 찾아 아래와 같이 변경한다 ./conf/hdfs-site.xml (아래의 속성 값을 찾아 아래와 같이 변경한다.) <property> <name>dfs.name.dir</name> <value>/hadoop/name</value> </property> <property> <name>dfs.data.dir</name> <value>/hadoop/data</value> </property> 참고 : dfs.name.dir : 파일의 디렉토리 정보와 파일 정보 등을 저장하는 폴더 dfs.data.dir : 하둡 파일 시스템에 저장되는 모든 파일이 저장되는 위치 /conf/mapred-site.xml (아래의 속성 값을 찾아 아래와 같이 변경한다.) <property> <name>mapred.job.tracker</name> <value>master:9001</value> <description> The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. </description> </property>
<property> <name>mapred. map <property> <name>mapred.map.tasks</name> <value>2</value> <description> define mapred.map tasks to be number of slave hosts </description> </property> <property> <name>mapred.reduce.tasks</name> <value>2</value> <description> define mapred.reduce tasks to be number of slave hosts </description> </property> <property> <name>dfs.replication</name> <value>1</value> </property>
기타 속성들의 정보는 ./docs 의 문서들을 참조하기 바란다. 호스트명 등록하기 위에서 속성값에 사용 했던 호스트명 master는 master 컴퓨터를 나타내는 호스트명으로 /etc/hosts 에 명시할 수 있다. 예) master ip가 222.222.222.100 이라면 /etc/hosts 파일을 열어 222.222.222.100 master 위 내용을 추가한다. 참고: /etc/hosts 에 추가된 ip는 ip대신 호스트명으로 대신 사용할 수 있다. 설정파일들에 내용 중 ip 가 쓰여야 할 곳에 호스트명으로 대신 쓴다면 ip가 변경되는 상황일때 설정 파일들의 설정 값을 바꿀 필요 없이 /etc/hosts 파일에서 ip 만 바꾸면 되므로 유용하다. master, slaves 노드 추가하기 ./conf/masters 파일을 열어 master 컴퓨터의 ip 혹은 호스트명을 입력한다. ※ master 라고 입력한다. ./conf/slaves 파일을 열어 slave 컴퓨터들의 ip 혹은 호스트명을 입력한다. ※ ip를 입력해도 되지만 /etc/hosts에 slave 호스트명을 추가하고 호스트명을 입력하는 것도 좋은 방법이다.
ssh 공개키 만들기 설명 : hadoop은 ssh 접속을 통하여 명령을 송신,수신한다 ssh 공개키 만들기 설명 : hadoop은 ssh 접속을 통하여 명령을 송신,수신한다. 공개키를 설정하지 않으면 hadoop내 ssh 접속마다 패스워드를 요구하므로 공개키를 만드는 것이 편하다. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa (공개키 만들기) cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys (공개키 복사) 위 두 명령을 수행하여 생성된 파일 authorized_keys 을 각 slave 컴퓨터의 ~/.ssh 에 복사한다. master , slave 컴퓨터의 hadoop 설정은 동일하게 하므로 설정이 끝난 /hadoop 폴더를 압축하여 각 slave 컴퓨터에 동일 위치에 복사하면 된다. master 의 경우 - hadoop namenode –format 명령을 수행하여 hadoop 파일 시스템을 초기화한다. - start-all.sh 명령을 수행하여 hadoop 데몬을 실행시킨다. Slave 의 경우 -start-all.sh 명령만 수행한다. 참고 : hadoop설치 경로의 bin 경로를 ~/.bashrc 나 /etc/profile 에 PATH 환경변수를 지정하여 사용할수 있다. (어떤 경로에서나 hadoop 실행가능 아래 내용을 추가한다.) HADOOP_HOME= 하둡 설치경로 export PATH=$PATH:$HADOOP_HOME/bin
설치 확인 및 명령어 브라우저를 띄워서 http://master:50030 접속 node 연결 개수 및 현재 작업이나 완료 작업 등을 확인할 수 있다. 브라우저를 띄워서 http://master:50070 접속 리소스 정보를 확인할 수 있다. stop-all.sh 명령어 hadoop 실행 종료 로그확인 하둡 경로의 logs 폴더를 확인하라 하둡 파일 시스템 제어 명령어 hadoop dfs –ls : 쉘의 ls 명령어와 동일 hadoop dfs –mkdir <경로> : mkdir 명령어와 동일 hadoop dfs –rmr <경로> : rm –R 명령어와 동일 hadoop dfs –put <로컬경로> <하둡 파일시스템경로> : 리눅스 파일시스템의 파일을 하둡 파일 시스템으로 전송한다. hadoop dfs –copyToLocal : 하둡 파일시스템의 파일을 리눅스 파일시스템으로 전송 hadoop dfs –cat <파일 경로> : cat 명령어와 동일
wordcount 테스트 wordcount 는 하둡에서 제공하는 예제 프로그램으로 하둡 파일 시스템의 지정 폴더내의 모든 파일의 word 개수를 구하는 프로그램이다.(hadoop-0.20.2-examples.jar d이름으로 하둡 폴더내에 존재) (테스트) hadoop dfs –mkdir input 명령어로 input 폴더 생성 hadoop dfs –put ~/.bashrc input 명령어로 .bashrc 파일을 input 폴더로 전송 hadoop jar $HADOOP_HOME/hadoop-0.20.2-examples.jar wordcount input output ※ 주의 사항 : output 폴더는 만들어 놓으면 안된다. (출력) 09/02/25 19:54:32 INFO mapred.FileInputFormat: Total input paths to process : 1 09/02/25 19:54:33 INFO mapred.JobClient: Running job: job_200902251718_0002 09/02/25 19:54:34 INFO mapred.JobClient: map 0% reduce 0% 09/02/25 19:54:46 INFO mapred.JobClient: map 2% reduce 0% .. .. 09/02/25 19:55:58 INFO mapred.JobClient: Job complete: job_200902251718_0002 09/02/25 19:55:58 INFO mapred.JobClient: Counters: 17 09/02/25 19:55:58 INFO mapred.JobClient: File Systems 09/02/25 19:55:58 INFO mapred.JobClient: HDFS bytes read=440015293 09/02/25 19:55:58 INFO mapred.JobClient: HDFS bytes written=11503892 09/02/25 19:55:58 INFO mapred.JobClient: Local bytes read=44472886 09/02/25 19:55:58 INFO mapred.JobClient: Local bytes written=57919061 09/02/25 19:55:58 INFO mapred.JobClient: Job Counters
문제 해결 JAVA 설정 JAVA_HOME 설정은 꼭 hadoop-env.sh에 설정해 주셔야 합니다. 무심코 ~/.bashrc 나 ~/.bash_profile 에만 설정하는 경우도 있는데, 그러면 동작 안함 WARN fs.FileSystem: "master:9000" is a deprecated filesystem name. Use "hdfs://master:9000/" instead. core-site.xml에 fs.default.name를 설정하실때 앞에 "hdfs://"를 붙이지 않은경우에 발생 slave 연결 확인(정상동작시) $ ./slaves.sh uname –a 192.168.0.101: Linux slave-02 2.6.18-53.1.4.el5vm #1 SMP Mon Mar 31 17:40:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux 192.168.0.102: Linux slave-01 2.6.18-53.1.4.el5vm #1 SMP Mon Mar 31 17:40:06 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux root 계정으로 master 가 동작하지 않는다면 퍼미션 문제로 hadoop dfs 실행시 문제가 생긴다 master 는 root 계정으로 실행되어야한다. 방화벽 문제로 정상 작동 하지 않을 시에는 ufw disable 로 방화벽을 끈다. 혹은 필요 포트만 허용한다.