EC2를 활용하여 Hadoop Cluster를 구성 과정을 보여드리려고 합니다.
EC2 Instance 설치
- AMI = Linux
- Memory = 4GB
- PEM 설정
- Network settings
- volume
디스크 포맷하기
- 디스크를 분리함으로써, 재부팅 이후에도 디스크 볼륨에 남아있도록 구성
- 아래에 보이는 xvda가 root 디스크, xvdb가 설정해주어야할 디스크이다.
- 마운트 할 대상을 설정
- 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
|
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
|
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/
|
환경 설정
- 리눅스는 전역 환경 변수를 설정하기 위해 /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>
|
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>
|
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개 만들생각이니, 이미지를 사용하여 빠르게 구성한다.
Master 서버 설정
- Master 이름 설정
- Ec2 Instance는 별도의 설정을 하지 않는다면, 재부팅 후 IP가 변동하니 주의
1
2
| $ sudo hostnamectl set-hostname master
$ hostnamectl
|
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
|
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 ..
|
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로 하면 왜 안되는건지는 모르겠음
나머지 세부 내용은 다시 정리할 예정