Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

Hadoop Cluster 클러스터 구성하기 with Ec2

Hadoop Cluster 클러스터 구성하기 with Ec2

EC2를 활용하여 Hadoop Cluster를 구성 과정을 보여드리려고 합니다.

EC2 Instance 설치


  • AMI = Linux
  • Memory = 4GB
  • PEM 설정
  • Network settings
    • vpc
    • subnet
    • security
  • volume
    • root - 8GB
    • store - 30GB


디스크 포맷하기


  • 디스크를 분리함으로써, 재부팅 이후에도 디스크 볼륨에 남아있도록 구성
  • 아래에 보이는 xvda가 root 디스크, xvdb가 설정해주어야할 디스크이다.
1
$ lsblk

Untitled-18

  • 마운트 할 대상을 설정
  • hdfs_dir로 할 것이다. ( 다른 티스토리를 보고 참고한 내용 )
1
2
3
4
5
6
7
$ sudo vi /etc/fstab
/dev/xvdb	/hdfs_dir	xfs	defaults	1	1

$ cat /etc/fstab
$ sudo mkdir /hdfs_dir
$ sudo mount -a
$ df -h

Untitled-19


Java 1.8 설치하기


  • Oracle에서 다운로드 받은 jdk1.8을 Instance에 업로드
  • 이후 환경 변수 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ scp -i "~/.ssh/wclub-server.pem" ~/Downloads/jdk-8u381-linux-x64.tar.gz ec2-user@ec2-54-180-102-139.ap-northeast-2.compute.amazonaws.com:~/install_dir/jdk-8u381-linux-x64.tar.gz
$ tar -xvf jdk-8u381-linux-x64.tar.gz
$ sudo mv jdk1.8.0_381/ /usr/local/jdk1.8

$ sudo vi /etc/profile
"
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_OPTS="-Dfile.encoding=UTF-8"
export CLASSPATH="."
"

$ source /etc/profile
$ java -version

Untitled-20


Hadoop 설치


  • Apache hadoop 공식 문서를 들어가 무난해보이는 버전을 하나 골라서 다운로드
  • 환경 구성을 통일하기 위해 usr/local 아래에 구성
1
2
3
$ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
$ sudo tar -xvf hadoop-3.2.4.tar.gz -C /usr/local/
$ sudo chown root:root -R /usr/local/hadoop-3.2.4/

Untitled-21


환경 설정


  • 리눅스는 전역 환경 변수를 설정하기 위해 /etc/profile로 설정
  • Ec2 Instance를 통해 들어오게 된다면, 자꾸 풀리는데 이는 알아보고 업데이트 할 예정
1
2
$ sudo vi /etc/profile
$ source /etc/profile
1
2
3
4
5
# /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export HADOOP_HOME=/usr/local/hadoop-3.2.4
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

Hadoop 환경 설정

  • 공통 설정
  • core-site.xml
  • 로그, 네트워크, I/O, 파일시스템, 압축 등 시스템 설정 파일
  • 아래와 같이 master로 구성하게 되면, namenode 구성 시 bind 에러가 발생한다..
  • 이 부분도 찾으면 업데이트할 예정 일단은 임시로 localhost로 사용
1
$ sudo vi $HADOOP_HOME/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
# core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
       #<value>hdfs://master:9000</value>
			 <value>hdfs://localhost:9000</value>
    </property>
</configuration>

  • HDFS 환경 정보
  • hdfs-site.xml
1
$ sudo vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///hdfs_dir/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///hdfs_dir/datanode</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>worker01:50090</value>
    </property>
</configuration>
  • yarn-site.xml
  • resource manager, node manager 설정 정보
1
$ sudo vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>file:///hdfs_dir/yarn/local</value>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>file:///hdfs_dir/yarn/logs</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
         <value>master</value>
    </property>
</configuration>
  • mapreduce 설정
  • mapred-site.xml
1
$ sudo vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  • 하둡 환경 설정
  • hadoop-env.sh
1
$ sudo vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
1
2
3
4
5
6
export JAVA_HOME=/usr/local/jdk1.8
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"

Instance → 이미지


  • 인스턴스 구성을 완료하였으니, 이미지화 시켜서 빠르게 구성하여 본다.
  • worker를 3개 만들생각이니, 이미지를 사용하여 빠르게 구성한다.

2023-09-14-12-21-22-1

Untitled-22


Master 서버 설정


  • Master 이름 설정
  • Ec2 Instance는 별도의 설정을 하지 않는다면, 재부팅 후 IP가 변동하니 주의
1
2
$ sudo hostnamectl set-hostname master
$ hostnamectl

Untitled-23

  • 연결할 서버 설정
1
2
3
4
5
6
$ sudo vi /etc/hosts

54.180.102.139 master
3.39.9.51 worker01
3.36.71.48 worker02
43.201.111.131 worker03

Worker 설정


  • 서버 이름 설정
  • Ec2 Instance는 별도의 설정을 하지 않는다면, 재부팅 후 IP가 변동하니 주의
1
2
$ sudo hostnamectl set-hostname worker01
$ hostnamectl

Untitled-24

  • 서버 정보
1
2
3
4
5
6
$ sudo vi /etc/hosts

54.180.102.139 master
3.39.9.51 worker01
3.36.71.48 worker02
43.201.111.131 worker03


SSH-KEY 설정하기


  • 기본 설정하기
1
2
3
4
5
6
7
8
9
10
11
12
$ sudo su
$ vi /etc/ssh/sshd_config

:set number
# 40
PermitRootLogin yes

# 66
PasswordAuthentication yes

$ systemctl restart sshd
$ passwd
  • 키 생성
  • 각 node에서 다른 node로 비밀번호 없이 접속 가능하다면 완성
1
2
3
4
5
6
7
8
$ ssh-keygen
$ ssh-copy-id root@master
$ ssh-copy-id root@worker01
$ ssh-copy-id root@worker02
$ ssh-copy-id root@worker03

# 검증
$ ssh master, worker01 .. 

Untitled-25

1
2
3
4
$ cd $HADOOP_HOME
$ bin/hdfs namenode -format /hdfs_dir

$ bin/hdfs datanode -format /hdfs_dir
1
2
3
4
$ vi $HADOOP_HOME/etc/hadoop/workers
worker01
worker02
worker03
1
2
3
4
5
6
# log 보는 곳
$HADOOP_HOME/logs/hadoop-root-namenode-master.log

vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6

localhost로 설정하면 된다..

왜지..master로 하면 왜 안되는건지는 모르겠음

나머지 세부 내용은 다시 정리할 예정

1
https://ip:9870

2023-09-14-11-10-39