Link
10-23 02:25
«   2020/10   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
133
Total
1,082,150
관리 메뉴

꿈 많은 사람의 이야기

centos7에 하둡 설치 - 하둡 3단계 본문

빅데이터

centos7에 하둡 설치 - 하둡 3단계

이수진의 블로그 이수진의 블로그 2017. 10. 25. 13:00

안녕하세요~

지난 글까지 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                : 데이터노드 설정 

[root@namenode 바탕화면]# cd /usr/local/hadoop/conf

로 들어가서 이제 설정을 해줍니다

각각의 파일을 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 하시면 됩니다

 

정리하는 게 만만치 않네요

저도 정말 힘들게 설치했었습니다. 스트레스 받아서 죽는 줄 ㅎㅎㅎㅎ

이대로 하면 되긴 되는데 혹시라도 안되시면 ㅠㅠ 눈물

꼭 성공하시길 바랍니다

다음 포스팅에선 간단한 예제를 실행해볼게요

14 Comments
댓글쓰기 폼