안녕하세요~
지난 글까지 centos7을 설치하고, vmware에 복사하는 일을 마쳤습니다.
이제 하둡을 본격적으로 설치할 것입니다.
먼저 주의사항 및 당부사항을 말씀드릴게요
저는 하둡을 처음에 책으로 공부했습니다.
근데 설치가 중간중간 설명이 없어서 구글링으로 했습니다.
그래도 잘 되질 않았습니다. 진행이 안되었어요.
나중에서야 알게 되었지만 이 블로그, 저 블로그 보면서 해서 설정이 꼬였었습니다.
또한, 시간이 오래 걸리다 보니 잠은 자야겠고 출근은 해야겠고 그래서 껐다가 다음날에 다시 하고 이러다 보니까 좀 꼬였어요.
하둡은 시행착오가 계속 있어요. 물론 1번에 되면 좋기야 하겠지만요!
그래서 시간이 부족하신 분들은 2파트로 나누어서 진행하면 편하실 겁니다
1. java 설치 및 ssh 설정
2. 하둡 설치 및 설정
이렇게요.
저는 3~4일 내내 회사 끝내고 낑낑대며 붙잡고 있었습니다.
아니 똑같이 했는데 오류도 안뜨고 왜 안되는거지? 계속 그랬었어요.
그래서 한 번 엎었었습니다.
저는 따지고 보면 2일 정도 걸렸네요(컴퓨터 성능이 부족해서 계속 끊기고 멈추고 그래서 더 걸렸네요 ㅠㅠ)
두 번째 당부사항은 vmware 내부에서 네트워크 꼭 확인해보세요.
내가 어제 할 때는 분명히 인터넷 연결 잘 되었었는데 갑자기 오늘 켜보니 인터넷이 안되는 뭐 그런 일도 있었습니다
그것도 모르고 시간 허비를 계속했었네요
ssh 연결이 인터넷 ip가 연결되어야 하기 때문에 그렇습니다.
세 번째 당부사항은 오류 파일을 꼭 확인해보세요
기본적인 오류가 나는 부분은 제가 써놓긴 할 것입니다(대부분 오타랑, 방화벽 문제입니다)
하지만 그 외 적인 부분은 logs 디렉터리에 ~~.log 파일을 꼭 확인하셔야 합니다.
namenode에서의 log는 namenode.log 로 되어 있을 거고요.
datenode에서의 log는 datanode.log 이런 식으로 되어 있습니다.
각 서버마다 로그 파일이 다르니 꼭 확인해 보시면서 진행하셔야 돼요.
네 번째 당부사항은 띄어쓰기, 대소문자 구별 꼭 주의하세요!
저 같은 경우는 Y/N을 누르라고 하는 창이 나오면 y를 눌렀거든요.
근데 왜 안되지? 이걸로 몇 시간을 허비했었는데요
알고 보니 대문자 y를 안 해서 즉, Y를 눌러야 되더라고요.
또한, 글마다 다른데 -format 을 쓰면 어떤 글이나 책은 - format 으로 보입니다.(문자체 때문에요)
즉 띄어쓰기 문제죠. 이런 띄어쓰기 문제도 상당히 골치 아파요. 꼭! 잘 보셔야 합니다!
그럼 이제 설치를 해보죠!
사진은 일부러 안 썼습니다.
처음에는 캡처를 다 했는데요 보기도 불편해서 등등 그냥 이대로 따라 하는게 편할 것 같아서요!
저는 하둡을 아래와 같이 설치 할 것입니다.
4대의 서버로 진행합니다
hadoop01 : namenode
hadoop02 : snamenode, datanode01
hadoop03 : datanode02
hadoop04 : datanode03
지난 2번의 포스팅으로 서버가 hadoop01~04까지 생성되었습니다. 그 4대의 서버를 각각 namenode, datanode01~03(datanode01은 snamenode 이기도 합니다)으로 이름을 정했습니다. 정확히 말하면 hostname입니다.
저는 하둡의 설치 모드 중 Full distributed 모드로 진행했습니다.
3가지 설치 모드가 있는데요
1. Standalone : 단일 노드 실행합니다. 테스트 및 디버깅 용도라고 하네요
2. Pseudo distributed : 단일 노드에서 클러스터를 구성한다고 합니다.
3. Full distributed : 두 대 이상의 노드를 클러스터로 묶어서 진행합니다.
저는 여기서 3번으로 진행한 것입니다~
그리고 하둡 버전은 1.2.1 버전입니다. 2 버전은 나중에 포스팅할 겁니다. 2버전을 원하시면 다른 블로그를 찾아보셔요~
또한, hadoop 아이디로 진행하지 않고 root 아이디로 진행했습니다.
이상하게 이건 해결을 못했습니다. chmod, chown, sudoers 등 모든 것을 다 해봤는데도 권한이 진행이 안되었어요
이제 차례대로 진행해봐요~
1. JAVA 설치 (각 서버마다 진행합니다)
먼저 각 서버마다 자바를 새로 설치합니다.
저는 jdk 8을 기준으로 진행했어요
root@localhost ~ # rpm -qa | grep java
를 치시면 tzdata-java, javapackages-tools, java-1.7.0-openjdk 2개, python-javapackages 가 나올 겁니다. 5개가 나올 거에요
이것들을 삭제해줍니다.
yum remove tzdata-java-2014g-1.el7.noarch
yum remove javapackages-tools-3.4.1-6.el7_0.noarch
yum remove python-javapackages-3.4.1-6.el7_0.noarch
뒤에 나와 있는 버전은 다를 수도 있는데요. 각자 맞는 버전으로 삭제하시면 됩니다~
다 삭제되셨으면
rpm -qa | grep java
를 치시면 아무것도 나오지 않을 겁니다.
이제 자바를 다시 설치해봐요
먼저 자바를 설치하기 위해 오라클 사이트로 이동합니다
그리고 위 사진처럼 탭을 이동해서 들어가주세요~
지금은 java9 버전이 나와있습니다. 근데 자바 9로 하니까 뭐 계속 안돼서 안정적인 8로 했습니다
Java SE 8 update를 클릭해서 들어갑니다
들어가면 맨 위에는 java9가 나올거예요~ 스크롤을 좀 내리시면 Java SE 8u144가 있습니다
여기서 JDK를 눌러서 이동합니다
동의하시는 부분이 있는데요
accept를 누르시고 Linux x64 탭에 tar.gz 파일을 다운 받습니다.
자 이렇게 다운이 받아졌어요~
다음으로 아래처럼 진행합니다.
[root@localhost 다운로드]# tar zxvf jdk-7u67-linux-x64.tar.gz -> 압축을 풀어줍니다
[root@localhost 다운로드]# mv jdk1.7.0_67/ /usr/local/jdk -> /usr/local/jdk 라는 곳으로 이동시켜줍니다~
[root@localhost ~]# vi /etc/profile -> vi 에디터를 이용해 /etc/에 있는 profile을 설정해주어야 해요~
아래 처럼 설정해줍니다.
export JAVA_HOME=/usr/local/jdkexport
HADOOP_HOME=/usr/local/hadoopexport
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
[root@localhost ~]# source /etc/profile -> 변경사항 적용
[root@localhost ~]# java -version -> 치시면 아래 사진 처럼 나오게 됩니다
자 이제 자바 설치는 끝났어요~
2. SSH 설정
먼저 각 서버의 ip를 알아보세요~
각 서버에서 ifconfig를 치셔서 ip를 적어두세요
저 같은 경우는 아래와 같이 되었습니다.
hadoop01 - 192.168.245.128
hadoop02 - 192.168.245.134
hadoop03 - 192.168.245.135
hadoop04 - 192.168.245.136
그리고 나서 vi /etc/hosts 를 설정해줍니다!(각 서버마다 진행합니다)
[root@localhost ~]# source /etc/hosts
아래 사진 처럼요!
그리고 각 서버의 hostname을 설정해줍니다.(각 서버마다 진행합니다)
hadoop01에는 namenode, hadoop02에서는 datanode01 이렇게요
[root@localhost ~]# vi /etc/hostname
namenode
[root@localhost ~]# vi /etc/hostname
datanode01
[root@localhost ~]# vi /etc/hostname
datanode02
[root@localhost ~]# vi /etc/hostname
datanode03
그리고 설정이 잘 되었는지 확인해 보시려면 각 서버에서 hostname을 치시면 설정한 hostname이 나오게 됩니다.
이제 ssh 설정에 들어갑니다.
먼저 ssh 인증키를 생성해야 합니다. (각 서버마다 진행합니다)
하둡은 ssh 프로토콜을 이용하여 하둡 클러스터간에 내부 통신을 진행합니다~ 그래서 패스워드 인증 과정 없이 원활한 ssh 통신이 되어야 하기 때문에 ssh 공개키를 설정하고 전 서버에 통합 공개키를 복사해서 통신을 합니다.
먼저 각 서버에 인증키를 생성합니다.
[root@namenode /]# ssh-keygen -t
rsaGenerating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 엔터!
Enter passphrase (empty for no passphrase): 엔터!
Enter same passphrase again: 엔터!
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
[root@localhost /]# cd /root/.ssh
[root@localhost .ssh]# ls
id_rsa id_rsa.pub
이렇게 나오면 됩니다!
이제 ssh 접속키 설정을 진행합니다. 이 작업은 namenode에서만 진행합니다!
[root@namenode .ssh]# cp id_rsa.pub authorized_keys
[root@namenode .ssh]# ssh root@datanode01 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keysroot@snamenode's password: snamenode 패스워드
[root@namenode .ssh]# ssh root@datanode02 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keysroot@snamenode's password: datanode01 패스워드
[root@namenode .ssh]# ssh root@datanode03 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keysroot@snamenode's password: datanode02 패스워드
여기서 namenode에서 만들어진 authorized_keys를 vi 에디터로 들어갑니다.
그리고 root@datanode01키를 복사해 root@snamenode 부분을 변경합니다. 왜냐하면 snamenode와 datanode01은 같은 ip 이기 때문입니다.
ssh-rsa AAAAB3NzaC1yc2EAAA... root@namenode
ssh-rsa AAAAB3NzaC1yc2EAAA... root@snamenode -> 하나 추가해줍니다!
ssh-rsa AAAAB3NzaC1yc2EAAA... root@datanode01
ssh-rsa AAAAB3NzaC1yc2EAAA... root@datanode02
ssh-rsa AAAAB3NzaC1yc2EAAA... root@datanode03
이렇게 하면 모든 서버의 공개키가 현재 서버의 ~/.ssh/authorized_keys에 모이게 됩니다
[root@namenode .ssh]# cat ~/.ssh/authorized_keys를 해보면 확인할 수 있습니다!
이제 통합된 키를 각각의 서버에 보내줍니다!
[root@namenode .ssh]# scp -rp authorized_keys root@datanode01:~/.ssh/authorized_keys root@snamenode's password: snamenode 패스워드
authorized_keys 100% 1585 1.6KB/s 00:00
[root@namenode .ssh]# scp -rp authorized_keys root@datanode02:~/.ssh/authorized_keys root@snamenode's password: datanode01 패스워드
authorized_keys 100% 1585 1.6KB/s 00:00
[root@namenode .ssh]# scp -rp authorized_keys root@datanode03:~/.ssh/authorized_keys root@snamenode's password: datanode02 패스워드
authorized_keys 100% 1585 1.6KB/s 00:00
다 되었습니다!
이렇게 하면 모든 서버에 이제 패스워드를 치지 않고 바로 접속할 수 있습니다.
[root@namenode .ssh]# ssh datanode01 date
를 치면 date가 패스워드를 물어보지 않고 나오게 되는데 그럼 된 것입니다!
정리하려니까 힘드네요 ㅠㅠㅠ 다음 단계로 가봐요!
3. 방화벽 설정 (각 서버에서 진행합니다)
방화벽 설정을 안 해주시면 나중에 jps 명령어를 쳤을 때 datanode가 나오지 않고 이런 현상이 발생할 수 있습니다
포트를 하나하나 열어주는 방법도 있긴 합니다.
근데 전 실제 업무용이 아니라 취미? 로써 공부해보는 것이기 때문에(나중에 이쪽으로 취업하면 좋겠지만 ㅠㅠ) 방화벽을 그냥 종료하였습니다. 이렇게 하면 보안에 안 좋아요.
iptable 서비스 종료
[root@namenode .ssh]# sudo service iptables stop
[root@namenode .ssh]# sudo chkconfig iptables off
firewalld 서비스 종료
[root@namenode .ssh]# systemctl stop firewalld
[root@namenode .ssh]# systemctl disable firewalld
이렇게 하면 방화벽이 모두 해제가 됩니다!
이제 전처리 작업은 끝났습니다. 메인인 하둡을 설치해보죠!
4. 하둡 다운 및 설정(namenode에서만 진행합니다) 꼭 알아두세요! 각 서버에서 하는 게 아닙니다! 각 서버에서 진행하는 것은 주황색으로 중간중간 글자 써놓았어요
하둡을 위 사진 처럼 받습니다
서두에서 말씀드린 것 처럼 전 1.2.1 버전을 다운 받았어요
그리고 아래 처럼 진행합니다
[root@namenode 바탕화면]# tar zxvf hadoop-1.2.1.tar.gz
[root@namenode 바탕화면]# mv hadoop-1.2.1 /usr/local/hadoop
directory 생성 ( 각 서버 모두 생성합니다 )
[root@namenode 바탕화면]# mkdir -p /home/hadoop/hdfs/data
[root@namenode 바탕화면]# mkdir -p /home/hadoop/hdfs/temp
[root@namenode 바탕화면]# mkdir -p /home/hadoop/hdfs/name
그리고 이제 하둡 환경설정을 진행합니다.
이 환경 설정은 namenode에서만 진행하고 이후에 다른 서버로 배포할 것입니다.
설정할 파일은 6개입니다
hadoop-env.sh : 하둡 실행 시 필요한 쉘스크립 환경 변수
core-site.xml : hdfs, 맵 리듀스 환경 정보
hdfs-site.xml : HDFS 환경 정보
mapred-site.xml : 맵리듀스 환경 정보
masters : 보조 네임노드(SecondaryNode) 설정
slaves : 데이터노드 설정
로 들어가서 이제 설정을 해줍니다
각각의 파일을 vi ./hadoop-env.sh 처럼 들어가서 진행하면 됩니다.
먼저 가장 간단한 masters, slaves 파일부터 진행해보죠
vi masters
snamenode
vi slaves
datanode01
datanode02
datanode03
이와 같이 내용을 작성해주면 됩니다.
그리고 core-site.xml
1
2
3
4
5
6
7
8
9
10
11 |
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdfs/temp</value>
</property>
</configuration>
|
cs |
내용을 추가해줍니다.
그리고 hadoop-env.sh
vi hadoop-env.sh
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME_WARN_SUPPRESS=1
Hadoop_HOME_WARN ~ 은 HADOOP_HOME 충돌인가 중복인가 같은 에러가 나옵니다. 그걸 방지하기 위한 코드에요
위와 같이 작성을 해줍니다.
그리고 hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.http.address</name>
<value>namenode:50070</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>datanode01:50090</value>
</property> </configuration> |
cs |
내용을 추가해줍니다
그리고 mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/home/hadoop/hdfs/mapred</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/home/hadoop/hdfs/mapred</value>
</property>
</configuration> |
cs |
이렇게 설정 파일이 다 되었습니다 ㅠㅠㅠ
힘드네요
이제 이 설정 파일을 압축해서 각 slaves에 배포합니다!
[root@namenode local]# cd /usr/local
[root@namenode local]# tar zcvf hadoop.tar.gz ./hadoop
압축을 하고 아래 처럼 보냅니다!
[root@namenode local]# scp -rp hadoop.tar.gz datanode01:/usr/localhadoop.tar.gz 100% 61MB 60.9MB/s 00:00
[root@namenode local]# scp -rp hadoop.tar.gz datanode02:/usr/localhadoop.tar.gz 100% 61MB 60.9MB/s 00:00
[root@namenode local]# scp -rp hadoop.tar.gz datanode03:/usr/localhadoop.tar.gz 100% 61MB 60.9MB/s 00:00
이제 각 서버에서 압축을 풀어줍니다
[root@datanode01 local]# cd /usr/local
[root@datanode01 local]# tar zxvf hadoop.tar.gz
[root@datanode02 local]# cd /usr/local
[root@datanode02 local]# tar zxvf hadoop.tar.gz
[root@datanode03 local]# cd /usr/local
[root@datanode03 local]# tar zxvf hadoop.tar.gz
이제 배포까지 완료되었습니다
4. 하둡 실행 (namenode에서만 진행합니다)
이제 하둡을 실행해보죠
먼저 네임노드를 초기화합니다.
여기서 주의 사항! 초기화 시 Y/N을 물어보는데요. 꼭 대문자 Y로 입력하셔야 해요!
전 소문자 y로 눌렀다가 ㅠㅠ 왜 안되지 이러면서 몇 시간을 날렸네요
[root@namenode hadoop]# ./bin/hadoop namenode -format
경로 확인 잘 해주세요! 지금 hadoop 폴더입니다. /usr/local/hadoop 이요
실행하면 대충 이러한 메세지가 나옵니다
14/10/08 15:36:11 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/home/hadoop/hdfs/temp/dfs/name/current/edits14/10/08 15:36:11 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/home/hadoop/hdfs/temp/dfs/name/current/edits14/10/08 15:36:11
INFO common.Storage: Storage directory /home/hadoop/hdfs/temp/dfs/name has been successfully formatted.14/10/08 15:36:11 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************SHUTDOWN_MSG:
Shutting down NameNode at namenode
그러면 초기화가 된거에요!
그리고 실행합니다
[root@namenode hadoop]# ./bin/start-all.sh
실행하면 이러한 메세지가 나와요
usr/local/hadoop/libexec/../logs/hadoop-root-namenode-namenode.outdatanode03: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-datanode-datanode03.outdatanode02: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-datanode-datanode02.outdatanode01: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-datanode-datanode01.outsnamenode: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-secondarynamenode-datanode01.outstarting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-jobtracker-namenode.outdatanode01: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-tasktracker-datanode01.out
이제 잘 되었나 볼까요?
저는 여기가 계속 안돼서 ㅠㅠ 미치는 줄 알았어요. 이 마지막 부분이 다 떠야 합니다.
각 서버에서 jps 명령어를 칩니다!
만약 jps 명령어를 쳤는데 알 수 없는 명령어라고 나오면 다음과 같이 하시면 돼요
source /etc/profile
즉 자바를 실행시켜주는 겁니다
각 서버에서 jps를 치면 아래처럼 나오게 됩니다
[root@namenode hadoop]# jps
숫자 Jps
숫자 NameNode
숫자 JobTracker
[root@datanode01 hadoop]# jps
숫자 SecondaryNameNode
숫자 Jps
숫자 TaskTracker
숫자 DataNode
[root@datanode02 hadoop]# jps
숫자 Jps
숫자 TaskTracker
숫자 DataNode
[root@datanode03 hadoop]# jps
숫자 Jps
숫자 TaskTracker
숫자 DataNode
숫자는 pc마다 다릅니다!
namenode에선 namenode가 나와야 합니다
datanode01에선 SecondaryNameNode, DataNode가 나와야 합니다.
datanode02, 03에선 DataNode가 나와야 합니다.
이게 만약 나오지 않는다면?
각각에 hadoop/logs 디렉터리에 들어가세요
그리고 namenode는 namenode.logs를 확인해보세요
datanode는 datanode.logs를 확인해보세요
에러를 찾아보시면 됩니다.
대부분 방화벽 문제나, 오타 문제에요
오타 없는지 꼭 잘 보세요!
그리고 설정을 변경하고 다시 실행하시면
stop-all.sh 을 입력하셔서 하둡을 정지시키고
위에 써놨던 포맷 명령어를 통해 포맷하시고 다시 start-all.sh 하시면 됩니다
정리하는 게 만만치 않네요
저도 정말 힘들게 설치했었습니다. 스트레스 받아서 죽는 줄 ㅎㅎㅎㅎ
이대로 하면 되긴 되는데 혹시라도 안되시면 ㅠㅠ 눈물
꼭 성공하시길 바랍니다
다음 포스팅에선 간단한 예제를 실행해볼게요
'빅데이터' 카테고리의 다른 글
ELK 스택 설치 - 키바나(kibana) 설치 및 elasticsearch와 연동하기 (0) | 2018.11.11 |
---|---|
ELK 스택 설치 - 엘라스틱서치(elasticsearch) 설치하기 (0) | 2018.11.09 |
도커란? 그리고 우분투(ubuntu)에 도커(docker)와 mysql 설치하기 (0) | 2018.11.08 |
vmware centos7 복사(vmware 복사) - 하둡 2단계 (0) | 2017.10.23 |
윈도우10(windows 10) vmware centos7 설치 - 하둡 1단계 (0) | 2017.10.23 |