[hadoop] 빅데이터 분석 환경 구축 On-Premise - 2. Centos base docker Java & Hadoop 설치

윤원탁·2022년 12월 2일
0

빅데이터환경설정

목록 보기
3/8

이번 챕터에서는 CentOS base docker 이미지 생성을 할 예정
Docker는 설치 되었다는 가정에서 시작
만약 Docker 관련 강의를 듣고싶다면 Youtube 이성미강사님의 따배도 강의를 추천한다.
링크 : Youtube 따배도 강의

🎈필요 환경

  • Apache Hadoop 3.2.3 + Yarn
  • Apache Spark 3.2.1
  • Apache Zookeeper 3.8.0
  • Apache Zeppelin 0.10.1

🎈Centos base docker image 생성

1. docker image 검색

  • Docker에서 Official 이미지를 찾아본다. 어떤 이미지일지 모르기 때문에 official을 사용하는게 좋다.
docker search centos

2. docker daemon으로 실행

  • official 확인 후 centos 7 버전 docker image 기반으로 nn1이라는 이름으로 docker container를 실행한다.
docker run -dit --name nn1 centos:7 /bin/bash

Q :여기서 -d 뿐만 아니라 -it 로 실행한 이유?
: -it centos 이미지에는 기본 COMMAND 가 있고, container 가 실행될 때 이 COMMAND 가 실행된다. centos의 경우에는 /bin/bash 이다. 이 bash 가 실행되기 위해서는 "터미널"이 필요하다. 그래서 --it 옵션을 통해서 interactive 한 pseudo tty를 할당하는 것이다.

이렇게 안 하면 run을 해서 container가 생성되어도 바로 stop 상태가 된다.
이후에 다시 docker start 해도 같은 결과를 낳는다. 그러니 꼭 이 옵션은 지정한다.

그리고 꼭 위와 같은 경우가 아니더라도, 이후에 container에 bash로 접속하기 위해서는 이 설정을 켜줘야 한다. bash는 결국 terminal 이 있어야 동작하는 프로그램이라는 것을 잊지 말자.

[참조] https://velog.io/@dailylifecoding/docker-install-centos-and-run-basic

3. docker base container에 접속

  • 생성된 container에 접속한다.
docker exec -it nn1 /bin/bash

4. centos 기본 설정 세팅

# 현재 갖고있는 패키지 최신화
yum update -y
# 필요 라이브러리 설치
yum install vim wget unzip ssh openssh-* sudo net-tools -y

🎈Java 설치

: Apache 계열의 프레임워크는 JVM 계열에서 작동하므로 Java설치가 필수적이다.

1. Java 설치

# 자바 1.8버전 설치
yum install java-1.8.0-openjdk-devel -y

# 자바 설치 버전 확인
javac -version

2. Java 환경설정

  • 실제 경로를 찾아서 환경변수에 등록해줘야함
# 자바 설치경로 찾기
readlink -f /usr/bin/java

# 환경변수 편집
vim /etc/profile

# 작성내용
### JAVA ENV
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.352.b08-2.el7_9.x86_64/jre/bin/java
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

export JAVA_HOME PATH CLASSPATH

# 환경변수 적용
source /etc/profile

# 적용 확인
# echo $JAVA_HOME
# echo $PATH
# echo $CLASSPATH

🎈HADOOP 설치

1. HADOOP 설치 및 압축해제

# 설치파일 관리용 디렉토리 생성
mkdir /install_dir && cd /install_dir
# Hadoop 3.2.2 설치
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz
# Hadoop 3.2.2 압축 해제
tar -zxvf hadoop-3.2.4.tar.gz -C /usr/local
# Hadoop 디렉토리 이름 변경
mv /usr/local/hadoop-3.2.4 /usr/local/hadoop

2. CentOS HADOOP 환경설정

# 환경설정 파일 수정
vim /etc/profile

