핀아의 저장소 ( •̀ ω •́ )✧

[Hadoop] Hadoop HDFS 설치 - 1 본문

Big Data/Engineering

[Hadoop] Hadoop HDFS 설치 - 1

_핀아_ 2023. 4. 28. 02:20

앞서 만든 가상환경에 설치해주면 된다!!!!

 

HDFS(Hadoop Distributed File System) 는 수십 테라 또는 페타바이트 이상의 대용량 파일을 분산된 서버에 저장하고, 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템을 말한다.

 

1. Hadoop-3.3.1 버전을 6대의 서버로 구성 Hadoop Cluster ,mast01 서버가 manage의 역할도 겸임
2. IP는 본인의 IP로 수정할 것!
3. '[ ]'의 내용은 해당되는 서버 혹은 몇번째 줄인지 참고하거나 알려주는 가이드로 내용만 확인하고 해당 파일에 대괄호와 대괄호 안 내용을 넣지 아니할 것

 

서버 서비스
mast01 (IP : 192.168.x.101) Zookeeper, ResourceManager, Journalnode, Namenode
mast02 (IP : 192.168.x.102) Zookeeper, ResourceManager, Journalnode, Namenode
mast03 (IP : 192.168.x.103) Zookeeper, Journalnode
work01 (IP : 192.168.x.104) Nodemanager, Datanode
work02 (IP : 192.168.x.105) Nodemanager, Datanode
work03 (IP : 192.168.x.106) Nodemanager, Datanode

1. hostname

hostname

hostname -f
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: Hostname 정보 확인

 

vi /etc/hostname
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: Hostname 정보 수정
  • Setting Value:

[mast01 서버]
mast01

[mast02 서버]
mast02

[mast03 서버]
mast03

[work01 서버]
work01

[work02 서버]
work02

[work03 서버]
work03

  • 여기서 mast는 저장 및 hadoop 프로세스 관리의 역할을 하는 서버라 보면 되고, work가 실제 데이터들이 저장되는 장소로 생각하면 된다.
  • work가 3대인 이유는 hadoop이 데이터를 저장할 때 1인 데이터가 들어와도 3만큼 저장을 하기 때문에 최소 대수인 3대로 진행하였다.

 

2. hosts

vi /etc/hosts
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: IP 정보 입력
  • Setting Value:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.x.101     mast01
192.168.x.102     mast02
192.168.x.103     mast03
192.168.x.104     work01
192.168.x.105     work02
192.168.x.106     work03

※ 6개의 가상환경 전부에 기입해줄 것!

 

3. Network

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 네트워크 고정 IP 설정
  • Setting Value:

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID= (.................. 값이 자동적으로 할당)
DEVICE=enp0s3
ONBOOT=yes
IPADDR= (.............고정ip ex 10.10.31.79)
PREFIX=24
GATEWAY= ............... (ex 10.10.31.1)
DNS1=8.8.8.8
DNS2=8.8.4.4

 

vi /etc/resolv.conf
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 요청할 DNS 서버 설정
  • Setting Value:

nameserver 8.8.8.8
nameserver 8.8.4.4

 

service network restart
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 네트워크 재시작

 

4. firewalld

systemctl stop firewalld.service
systemctl disable firewalld.service
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 방화벽 중단 및 영구 비활성화

 

5. SSH Key

SSH란? 

Secure SHell의 준말로 네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령을 실행할 수 있도록 해주는 프로토콜이다. 즉, SSH를 통해 다른 컴퓨터에서 리눅스에 접속하여 명령어 및 프로그램을 실행할 수 있다.

 

ssh-keygen
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: SSH Key 생성
  • Setting Value: 실행 후 계속 Enter

 

yum install -y openssh-clients
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: SSH key 교환을 위한 SSH client 설치

 

ssh-copy-id -i .ssh/id_rsa.pub root@mast01
ssh-copy-id -i .ssh/id_rsa.pub root@mast02
ssh-copy-id -i .ssh/id_rsa.pub root@mast03
ssh-copy-id -i .ssh/id_rsa.pub root@work01
ssh-copy-id -i .ssh/id_rsa.pub root@work02
ssh-copy-id -i .ssh/id_rsa.pub root@work03
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 각 서버에 생성한 key 할당

 

ssh mast01
exit
ssh mast02
exit
ssh mast03
exit
ssh work01
exit
ssh work02
exit
ssh work03
exit
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 비밀번호 입력 없이 로그인 여부 확인

 

6. NTP

