centOs7 설치가 완료 되었다는 것을 가정하고 시작하겠습니다.


서버 접속시 root 계정으로 접속하도록 하겠습니다.




접속 후 기존 자바 jdk 를 삭제하고 새로 깔아줍니다.

디폴트로 Open JDK 로 해도 된다고 하지만 많은 블로그에 올라와있는 내용이 Oracle JDK 를 예시로 사용하고 있어 일단 나도 똫같이 했다.

참고로, 두 JDK 스펙은 Open JDK 6버전 까지는 성능상의 이슈가 있었다고 한다. 7 이후로는 둘다 비슷하다고 합니다.




자바 설치 유무를 확인합니다.


yum list installed java*

또는

rpm -qa | grep java


자바가 설치되어 있다면 삭제하여 줍니다.


자바 삭제 명령어

yum remove [삭제할 패키지]

ex) yum remove java-1.7.0.-openjdk.x86_64


삭제 후 자바를 새로 설치하기 위해 자신의 리눅스가 몇 비트인지 확인합니다.

getconf LONG_BIT


자신의 비트에 맞게 오라클 jdk 를 다운받아 줍니다.

저는 64bit 이고 자바 1.8 버전을 다운받았습니다.


압축을 풀어 /usr/local 경로로 보냅니다.

mv jdk1.8.0_201 /usr/local


작업을 편리하게 하기 위해 심볼릭 링크를 걸어줍니다.


ln -s jdk1.8.0_201 java


ll 명령어를 사용시 다음과 같이 설정된 모습을 확인할 수 있습니다.




심볼릭 링크란?

 윈도우의 바로가기와 비슷한 개념과 비슷합니다. 링크로 연결하여 원본 파일을 직접 사용하는 것과 같은 효과를 내도록 합니다.


어디서든지 사용할 수 있도록 환경 변수에 등록합니다.


vi /etc/profile


맨 마지막에 다음과 같이 내용을 추가 합니다.


export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

export CLASSPATH="."


설정을 적용하기 위해 아래와 같은 명령어를 입력해 줍니다.

source /etc/profile


/etc/profile과 /.profile 파일은 사용자가 로그인했을때 스크립트가 적용이 되기때문에

수정된 내용을 바로 적용하기 위해 source 명령어를 사용합니다.


자바 설치 및 설정이 잘 되었는지 확인합니다.

java -version



 클러스터링 할 서버 증설


서버를 닫고 VirtualBox 에서 서버 우클릭 후 복제


모든 네트워크 카드의 MAC 주소 초기화를 꼭 체크해줍니다.



완전한 복제를 선택하여 복제(총 4개의 서버를 가지고 할 것입니다)





복제 완료 후 각각의 서버 네트워크를 설정해 주어야합니다.

설정 -> 네트워크를 어댑터에 브리지로 설정 하여 주시고 이름은 각자 사용하는 네트워크에 맞게 설정해 주세요




서버 접속은 root 계정으로 접속.


접속 후 모든 서버의 CentOS 방화벽은 꺼두도록 합시다. (클러스터링 환경이기 때문에 서로 통신을 하기 위함.)


방화벽 끄기

systemctl stop firewalld

systemctl disable firewalld


방화벽 상태 확인

firewall-cmd --state


각각의 계정에 호스트 네임을 지정해 줍니다.

vi /etc/hostname




저는 hadoop01, hadoop02, hadoop03, hadoop04 로 변경하여 주었습니다.


* 설정 방법 예시(1번 서버)



다음으로는 hosts 파일에 클러스터링할 서버 정보를 추가해줍니다.

vi /etc/hosts


기존에 있는 내용은 전부 지우고 아래과 같이 작성합니다.(예시)


IP 주소 확인 방법

ip addr


다른 서버도 마찬가지로 설정한 다음 재시작 해줍니다.


재시작


reboot



* ssh 접속 설정


ssh-keygen으로 공개키/비밀키 한 쌍을 생성하고, 공개키 내용을 접속할 서버에 저장하면 해당 서버에 비밀번호 없이 ssh 접속이 가능합니다.(일단 방화벽이 꺼져 있어야 함)


모든 서버에 ssh 키젠을 생성합니다.


ssh-keygen -t rsa


엔터 3번


~/.ssh/id_rsa.pub 에 공개키가 저장 됩니다.

이 공개키의 내용을 접속할 서버의 ~/.ssh/authorized_keys 에 추가 할 것입니다.


접속할 서버의 authorized_keys 파일에 공개키 추가.

ssh-copy-id [계정]@[접속할 서버 ip]

예시) ssh-copy-id root@hadoop02


ssh를 통해 접속을 확인

ssh [계정]@[접속할 서버 ip]


암호를 묻지 않는다면 올바르게 설정이 된 것입니다.


