Hadoop Clustering (1)

Hadoop Clustering (1)

앞으로 진행할 내용은 6개의 node로 구성된 multi-node distributed Hadoop cluster 를 구성하는 것입니다.

HDP, CDH와 같은 Hadoop 배포판을 사용하지 않고 aphache.orgNative Hadoop 배포판으로 설치를 진행합니다.

Hadoop 클러스터링 환경을 구성하기 전에 아래 처럼 노드들을 구상하였습니다.

node host address
1 lxc-centos-1 10.10.30.101
2 lxc-centos-2 10.10.30.102
3 lxc-centos-3 10.10.30.103
4 lxc-centos-4 10.10.30.104
5 lxc-centos-5 10.10.30.105
6 lxc-centos-6 10.10.30.106

각 호스트별로 설정하기 번거로우니 node 1번에 기본설정을 한후 나머지 노드들을 clone하기로 한다

그리고 본인이 다른 용도로 운영중인 Ubuntu 18.04 데스크탑도 차후에 worker node로 추가하기로 했다

Preparation

yum update, SSH 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yum update -y

yum install epel-release net-tools vim openssh-server ntp pssh

# 외부 SSH접속 허용
echo PermitRootLogin yes >> /etc/ssh/sshd_config
systemctl start sshd
systemctl enable sshd
ssh-keygen -t rsa
# Enter 두번
# ssh localhost

ssh-keygen -t rsa
#엔터 연타

Java

1
2
3
4
5
6
yum install java-1.8.0-openjdk-devel

java -version

# JAVA_HOME 환경변수 등록 스크립트
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64" > /etc/profile.d/java.sh

File open limits 변경

리눅스에는 동시에 파일을 open 하거나 실행 할 수 있는 갯수에 대한 제한, open file limit이 걸려있다 아래와 같이 리소스 제한을 풀어준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 최소
ulimit -Sn
# 1024

# 최대
ulimit -Hn
# 524288

# 아래 파일을 수정
vim /etc/security/limits.conf
soft nofile 32768
hard nofile 32768

# 커널 적용
sysctl -p

# 확인
sysctl -a

NTP 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 현재 서버 시간 및 time zone 확인
timedelta
# UST로 되어 있을 시 아래 실행해서 KST로 timezone 설정
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

vim /etc/ntp.conf
# 기존의 server들을 주석처리
# server 0.centos.pool.ntp.org.iburst
# server 0.centos.pool.ntp.org.iburst
# server 0.centos.pool.ntp.org.iburst
# server 0.centos.pool.ntp.org.iburst
server 127.127.1.0

# 저장 후 ntpd 데몬 시작
systemctl start ntpd

우선 lxc-centos-1 을 ntp 서버로 두고 차후 클러스터들로 하여금 시간 동기화를 진행하도록 한다

호스트 파일 설정

1
2
3
4
5
6
7
8
9
vim /etc/hosts

10.10.30.101 lxc-centos-1
10.10.30.102 lxc-centos-2
10.10.30.103 lxc-centos-3
10.10.30.104 lxc-centos-4
10.10.30.105 lxc-centos-5
10.10.30.106 lxc-centos-6
#저장

Disable THP

CDH나 HDP에서 언급하길 Transparent Huge Pages(THP)의 THP compaction로 인해 Hadoop의 성능이 저하될 수 있다고 한다.

pve 서버에 접속하여 아래 명령을 입력하자, 컨테이너는 커널을 공유하기 때문에 컨테이너상에서 커널 설정을 넣어도 적용되지 않기 때문에 메인 커널 서버에 접속해주고 설정을 잡아줘야 한다.

THP 옵션 활성화 상태 확인

1
cat /sys/kernel/mm/transparent_hugepage/enabled

always가 []로 싸여서 [always] 로 되어있으면 활성된 상태이다

다음 2가지 절차로 THP를 끌 수 있다

  1. 아래 echo 명령어를 /etc/rc.d/rc.local 에 덮어 씌우고 reboot
1
2
3
4
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

chmod +x /etc/rc.d/rc.local
  1. /etc/default/grub 파일의 GRUB_CMDLINE_LINUX 옵션에 다음 내용을 추가한다
1
2
3
4
GRUB_CMDLINE_LINUX = "transparent_hugepage=never"

# 내용 추가 후 아래 실행
grub2-mkconfig -o /boot/grub2/grub.conf

그 후 cat /proc/meminfo 를 열어서 아래 처럼 모든 값이 0이 되었는지 확인해준다

1
2
3
4
5
AnonHugePages:         0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0

더 자세한 내용은 아래 링크에서 확인하자

What is huge page in linux?

vm.swappiness 설정

CDH, HDP에 따르면 swap 이 설정되어 있다면 메모리를 최대한 활용하지 못하는 경우가 생길 수 있기 때문에 되도록이면 끄거나 최소크기로 지정하는 것으로 권장 되어있다

pve 서버에 접속해서 아래 내용들을 수행한다

1
2
3
4
5
# swap 크기 확인
cat /proc/sys/vm/swappiness

touch /etc/sysctl.d/set-swap-1.conf
echo "vm.swappiness=1" > /etc/sysctl.d/set-swap-1.conf

얼추 필요한 프로그램과 설정이 끝났으니 이제 clone을 시켜준다

Proxmox web-ui에 접속해서 lxc-centos-1 컨테이너에 오른쪽 버튼을 클릭하고 (꺼진 상태여야함)

clone을 눌러서 간단히 hostname만 입력해주면 복제된 컨테이너를 생성할 수 있다

lxc-clone

이제 각 노드에 들어가서 ssh-copy-id, IP 변경, ntp 동기화를 하도록 하자


pssh를 설치 하였기 때문에 모든 노드들에게 병렬로 동일한 명령을 내릴 수 있다

pssh -h [호스트파일] [명령어]

1
2
3
4
5
6
7
8
9
10
11
vim hosts

lxc-centos-1
lxc-centos-2
lxc-centos-3
lxc-centos-4
lxc-centos-5
lxc-centos-6
#저장

pssh -h hosts yum update -y

추가

proxmox-6.1에서 LXCstop이나 reboot, clone/etc/hosts가 초기설정으로 override 되는 문제가 있어서 아래를 실행해준다

1
touch /etc/.pve-ignore

이러면 /etc/hosts가 초기 설정으로 바뀌는걸 막을 수 있다

unsplash-logoMylon Ollila

댓글