NTP(Network Time Protocol)는 인터넷에서 라우터 및 기타 하드웨어 디바이스의 클럭을 동기화하는 데 널리 사용되는 프로토콜이다.

 

yum install ntp
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: ntp 설치

 

vi /etc/ntp.conf
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: ntp 환경 설정
  • Setting Value:

[모든서버]
# server 0.xx.xx.xx
# server 1.xx.xx.xx
# server 2.xx.xx.xx
# server 3.xx.xx.xx
모두 주석처리

[mast01]
restrict 192.168.x.101 mask 255.255.0.0 nomodify notrap

server 127.127.1.0
---------------------------------------------------------------
[mast02]
restrict 192.168.x.102 mask 255.255.0.0 nomodify notrap

server mast01
server 127.127.1.0
---------------------------------------------------------------
[mast03,work01,work02,work03]

server mast01
server mast02

 

systemctl enable ntpd
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: ntp 서비스 자동 등록

 

systemctl start ntpd
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: ntp 서비스 시작

 

ntpq -p
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: ntp 확인

 

7. SELINUX

vi /etc/sysconfig/selinux
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: 모든 서버 selinux 해제
  • Setting Value: SELINUX=disabled

 

reboot
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root

 

8. JDK

mkdir -p /opt/apps
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: JDK 설치 디렉토리 생성

 

cd /opt/apps
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 설치 디렉토리 이동

 

tar xvfz jdk-8u221-linux-x64.tar.gz
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 압축해제 (JDK 설치파일이 /opt/apps 로 이동되어있어야함)

+) Linux와 window 파일 교환을 위해 winSCP 사용

https://winscp.net/download/WinSCP-5.21.8-Setup.exe

 

Downloading WinSCP-5.21.8-Setup.exe :: WinSCP

Problems with the download? Direct download

winscp.net

 

mv jdk1.8.0_221 jdk8
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 디렉토리명 변경

 

vi /etc/profile.d/java.sh
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 환경변수 설정
  • Setting Value: 
export JAVA_HOME=/opt/apps/jdk8
export PATH=$PATH:$JAVA_HOME/bin

 

source /etc/profile.d/java.sh
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 환경변수 적용

 

java -version
  • User: root
  • Action Server: all
  • Action Directory (pwd): /opt/apps
  • Description: JDK 버전 확인

 

9. Create User, Hadoop Directory

adduser zookeeper
passwd zookeeper
  • User: root
  • Action Server: mast01,mast02,mast03
  • Action Directory (pwd): /root
  • Description: zookeeper 계정 생성(mast01, mast02, mast03 서버) / 생성한 zookeeper 계정의 비밀번호 설정

 

adduser hadoop
passwd hadoop
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: hadoop 계정 생성 / 생성한 hadoop 계정의 비밀번호 설정

 

mkdir /dfs
mkdir /yarn
mkdir /pids

chown hadoop /dfs
chgrp hadoop /dfs
chown hadoop /yarn
chgrp hadoop /yarn
chown hadoop /pids
chgrp hadoop /pids
  • User: root
  • Action Server: all
  • Action Directory (pwd): /root
  • Description: HDFS의 여러 정보를 저장하기 위한 디렉토리 생성 및 Hadoop 계정 접근 권한 설정
chgrp 명령어는 파일또는 디렉토리의 소유 group 을 변경하고 chown 은 파일 또는 디렉토리의 소유 계정을 변경한다.

chgrp [options] group file_list 
chown [options] owner file_list 

 

10. SSH Key in Zookeeper

Zookeeper란??

분산 애플리케이션을 위한 코디네이션 시스템이다. 분산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다.

 

su - zookeeper
  • User: root
  • Action Server: mast01
  • Action Directory (pwd): /root
  • Description: zookeeper 계정 접속

 

ssh-keygen
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: zookeeper 계정에서의 SSH key 생성

 

ssh-copy-id -i .ssh/id_rsa.pub zookeeper@mast01
ssh-copy-id -i .ssh/id_rsa.pub zookeeper@mast02
ssh-copy-id -i .ssh/id_rsa.pub zookeeper@mast03
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 각 서버(mast01,mast02,mast03)에 생성한 key 할당

 

ssh mast01
exit
ssh mast02
exit
ssh mast03
exit
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 비밀번호 입력 없이 로그인 여부 확인

 

11. Zookeeper install

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 주키퍼 설치 파일 다운로드

 

tar xvfz zookeeper-3.4.10.tar.gz
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 주키퍼 설치 파일 압축 해제

 