각각 모든 서버에 서로 전부 되도록 설정하여 줍니다.(자기자신의 서버에도 적용)


* 하둡 설치


hadoop01(master) 서버에서 설치 후 나머지 hadoop02, hadoop03, hadoop04 서버(slave)에 배포 할 예정입니다.


하둡 공식 홈페이지 : https://hadoop.apache.org/


Version : 2.6.5



다운로드 후 압축을 풀고 /usr/local 위치로 파일을 옮긴다음 hadoop으로 심볼릭 링크를 생성하여 줍니다.




hadoop 명령어를 사용하기 위해 /etc/profile 에 환경 변수를 다음과 같이 수정합니다.



이 후 하둡의 실행 환경 변수를 설정해 주어야 합니다.


/usr/local/hadoop/etc/hadoop/ 하둡의 설정파일의 경로로 찾아갑니다.


hadoop-env.sh 수정

자바 패스가 디폴트로 저장되어 있던 것을 다음과 같이 수정



hadoop-env.sh 맨위에는 다음과 같이 환경 변수를 추가해 줍니다.



yarn-env.sh 수정



slaves 파일 수정

기존 내용을 삭제하고 Data node 들의 서버를 지정해줍니다.



core-site.xml 수정

property 내용을 적어줍니다.

tmp 파일이 없기 때문에 /usr/local/hadoop/ 파일 위치에 tmp 파일을 만들어줍니다.

mkdir /usr/local/hadoop/tmp



hdfs-site.xml 수정

hadoop01를 namenode로 지정하고 hadoop02를 보조노드로 지정했습니다.




mapred-site.xml 수정

기본적으로는 mapred-site.xml 파일이 없습니다. mapred-site.xml.template을 복사하여 만든 후 수정합니다.


cp mapred-site.xml.template mapred-site.xml




yarn-site.xml 수정




* Slave 들에게 배포하기


>> slave 에 hadoop-2.6.5 파일을 배포합니다.

scp -r hadoop-2.6.5 root@hadoop02:/usr/local

scp -r hadoop-2.6.5 root@hadoop03:/usr/local

scp -r hadoop-2.6.5 root@hadoop04:/usr/local


>> 각 서버에서 하둡 디렉토리의 심볼릭 링크를 생성합니다.

ln -s /usr/local/hadoop-2.6.5 hadoop


>> profile 전송

scp /etc/profile root@hadoop02:/etc/profile

scp /etc/profile root@hadoop03:/etc/profile

scp /etc/profile root@hadoop04:/etc/profile


slave 노드들에서 자바와 하둡이 잘 설치되었는지 확인합니다.


java -version

hadoop version


* hadoop 실행


환경 설정 및 설치가 완료되었으니 이제 hadoop 서버를 실행시켜 봅니다.

우선 실행전에 포맷을 진행합니다.


hadoop namenode -format


~$HADOOP_HOME/sbin/start-all.sh 으로 실행시켜 줍니다.( 중지는 stop-all.sh )


실행 화면입니다.


하둡 현황 파악 : localhost:8088

Active Nodes : 3 ( 3개의 slave 존재 확인 )



HDFS 확인 : localhost:50070

Live Nodes : 3 ( 3개의 slave 존재 확인 )




jps 명령어를 통해 동작이 되고 있는지 확인 가능하다.




JPS(Java Virtual Machine Process Status Tool) 명령어

jvm 위에서 돌아가는 프로세스를 확인할 수 있다.



* 시행착오

리눅스 환경에 익숙하지 않고 하둡에 처음 접하는거라 많은 삽질의 시간을 가졌습니다.


삽질에 관한 후기도 남기겠습니다.


첫번째, 가상 네트워크 환경을 만드는 곳에서 애좀 먹었습니다.

두번째, ssh 인증 문제로 hadoop01 에서만 공개키를 전달하고 다른 서버에서 hadoop01로 공개키를 전달하지 않아서 문제가 발생했었습니다.

세번째, 데이터 노드에서 네임노드로 connection 이 안되는 로그가 떠서 삽질을 했었는데 방화벽 상태를 보니 돌아가고 있었습니다. 

(ㅡㅡ.. 언제부터 돌아가고 있었냐..)


오류가 발생하면 일단 stop-all.sh 로 작동을 멈추고 jps 로 프로세스가 켜져있는지 확인 한 후 켜져있을 경우 프로세스를 킬 해줍니다.

그리고 모든서버에서 logs 폴더안에 있는 log를 띄운다음 다시 start-all.sh 을 이용하여 켜준다음 에러 로그를 파악해야합니다.


로그 확인 방법

tail -10000f [log 파일명]

예시) tail -10000f hadoop-root-namenode-hadoop01.log










+ Recent posts