PATH 뒤에 ":/usr/local/hadoop/bin" 추가
PATH 뒤에 ":/usr/local/hadoop/sbin" 추가
HADOOP_HOME="/usr/local/hadoop"

# 추가 후 변동사항 적용
source /etc/profile

# 개인 변수선언
vim ~/.bash_profile

맨 밑에 아래 내용 추가 후 저장
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME

# 변동사항 적용
source ~/.bash_profile

3. HADOOP hdfs-site.xml 설정

  • 하둡 파일시스템 관련 환경설정 수정
# hdfs-site 수정 
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

# 아래 내용으로 수정 후 저장
<configuration>
    <!-- configuration hadoop -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/usr/local/hadoop/data/nameNode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop/data/dataNode</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/usr/local/hadoop/data/dfs/journalnode</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>my-hadoop-cluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.my-hadoop-cluster</name>
        <value>namenode1,namenode2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.my-hadoop-cluster.namenode1</name>
        <value>nn1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.my-hadoop-cluster.namenode2</name>
        <value>nn2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.my-hadoop-cluster.namenode1</name>
        <value>0.0.0.0:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.my-hadoop-cluster.namenode2</name>
        <value>0.0.0.0:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://nn1:8485;nn2:8485;dn1:8485/my-hadoop-cluster</value>
    </property>
    <property>
        <name>dfs.client.failover.proxy.provider.my-hadoop-cluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>shell(/bin/true)</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/ubuntu/.ssh/id_rsa</value>
    </property>
    <property> 
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/usr/local/hadoop/data/name</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/usr/local/hadoop/data/data</value>
    </property>
