IT Log
Hadoop 완전분산모드(Fully-Distributed) 본문
[이전 단계] CentOS 7 설치 : https://newly0513.tistory.com/92
[다음 단계] Hive 구성 : https://newly0513.tistory.com/147
시작하기에 앞서...
어느정도 리눅스 환경에 익숙하시거나 hadoop 구성이 처음이 아니신분이 본다는 가정하에 글을 작성하였습니다. ( 익숙하다.. 처음이 아니다.. 라는 기준이 애매하긴 합니다. ) 각각의 서버에서 필수로 해야하거나 개별적으로 다르게 작성해야하는 부분을 제외하고는 한 서버에서 구성할 수 있게 작성하였습니다.
리눅스에서 작업을 하게 되면 거의 사용하게 되는 vi편집기에 대한 설명은 아래 링크에서 참고하시고 작성해주시면 되겠습니다. 또한 Hadoop구성 시 편의를 위해서 사용할 scp에 대한 설명도 아래 링크를 참고하시면 되겠습니다. vi편집기와 scp를 둘 다 잘 다루시는 분은 몇몇 부분에서 글과 다르게 진행하셔도 될 것 같습니다.
코드블럭 안에 작성된 내용은 '명령어'이거나 '파일내용'입니다. 명령어인 경우 최대한 한번에 진행하기 편하게 작성하였습니다.
이동; \
다운로드; \
압축해제; \
압축파일 삭제; \
폴더이름 변경
scp 사용방법 : https://newly0513.tistory.com/145
vi편집기 사용방법 : https://newly0513.tistory.com/93?category=828599
Server 구성
Server | master | slave1 | slave2 |
OS | CentOS 7 | CentOS 7 | CentOS 7 |
Disk Size | 40G | 20G | 20G |
Memory | 4G | 1G | 1G |
Processors | 2 | 1 | 1 |
파티션 | boot : 1G swap : 4G / : 35G |
boot : 1G swap : 2G / : 17G |
boot : 1G swap : 2G / : 17G |
개인적인 Server 구성으로, 본인 PC환경에 알맞게 구성해주시면 됩니다. Disk Size는 최소 20G이상을 권장드립니다.
CentOS 7 설치 : https://newly0513.tistory.com/92
전제 조건(Prerequisites)
- 지원되는 플랫폼 (Supported Platforms)
- GNU / Linux
- Windows (https://cwiki.apache.org/confluence/display/HADOOP2/Hadoop2OnWindows)
- 필수 소프트웨어 (Required Software)
- Java
- ssh
- 소프트웨어 설치 (Installing Software)
- Java
- 설치 여부 : javac -version
- 설치 : yum install -y java-1.8.0-openjdk-devel.x86_64
- ssh
- 설치 여부 : ssh -V
- 설치 : yum insatll -y openssh-clients
- Java
※ 이 2가지(Javs, ssh) 소프트웨어는 모든 Server에 필히 설치되어 있어야 합니다.
Hadoop 다운로드 (Download)
- Download Url
- Hadoop 홈페이지 : hadoop.apache.org/releases.html
- Hadoop 미러 사이트 : apache.mirror.cdnetworks.com/hadoop/common/
- Version
- 위 2사이트에서 안정적인 버전(stable version) 또는 목록 중에서 다른 Application들과의 호환성을 고려하여 선택합니다.
- 추후 HBase를 설치하실 분은 2.7.7 or 2.8.5 or 3.1.1+ 을 다운로드 합니다. (Hadoop 미러 사이트로 접속)
- Download
- Download 서버 : master
- Download 위치 : /usr/local
cd /usr/local; \
wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz; \
tar xzvf hadoop-2.7.7.tar.gz; \
rm -rf hadoop-2.7.7.tar.gz; \
mv hadoop-2.7.7 hadoop
경로 설정 (Path)
- JAVA_HOME
- openjdk는 '/usr/lib/jvm/java-<VERSION>-openjdk-<JDK-VERSION>.x86_64' 가 경로가 됩니다.
- HADOOP_HOME
- hadoop을 설치한 위치가 경로가 되므로 저의 경우에는 '/usr/local/hadoop' 이 경로가 됩니다.
- PATH
- 위에서 지정한 경로들을 PATH에 추가해주면 해당 bin파일로 가지 않아도 해당 명령을 사용할 수 있습니다.
- 적용
- 진행 노드 : master, slave1, slave2
- 파일 : /etc/profile
- 경로 적용
- 재부팅 ( reboot )
- source /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
Hadoop 구성 (Configuring the Hadoop)
- 진행 노드 : master
- 파일 위치 : /usr/local/hadoop/etc/hadoop
각 파일마다 기본적으로 <configuration>...</configuration>이 있으므로 해당 내용을 삭제한 뒤 아래 코드를 각 파일마다 전체 복사한 뒤 붙여넣기하거나 <configuration>사이 코드만 복사하여 사용하시면 됩니다.
1. core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
2. hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/datanode</value>
</property>
</configuration>
3. yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4. mapred-site.xml
mapred-site.xml 파일은 mapred-site.xml.template 파일을 복사하여 생성합니다. 생성한 mapred-site.xml 파일에 아래 코드를 추가합니다.
cp mapred-site.xml.template mapred-site.xml; \
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5. hadoop-env.sh
JAVA_HOME은 필수적으로 설정하고 그외에는 선택적인 부분입니다. Hadoop버전에 따라서 라인 번호는 다를 수 있습니다.
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64 #25번 라인
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop #33번 라인
export HADOOP_LOG_DIR=/usr/local/hadoop/logs #72번 라인
export HADOOP_PID_DIR=/usr/local/hadoop/pids #94번 라인
Hadoop Folder 생성
- 진행 노드 : master
- 위치 : /usr/local/hadoop
cd /usr/local/hadoop; \
mkdir namenode; \
mkdir datanode
암호가 없는 SSH 설정(Setup passphraseless ssh)
- 진행 노드 : master
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa; \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; \
chmod 0600 ~/.ssh/authorized_keys
배포
- 진행 노드 : master
배포를 진행하기 전에 배포할 서버의 IP를 체크합니다. 그 후 scp를 사용하여 파일 및 폴더를 해당 서버에 전송합니다.
# IP 확인
ifconfig
1. ssh
master에서 slave1과 slave2로 전송하는 것으로 master에서 둘 다 실행하시면 됩니다.
# slave1 ~/로 전송
scp -r ~/.ssh root@192.168.137.131:~/
# slave2 ~/로 전송
scp -r ~/.ssh root@192.168.137.132:~/
2. Hadoop
master에서 slave1과 slave2로 전송하는 것으로 master에서 둘 다 실행하시면 됩니다.
# slave1 /usr/local로 전송
scp -r /usr/local/hadoop root@192.168.137.131:/usr/local
# slave2 /usr/local로 전송
scp -r /usr/local/hadoop root@192.168.137.132:/usr/local
Hostname 설정
- 진행 노드 : master, slave1, slave2
- 명령어 : hostnamectl set-hostname [변경할 Hostname]
각 서버에서 Hostname을 변경해줍니다. 변경된 호스트 이름은 'hostname'을 입력하시면 출력됩니다.
# master 서버에서 실행
hostnamectl set-hostname master
# slave1 서버에서 실행
hostnamectl set-hostname slave1
# slave2 서버에서 실행
hostnamectl set-hostname slave2
Host 설정
- 진행 노드 : master, slave1, slave2
- 파일 : /etc/hosts
- 형식 : [IP Address] [Hostname]
Hadoop을 실행할 모든 서버를 설정합니다. 각 서버에서 작성하거나 한 서버에서 작성 후 scp를 이용하여 전송해도 됩니다.
192.168.137.130 master
192.168.137.131 slave1
192.168.137.132 slave2
slaves
- 진행 노드 : master
- 파일 : /usr/local/hadoop/etc/hadoop/slaves
slaves에 등록된 host는 datanode로 실행됩니다.
master
slave1
slave2
Hadoop 시작
- 진행 노드 : master
1. 파일시스템 포맷
hadoop namenode -format
2. Hadoop 시작
시작하면 진행 과정이 출력되는데 이 때, namenode / datanode / secondarynamenode / resourcemanager / nodemanager 등 이 잘 실행되는지 확인합니다.
start-all.sh
3. 확인
서버마다 역할을 어떻게 나눠서 구성했는지에 따라 다르지만, 이 글을 보고 구성한 경우 아래와 같이 확인되면 됩니다.
jps
Hadoop 종료
- 진행 노드 : master
start-all.sh 실행 중 오류가 발견되었거나 종료하고 싶은 경우 아래 명령을 통해 Hadoop을 종료합니다.
stop-all.sh
Hadoop 오류
ssh: connect to host master port 22: No route to host
- /etc/hosts 파일 수정을 잘못한 경우 ( master, slave1, slave2 모두 해당 )
- VMware의 경우 PC를 재시작하면 간혹 IP가 변경되는 경우가 있어서 각 서버의 IP와 /etc/hosts 파일에 작성된 내용을 확인
ssh: connect to host master port 22: No route to host
NameNode / DataNode가 올라오지 않는 경우
- 모든 서버에 namenode, datanode를 삭제한 뒤 재생성 후 Hadoop 시작
# master
rm -rf namenode datanode;\
mkdir namenode; mkdir datanode
# slave1, slave2
rm -rf datanode;\
mkdir datanode
# Hadoop 시작
start-all.sh
main class information unavailable
- /tmp 경로아래 hsperfdata_root/ 폴더를 삭제한뒤 Hadoop 재시작
'Open Source > Apache' 카테고리의 다른 글
kubernetes 설치 (0) | 2021.03.25 |
---|---|
HIVE 구성 (with MySQL) (1) | 2021.03.24 |
HBase 구성 ( Full-distributed ) (0) | 2021.03.24 |
HBase 구성 (Standalone) (0) | 2021.03.24 |
Hive Metastore Derby (0) | 2021.03.24 |