티스토리 뷰
0. 사용 환경
- ubuntu 서버용 14.10 여러대 (ubuntu 14.04 LTS를 추천한다.)
- Java 1.8.0_40 (2015년 4월 24일 기준 최신버전이다.)
- Hadoop 2.6.0 (최신버전은 2015년 4월 22일에 나온 2.7.0 버전이다.)
- NFS와 NIS를 사용하여 10대의 노드들이 /home 디렉터리와 사용자 계정을 공유중
* NFS와 NIS를 사용하면 간편하겠지만, 꼭 그럴 필요는 없다.
1. 설치 개념 설명
- 하둡은 자바를 기반으로 만들어진 framework 이다. 따라서 자바가 반드시 설치되어 있어야 한다.
- 하둡은 한 대의 마스터 노드와 여러대의 슬레이브 노드로 구성된다. 마스터와 슬레이브를 한 대의 노드(=컴퓨터)에 설치해도 작동은 한다.
- 하둡은 파일의 저장 및 관리를 담당하는 HDFS(Hadoop File System)와 실제로 map & reduce job을 실행하는 Yarn으로 나눌 수 있다. 실제로도 둘은 각각 따로 실행 및 종료 된다.
- 이 글에서는 SSH Key 등록, Java 설치, 하둡 설치 및 설정, 하둡 실행 및 테스트 등 기초부터 실제 사용까지 상세히 다룰 것이다.
- 질문과 오류 지적은 언제든지 환영한다.
* NFS와 NIS 설정 방법은 아래 링크를 참조.
NFS : http://www.server-world.info/en/note?os=Ubuntu_12.04&p=nfs
NIS : http://www.server-world.info/en/note?os=Ubuntu_12.04&p=nis
2. SSH Key 등록
- 한 노드에서 다른 노드로 접속할 때 비밀번호 없이 바로 로그인을 할 수 있도록 SSH Key라는 것을 생성 후 등록 해야 한다.
- 하둡을 실행시킬 때 모든 노드에서 로그인을 한 뒤 각 노드에서 하둡을 실행하게 된다. 이 때 일일이 비밀번호를 치고 로그인을 할 수는 없기 때문에 SSH Key 등록 과정을 반드시 해주어야 한다.
- 단일 노드에서 설치를 할 경우에는 필요가 없는 과정이다.
- http://opentutorials.org/module/432/3742 에 정말 이해도 쉽고 따라하기 좋게 설명이 되어있으며, 여기서는 이를 참고하여 간략히 과정을 설명하겠다.
(1) 본인 계정의 home 디렉터리에서 ssh-keygen -t rsa 명령어로 키를 생성한다.
(2) 여러가지 입력할 것들이 나오는데, 그냥 엔터를 몇 번 쳐주면 default로 설정된다.
(3) cd .ssh 명령어로 .ssh 디렉터리에 들어간다.
(4) ls -al을 쳐서 권한이 다음과 같이 설정되었는지 확인한다.
drwx------ 2 inthound inthound 4096 Apr 9 16:34 ./
drwxr-xr-x 5 inthound inthound 4096 Apr 16 21:19 ../
-rw-r--r-- 1 inthound inthound 1985 Apr 9 16:40 authorized_keys
-rw------- 1 inthound inthound 1675 Apr 24 10:07 id_rsa
-rw-r--r-- 1 inthound inthound 397 Apr 24 10:07 id_rsa.pub
-rw-r--r-- 1 inthound inthound 4810 Apr 16 21:20 known_hosts
잘 모르겠다면 그냥 다음과 같이 명령어를 쳐준다.
* known_hosts 파일이 없다면 touch known_hosts 로 파일을 만들어준다.
* SSH는 권한 설정이 매우 중요하다. 여기서 대부분의 오류가 발생한다.
(5) scp id_rsa.pub 아이디@서버이름:id_rsa.pub 명령어로 id_rsa.pub 파일을 보내고자 하는 슬레이브 노드들에 복사해준다.
(6) 해당 노드에 접속해서 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 명령어로 공개키를 등록해준다.
* NFS를 사용중인 경우는 현재 노드에서 바로 cat ~/id_rsa.pub >> ~/.ssh/authorized_keys 명령을 한번만 해주면 모든 노드에 적용이 되므로 편하다.
(7) ssh 아이디@서버이름 으로 접속할 때 비밀번호가 없이 접속이 되면 성공.
3. Java 설치
- 자바가 이미 설치되어 있는 경우에는 Java 경로를 PATH에 등록하는 것만 따라하면 된다.
(1) http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 Accept License Agreement에 체크를 하고 해당 리눅스 버전에 맞는 Java SE Development Kit을 다운받는다. 아마 jdk-8u45-linux-x64.tar.gz 이라고 써진 것을 다운 받으면 될 것이다.
(2) WinSCP 등의 파일 전송 프로그램을 사용하여 해당 파일을 각 서버의 본인 계정으 복사해준다.
* NFS를 사용중인 경우는 역시 하나의 노드에 자바를 설치하면 나머지 노드들이 자바를 쓸 수 있어서 편리하다.
(3) tar -xvzf jdk-8u45-linux-x64.tar.gz 명령어로 압축을 풀어준다.
(4) mv jdk1.8.0_40 java 명령어로 디렉터리 이름을 java로 바꿔준다.
(5) vi .bashrc 명령어로 .bashrc 파일을 연 후 맨 하단에 다음을 입력한다.
############################################################
export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
* 위에 있는 # 부분은 해당 PATH가 자바 설정을 위한 것임을 나타내는 것이며, 주석처리되어있으므로 당연히 설정에는 영향을 미치지 않는다. 보기 싫다면 #부분을 모두 빼버려도 좋다.
(6) 저장 후 종료한 뒤, source .bashrc 명령어로 .bashrc를 적용시킨다.
(7) jps 를 쳤을 때 23190 Jps 처럼 나오면 성공. (숫자는 바뀌어도 상관 없다.)
* jps 명령어는 나중에 매우 자주 사용될 것이다.
* java -version 명령어로도 현재 설치된 자바의 버전을 알 수 있다. 1.8.0_40 버전이라고 뜨면 잘 설치된 것이다.
(8) 나머지 노드들에도 동일하게 설정을 해준다.
* 역시나 NFS를 사용할 경우 한 노드에서만 설정을 해도 나머지가 모두 적용된다.
4. 하둡 설치
(1) http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz 에서 하둡 2.6.0버전을 받은 후 WinSCP등을 통해 본인의 홈 디렉터리로 옮겨준다.
* 하둡의 다운로드 페이지는 http://hadoop.apache.org/#Download+Hadoop 이다.
(2) tar -xvzf hadoop-2.6.0.tar.gz 명령어로 압축을 풀어준다.
(3) mv hadoop-2.6.0 hadoop 명령어로 디렉터리 이름을 hadoop으로 바꿔준다.
(4) vi .bashrc 명령어로 .bashrc 파일을 연 후 맨 하단에 다음을 입력한다.
############################################################
export HADOOP_HOME=$HOME/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(5) source .bashrc 명령어로 .bashrc 파일의 변경 사항을 적용해준다.
(6) 홈 디렉터리에서 mkdir -p hadoop_tmp/hdfs/namenode 명령어와
(1) vi slave 로 파일을 연 후 마스터 노드와 슬레이브 노드를 다음과 같이 적는다.
export JAVA_HOME=${JAVA_HOME}
export HADOOP_PREFIX=${HADOOP_HOME}
** 추가: log파일 퍼미션 에러가 난다면
$ vi hadoop-env.sh
상단에 환경변수를 추가하고 디렉터리도 해당위치에 만들어준다.
export HADOOP_LOG_DIR={$HADOOP_HOME}/logs/hadoop/core
export HADOOP_ROOT_LOGGE=INFO,console
export HADOOP_PID_DIR=$HADOOP_LOG_DIR
export HADOOP_SECURITY_LOGGER=INFO,NullAppender
export HDFS_AUDIT_LOGGER=INFO,NullAppender
(3) core-site.xml에 다음을 작성한다.
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://서버1:9000/</value>
</property>
</configuration>
(4) hdfs-site.xml에 다음을 작성한다.
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:~/hadoop_tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:~/hadoop_tmp/hdfs/datanode</value>
</property>
</configuration>
(5) mapred-site.xml에 다음을 작성한다.
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(6) yarn-site.xml에 다음을 작성한다.
(7) 위에서 수정한 모든 파일들을 scp slave 아이디@서버2:~/hadoop/etc/hadoop 과 같은 명령어로 모든 노드에 복사해준다.
* 혹은 하둡 자체를 복사해줘도 된다.
scp -r hadoop 아이디@서버2:
scp -r hadoop 아이디@서버3:
...
(8) scp .bashrc 아이디@서버2:
scp .bashrc 아이디@서버3:
...
등으로 .bashrc 파일을 모두 뿌려준다.
* NFS를 사용할 경우, 이 과정을 해줄 필요가 없다.
6. 하둡 실행
- NFS를 사용하든 안 하든, 아래 과정은 마스터 노드에서만 하면 된다.
(1) hadoop namenode -format 명령어로 네임노드를 포멧한다.
(2) start-dfs.sh 명령어로 hdfs를 실행시킨다.
(3) 잠시 기다린 후 jps 명령어를 쳤을 때, 마스터 노드에서는
10690 NameNode
10873 DataNode
12060 Jps
11119 SecondaryNameNode
12060 Jps
과 같이 떠야 정상이다. 숫자는 다를 수 있다.
(4) start-yarn.sh 명령어로 yarn(map-reduce 프로그램)을 실행시킨다.
(5) 잠시 기다린 후 jps 명령어를 쳤을 때, 마스터노드에서는
10690 NameNode
11475 NodeManager
12060 Jps
11292 ResourceManager
11119 SecondaryNameNode
(6) 웹 브라우저 주소창에 서버1.univ.ac.kr:50070 을 쳤을 때, HDFS 상태를 알려주는 화면이 뜨며, live node 개수가 서버 총 개수과 같으면 HDFS는 정상이다.
(7) 웹 브라우저 주소창에 서버1.univ.ac.kr:8055 를 쳤을 때, Resource 상태를 알려주는 화면이 뜨며, active node 개수가 서버 총 개수과 같으면 Resource manager 또한 정상이다.
(8) 하둡을 끌 때는 stop-all.sh를 사용해서 끌 수 있으며,
(1) hdfs dfs -mkdir input 을 쳐서 input 디렉토리를 만든다.
(2) hdfs dfs -lsr 을 쳐서 input 디렉토리가 제대로 생성되었는지 확인한다.
(3) hdfs dfs -put ~/hadoop/etc/hadoop input 명령어로 input 디렉토리에 데이터로 사용할 hadoop 파일들을 업로드한다. 딱히 큰 의미가 있는 것은 아니며, 그냥 여러 파일들이 있으니까 쓰는거다. 본인이 직접 만든 data set을 사용해도 된다.
(4) hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar grep input/hadoop/ output 'dfs[a-z.]+'
(5) map과 reduce의 퍼센트가 조금씩 올라갈 것이다. http://서버1.univ.ac.kr:8055 에도 Job의 진행 경과를 살펴볼 수 있다.
(6) Job이 종료되면 hdfs dfs -lsr 명령어로 output 디렉토리가 제대로 생성되었는지 확인해본다.
(2) 하둡을 실행시켰는데 jps에서 제대로 뜨는게 별로 없다.
(3) 하둡이 안 되는데 뭐가 문제인지 모르겠다.
(4) jps 명령어가 안 먹는다.
(5) Input path error가 뜬다.
(6) Live node 설정이 제대로 안 되어 있다.
-> vi /etc/hosts 에서 127.0.0.1에 등록 되어 있는 본인 서버 이름을 없앤다.
(그냥 127.0.0.1 localhost 만 남아있게 설정해줌. 모든 slave 노드에 적용)
'공부 > Java' 카테고리의 다른 글
Java 면접 질문 예시 (0) | 2016.11.23 |
---|---|
하둡 2.7.1 설치(싱글 노드) - CentOS 7 (0) | 2016.11.23 |