IT Log

Hadoop 완전분산모드(Fully-Distributed) 본문

Open Source/Apache

Hadoop 완전분산모드(Fully-Distributed)

newly0513 2021. 3. 24. 16:29
728x90
반응형

[이전 단계] 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)

  1. 지원되는 플랫폼 (Supported Platforms)
  2. 필수 소프트웨어 (Required Software)
    • Java
    • ssh
  3. 소프트웨어 설치 (Installing Software)
    • Java
      • 설치 여부 : javac -version
      • 설치 : yum install -y java-1.8.0-openjdk-devel.x86_64
    • ssh
      • 설치 여부 : ssh -V
      • 설치 : yum insatll -y openssh-clients

※ 이 2가지(Javs, ssh) 소프트웨어는 모든 Server에 필히 설치되어 있어야 합니다.


Hadoop 다운로드 (Download)

  1. Download Url
  2. Version
    • 위 2사이트에서 안정적인 버전(stable version) 또는 목록 중에서 다른 Application들과의 호환성을 고려하여 선택합니다.
    • 추후 HBase를 설치하실 분은 2.7.7 or 2.8.5 or 3.1.1+ 을 다운로드 합니다. (Hadoop 미러 사이트로 접속)
  3. 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)

  1. JAVA_HOME
    • openjdk는 '/usr/lib/jvm/java-<VERSION>-openjdk-<JDK-VERSION>.x86_64' 가 경로가 됩니다.
  2. HADOOP_HOME
    • hadoop을 설치한 위치가 경로가 되므로 저의 경우에는 '/usr/local/hadoop' 이 경로가 됩니다.
  3. PATH
    • 위에서 지정한 경로들을 PATH에 추가해주면 해당 bin파일로 가지 않아도 해당 명령을 사용할 수 있습니다.
  4. 적용
    • 진행 노드 : master, slave1, slave2
    • 파일 : /etc/profile
    • 경로 적용
      1. 재부팅 ( reboot )
      2. 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 재시작

 

728x90
반응형

'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
Comments