</configuration>
  • hdfs-site.xml 속성
    • dfs.replication : HDFS 파일 블록 복제 개수 지정한다.
    • dfs.namenode.name.dir : NameNode에서 관리할 데이터 디렉토리 경로 지정한다.
    • dfs.datanode.data.dir : DataNode에서 관리할 데이터 디렉토리 경로 지정한다.
    • dfs.journalnode.edits.dir : JournalNode는 NameNode의 동기화 상태를 유지한다. 특정 시점에 구성된 fsimage snapshot 이후로 발생된 변경 사항을 editlog라 하며, 해당 데이터의 저장 위치를 설정한다.
    • dfs.nameservices : Hadoop 클러스터의 네임서비스 이름을 지정한다.
    • dfs.ha.namenodes.my-hadoop-cluster : Hadoop 클러스터 네임서비스의 NameNode 이름을 지정한다.( “,”콤마로 구분하여 기재한다.)
    • dfs.namenode.rpc-address.my-hadoop-cluster.namenode1 : 클러스터 네임서비스에 포함되는 NameNode 끼리 RPC 통신을 위해 NameNode의 통신 주소를 지정한다.(여기서는 8020포트 사용)
    • dfs.namenode.rpc-address.my-hadoop-cluster.namenode2 : 클러스터 네임서비스에 포함되는 NameNode 끼리 RPC 통신을 위해 NameNode의 통신 주소를 지정한다.(여기서는 8020포트 사용)
    • dfs.namenode.http-address.my-hadoop-cluster.namenode1 : NameNode1(nn1)의 WEB UI 접속 주소를 지정한다. 서버에서 도커로 포트포워딩을 받기 위해 localhost로 세팅함(여기서는 50070포트 사용)
    • dfs.namenode.http-address.my-hadoop-cluster.namenode2 : NameNode2(nn2)의 WEB UI 접속 주소를 지정한다. 서버에서 도커로 포트포워딩을 받기 위해 localhost로 세팅함(여기서는 50070포트 사용)
    • dfs.namenode.shared.edits.dir : NameNoderk editlog를 쓰고/읽을 JournalNode URL 이다. Zookeeper가 설치된 서버와 동일하게 JournalNode를 설정하면 된다.
      (예 : qjournal://nn1:8485;nn2:8485;dn1:8485/my-hadoop-cluster)
    • dfs.client.failover.proxy.provider.my-hadoop-cluster : HDFS 클라이언트가 Active NameNode에 접근할 때 사용하는 Java class 를 지정한다.
    • dfs.ha.fencing.methods : Favilover 상황에서 기존 Active NameNode를 차단할 때 사용하는 방법을 기재한다.
      (예 : sshfence 그러나 여기서는 shell(/bin/true)를 이용한다.)
    • dfs.ha.fencing.ssh.private-key-files : ha.fencing.method를 sshfence로 지정하였을 경우, ssh를 경유하여 기존 Active NameNode를 죽이는데. 이 때, passpharase를 통과하기 위해 SSH Private Key File을 지정해야한다.
    • dfs.ha.automatic-failover.enabled : 장애 복구를 자동으로 할 지에 대한 여부를 지정한다.

4. HADOOP core-site.xml 설정

  • 클러스터 내의 네임노드에서 실행되는 하둡 데몬에 관한 설정
  • 로그파일, 네트워크 튜닝, I/O튜닝, 파일 시스템 튜닝, 압축 등 하부 시스템 설정 파일
  • HDFS(hdfs-site.xml)와 맵리듀스(mapred-site.xml)에서 공통적으로 사용할 환경정보 설정
  • 만약 core-site.xml 이 없을 경우 core-default.xml 에 있는 기본값을 사용한다.
# core-site.xml 수정
vim $HADOOP_HOME/etc/hadoop/core-site.xml

# 아래 내용으로 수정 후 저장
<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://nn1:9000</value>
        </property>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://my-hadoop-cluster</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>nn1:2181,nn2:2181,dn1:2181</value>
        </property>
</configuration>
  • core-site.xml 파일 속성
    • fs.default.name : HDFS의 기본 통신 주소를 지정한다.
    • fs.defaultFS : HDFS 기본 파일시스템 디렉토리를 지정한다.
    • ha.zookeeper.quorum : Zookeeper가 설치되어 동작할 서버의 주소를 기재한다.(여기서 포트는 2181)

5. Hadoop yarn-site.xml 설정

: yarn-site.xml에서는 리소스매니저 Web-ui 주소, 노드매니저에서 중간단계 파일 및 로그를 저장할 경로를 정의해줍니다.

# yarn-site.xml 수정
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml 

# 아래 내용으로 수정 후 저장
<configuration>
        <!-- Site specific YARN configuration properties -->
        <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>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>nn1</value>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>0.0.0.0:8088</value>
        </property>
</configuration>

6. mapred-site.xml 수정

: MapReduce 어플리케이션 설정 파일이다.

# mapred-site.xml 수정
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

# 아래 내용으로 수정 후 저장
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
        </property>
</configuration>

7. hadoop-env.sh 파일 편집

# Hadoop hadoop-env.sh 파일 설정
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh

# 아래 내용 수정 후 저장
#Java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk

#Hadoop
export HADOOP_HOME=/usr/local/hadoop
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"
export HDFS_ZKFC_USER="root"
export HDFS_JOURNALNODE_USER="root"

8. HADOOP workers 편집

: Hadoop의 worker로 동작할 서버 호스트 이름을 설정한다.

# Hadoop workers 편집
vim $HADOOP_HOME/etc/hadoop/workers

# 아래 내용 수정 후 저장
# localhost << 주석 처리 또는 제거
dn1
dn2
dn3

9. Hadoop masters 편집

: Hadoop의 master로 동작할 서버 호스트 이름을 설정한다.

# Hadoop masters 편집
vim $HADOOP_HOME/etc/hadoop/masters

# 아래 내용 수정 후 저장
nn1
nn2

[참조]

빅데이터 분석 환경 구축 - 3강. Hadoop 설치 및 환경설정

profile
개발자입니다.

0개의 댓글

관련 채용 정보