빅데이터

빅데이터_Chapter04_Hadoop 설치 및 환경설정

강용민 2022. 4. 27. 04:40

Apache Hadoop 3.2.3를 설치하고 환경설정을 진행한다.

하둡 클러스터를 사용하기 위해서는 hdfs-site.xml, core-site.xml, yarn-sit.xml, mapred-site.xml, Hadoop-env.sh, workers, masters를 편집해야 한다.

 

Hadoop 설치 및 환경설정

# EC2 Ubuntu terminal

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

# Hadoop 시스템 환경변수 설정
sudo vim /etc/environment

# 아래 내용 추가 후 저장
PATH 뒤에 ":/usr/local/hadoop/bin" 추가
PATH 뒤에 ":/usr/local/hadoop/sbin" 추가
HADOOP_HOME="/usr/local/hadoop"

# 시스템 환경변수 활성화
source /etc/environment

# Hadoop환 사용자 환경변수 설정
sudo echo 'export HADOOP_HOME=/usr/local/hadoop' >> ~/.bashrc
sudo echo 'export HADOOP_COMMON_HOME=$HADOOP_HOME' >> ~/.bashrc
sudo echo 'export HADOOP_HDFS_HOME=$HADOOP_HOME' >> ~/.bashrc
sudo echo 'export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc
sudo echo 'export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop' >> ~/.bashrc
sudo echo 'export HADOOP_YARN_HOME=$HADOOP_HOME' >> ~/.bashrc
sudo echo 'export HADOOP_MAPRED_HOME=$HADOOP_HOME' >> ~/.bashrc

# 사용자 환경변수 활성화
source ~/.bashrc

 

hdfs-site.xml 파일 편집

HDFS에서 사용할 환경 정보를 설정하는 파일이다. hdfs-site.xml 에 설정 값이 없을 경우 hdfs-default.xml을 기본으로 사용한다.

# EC2 Ubuntu terminal

# hdfs-site.xml 편집
sudo vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

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

 

core-site.xml 파일 편집

Hadoop 시스템 설정 파일이다. 네트워크 튜닝, I/O 튜닝, 파일 시스템 튜님, 압출 설정 등 Hadoop시스템 설정을 할 수 있다. HDFS와 MapReduce에서 공통적으로 사용할 환경 정보를 입력할 수 있다.

     # EC2 Ubuntu terminal

# core-site.xml 편집
sudo vim $HADOOP_HOME/etc/hadoop/core-site.xml

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

 

yarn-site.xml 파일 편집

Resourc Manage 및 Node Manager에 대한 구성을 정의한다.

# EC2 Ubuntu terminal

# Hadoop yarn-site.xml 파일 설정
sudo 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>
</configuration>

 

mapred-site.xml 파일 편집

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

# EC2 Ubuntu Terminal

# Hadoop mapred-site.xml 파일 설정
sudo 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>

 

hadoop-env.sh 파일 편집

# EC2 Ubuntu terminal

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

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

# Hadoop
export HADOOP_HOME=/usr/local/hadoop

 

Hadoop workers 편집

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

# EC2 Ubuntu terminal

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

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

 

Hadoop master 편집

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

# EC2 Ubuntu terminal

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

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