cd zookeeper-3.4.10
cp conf/zoo_sample.cfg conf/zoo.cfg

vi conf/zoo.cfg
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 폴더 이동 및 복사 후 주키퍼 config 파일 설정
  • Setting Value: 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zookeeper/data
clientPort=2181
maxClientCnxns=0
maxSessionTimeout=180000

[nn01같은건 앞에서 설정한 이름으로 바꿔줄 것 ex. server.1=Mast01:2888:3888]
server.1=nn01:2888:3888
server.2=rm01:2888:3888
server.3=jn01:2888:3888

 

tar cvfz zookeeper.tar.gz zookeeper-3.4.10
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 설정 완료된 주키퍼 디렉토리 압축

 

scp zookeeper.tar.gz zookeeper@mast02:/home/zookeeper
scp zookeeper.tar.gz zookeeper@mast03:/home/zookeeper
  • User: zookeeper
  • Action Server: mast01
  • Action Directory (pwd): /home/zookeeper
  • Description: 압축한 주키퍼 디렉토리 다른 서버에 배포

 

tar xvfz zookeeper.tar.gz zookeeper-3.4.10
  • User: zookeeper
  • Action Server: mast02, mast03
  • Action Directory (pwd): /home/zookeeper
  • Description: 배포 된 주키퍼 디렉토리 압축 해제 

 

mkdir data
cd data
  • User: zookeeper
  • Action Server: mast01, mast02, mast03
  • Action Directory (pwd): /home/zookeeper
  • Description: 주키퍼 홈에서 data 디렉토리 생성

 

vi myid
  • User: zookeeper
  • Action Server: mast01, mast02, mast03
  • Action Directory (pwd): /home/zookeeper/data
  • Description: 주키퍼 클러스터내에서 각각의 주키퍼 노드를 구분하기 위하여 ID 를 생성
                          ex) mast01 서버는 1, mast02 서버는 2, mast03 서버는 3
  • Setting Value: 
[mast01 서버내용]
1

[mast02 서버내용]
2

[mast03 서버내용]
3

 

cd /home/zookeeper/zookeeper-3.4.10
./bin/zkServer.sh start
  • User: zookeeper
  • Action Server: mast01, mast02, mast03
  • Action Directory (pwd): /home/zookeeper/zookeeper-3.4.10
  • Description: zookeeper-3.4.10 폴더로 이동 후 각 서버별로 주키퍼 실행

 

./bin/zkServer.sh status
  • User: zookeeper
  • Action Server: mast01, mast02, mast03
  • Action Directory (pwd): /home/zookeeper/zookeeper-3.4.10
  • Description: 각 서버별로 status 확인, 1대의 서버는 Leader, 2대의 서버는 Follower

결과 (4번째 창은 work01이니 무시해주세요 ㅎ...)

  1. Leader가 꼭 mast01이 아니어도 된다.
  2. 한명이 리더고 나머지가 follwer로, zookeeper leader가 죽으면 다른 follower가 leader가 된다.

+) 나는 서버 돌리니까 아래와 같은 오류가 난다!!! 하시는 분들 config파일을 제대로 작성하였는지 먼저 확인해주시고

그래도 안 된다면 쉘 파일 start 할 때 start-foreground로 에러 확인 후 구글에 검색해보시길 바랍니다!!

 

👇에러 시 참고한 글들👇

https://stackoverflow.com/questions/43114814/zkserver-sh-status-error-contacting-service-it-is-probably-not-running

 

./zkServer.sh status Error contacting service. It is probably not running

I have installed zookeeper 3.4.9 version and my zoo.cfg file configuration is as following initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/ clientPort=2181 DataLogDir=/usr/local/log/ ...

stackoverflow.com

https://khstar.tistory.com/entry/zookeeper-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-%EB%B0%8F-%EC%A3%BC%EC%9D%98-%EC%82%AC%ED%95%AD

 

zookeeper 실행하기 및 주의 사항

zookeeper의 설치 방법은 https://mslee89.tistory.com/188 에 잘 나와 있습니다. 참고 하시고요. 전 zookeeper를 실행하는 방법에 대해 글을 적습니다. zookeeper 실행하기 글을 적는 이유는 하다 보면 저 처럼 단

khstar.tistory.com

 

 

 

 

다음 게시글에서는 본격적으로 하둡 설치를 진행해보겠습니다~!

혹시 질문 사항이 있거나 피드백이 있으신 경우 댓글 달아주세요 ><

Comments