Monday

Wsl2 docker기반 하둡 클러스터 구축하기 (1) 스탠드얼론 본문

빅데이터/Hadoop

Wsl2 docker기반 하둡 클러스터 구축하기 (1) 스탠드얼론

뉴비2 2021. 10. 24. 00:35

사전 준비사항 : wls2 설치, docker desktop 설치

 

1. Centos7 컨테이너 실행 및 초기 프로그램 설치

우선 Centos7 컨테이너를 실행하고, 컨테이너 간 ssh 접속 및 하둡 실행을 위해 Java 11 설치, vim 설치까지 초기 세팅을 진행합니다.

# 도커 Centos7 기반 컨테이너 실행 및 접속
docker run -it --name hadoop-base centos:7

# wget, vim, SSH, Java11 설치
yum install wget vim openssh-server openssh-clients openssh-askpass -y
yum install java-11-openjdk-devel.x86_64 -y

 

2. ssh 설정 

모든 서버가 같은 이미지를 사용할 것이므로 모든 서버가 SSH_Server이면서 SSH_Client입니다. 따라서 같은 공개키를 공유하게 설정하면 ssh 접속은 설정이 끝이납니다. ssh_keygen을 이용해 키를 생성하고 공개키를 ~/.ssh/authorized_keys에 추가하면 됩니다.

# rsa 타입, 암호는 ''(자유로그인을 위해), 파일 이름 지정(id_rsa)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# Missing privilege separation directory: /run/sshd 오류 위해서 /var/run/sshd 생성
mkdir /var/run/sshd

 

3. 하둡 설치

글 작성 시점에서 하둡 최신 버전 3.3.1을 사용합니다. arch 또는 getconf LONG_BIT 명령어를 통해 운영체제를 확인하고 맞는 하둡 바이너리 버전을 설치합니다.

# 하둡 폴더 생성
mkdir /hadoop_home
cd /hadoop_home/

#하둡 설치
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz
tar xzvf hadoop-3.3.1.tar.gz

 

4. 환경 변수 설정

~/.bash_profile을 편집해서 환경변수를 추가해줍니다.

# ~/.bash_profile

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
export HADOOP_HOME=/hadoop_home/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

 

5. 하둡 Config 세팅

  하둡 관련 설정 파일은 아래와 같습니다.

파일명 설명
core-site.xml 클러스터 내 네임노드에서 실행되는 하둡 데몬에 관한 설정.
core-site.xml에 설정 값이 없을 경우 core-default.xml에 있는 기본 값을 사용
hdfs-site.xml 하둡 파일시스템에 관한 설정.
hdfs-site.xml에 설정 값이 없을 경우 hdfs-default.xml에 있는 기본 값을 사용
yarn-site.xml Resource Manager에 관한 설정.
mapred-site.xml에서 yarn을 선택했을 경우 내용 추가.
mapred-site.xml 맵리듀스에 관한 설정.
mapred-site.xml에 설정 값이 없을 경우 mapred-default.xml에 있는 기본 값을 사용

 

우선 관련 폴더를 만듭니다.

mkdir /hadoop_home/temp
mkdir /hadoop_home/namenode_dir
mkdir /hadoop_home/datanode_dir

설정은 아래와 같이 설정합니다. 

 

1) core-site.xml

- fs.defaultFS

기본값 file:///. 클라이언트의 기본 파일시스템을 지정하는 URL로 보통 hdfs://hostname:port 형식으로 지정

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/hadoop_home/temp</value>
    </property>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
        <final>true</final>
    </property>
</configuration>

2) hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/hadoop_home/namenode_dir</value>
        <final>true</final>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/hadoop_home/datanode_dir</value>
        <final>true</final>
    </property>
</configuration>

3) mapred-site.xml

<configuration>
 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

4) yarn-site.xml

Shuffle 관련 설정: YARN 기반인 경우 NodeManager에 Task만 실행되고 중지되어 버리기 때문에 MapTask의 결과가 ReduceTask로 전달되기 위해서는 ReduceTask로부터의 Map 결과 데이터 전송 요청에 응답해서 데이터를 전송하는 데몬이 필요합니다. YARN에서는 이런 종류의 데몬을 위해 각 Application(JOB)별로 각 NodeManager에 하나씩 지정한 프로그램을 실행하는 기능을 제공하는데, 이런 서비스를 auxiliary service 라고 부릅니다.

아래 설정은 기본 설정 값으로 되어 있기 때문에 별도 설정은 필요 없지만 이와 유사한 서비스가 필요한 경우 아래와 같이 설정할 수 있습니다. [출처 : https://www.popit.kr/what-is-hadoop-yarn/]

<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

5) hadoop-env.sh 설정

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
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"

 

네임노드 포맷

  • hdfs namenode -format 명령으로 네임노드를 포맷합니다. 네임노드를 포맷하면 dfs.namenode.name.dir경로의 fsimage와 edits 파일이 초기화 됩니다.
  • 네임노드를 포맷하면 클러스터 ID가 신규로 생성됩니다. 이 정보는 dfs.namenode.name.dir 아래 VERSION 파일에 있습니다.

출처: https://118k.tistory.com/916 [개발자로 살아남기]

hdfs namenode -format

 

 

6. 실행

start-dfs.sh
start-yarn.sh

에러는 다음에 해결.

 

Starting namenodes on [localhost]
Last login: Sun Oct 24 13:58:16 UTC 2021 on pts/0
localhost: ssh: connect to host localhost port 22: Cannot assign requested address
Starting datanodes
Last login: Sun Oct 24 14:09:31 UTC 2021 on pts/0
localhost: ssh: connect to host localhost port 22: Cannot assign requested address
Starting secondary namenodes [a93e6aade77c]
Last login: Sun Oct 24 14:09:31 UTC 2021 on pts/0
a93e6aade77c: ssh: connect to host a93e6aade77c port 22: Connection refused

'빅데이터 > Hadoop' 카테고리의 다른 글

자바 MR Reducer Iterable values 메모리 재사용 이슈  (0) 2021.04.21
Comments