Apache Hadoop Cluster 구성

Tips 2021. 10. 10. 22:27

아래의 블로그가 매우 유용하였다.

https://velog.io/@somnode/hadoop-cluster-install

 

[hadoop] Hadoop 3 클러스터 설치

Namenode랑 Datanode 디렉터리를 삭제한 후 실행하자.NameNode (http://localhost:9870)ResourceManager (http://localhost:8088)MapReduce JobHistory Server (http

velog.io

 

Hadoop을 설치한 환경은 1개의 Master, 2개의 Slave의 총 3개의 서버로 구성하였다.

아래의 정리한 메모에 따라 Master와 Slave의 모든 서버에 Hadoop를 설치해주자.

Ubuntu LTS 20.04, Docker 환경에서 설치하였다.

Hadoop은 3.2.2 버전으로 설치하였다.

 

INSTALL JAVA

하둡은 Java8 베이스로 동작한다.

\$ sudo su root

\$ apt-get install openjdk-8-jdk -y

\$ vim /etc/hosts (Docker로 하였을 때 수정해야 하는 부분)

172.17.0.2 master
172.17.0.3 slave1
172.17.0.4 slave2
172.17.0.5 slave3

IP주소는 설치 환경에 맞게 변경해줘야 한다.

이 글에서는 Docker의 Bridge 네트워크로 설치하였기 때문에 위와 같은 IP주소가 부여되지만,

여러 대의 PC에 분산하여 Cluster를 구성한다면 아마 192.168.xxx.yyy와 같은 사설 IP주소를 설정해야 할 것이다.

 

CONNECT SSH WITHOUT PASSWORD

Master가 Slave에 접근할 때마다 비밀번호를 물어봐야 한다면 조금 웃긴 상황이 펼쳐질 것이다.

그러니 비밀번호없이 Master가 Slave에 접근할 수 있도록 SSH 설정을 해주어야 한다.

\$ apt-get install openssh-server -y

\$ service ssh start

\$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

\$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

\$ chmod 700 ~/.ssh/authorized_keys

이 부분이 설치 중 제일 까다롭고 귀찮은 부분이다.

Master에서 Slave에 접근하기 위해서는 Slave의 Key를 모두 가지고 있어야 한다.

그러니 Slave에서 생성한 ~/.ssh/id_rsa 파일을 Master의 ~/.ssh/authorized_keys에 모두 추가해줘야 한다.

Hadoop은 Master 하나에 환경설정을 해둔다면, host 설정만 바꿔 Slave(데이터 노드)를 복제하면 된다.

그래서 Master에 SSH 키를 만들어둔다면 Slave에서는 SSH와 관련된 별도의 작업을 하지 않아도 된다.

 

INSTALL HADOOP

\$ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz

\$ tar -xvzf hadoop-3.2.2.tar.gz

\$ mv hadoop-3.2.2 /usr/local/hadoop

\$ vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export YARN_CONF_DIR=\$HADOOP_HOME/etc/hadoop
export HADOOP_CONF_DIR=\$HADOOP_HOME/etc/hadoop
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HADOOP_HOME/lib/native
export PATH=\$PATH:\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin

 

\$ vim \$HADOOP_HOME/etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
</configuration>

 

\$ vim \$HADOOP_HOME/etc/hadoop/hdfs-site.xml

<configuration>
    <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.namenode.secondary.http-address</name>
        <value>slave1:50090</value>
    </property>
</configuration>

 

\$ vim \$HADOOP_HOME/etc/hadoop/yarn-site.xml

<configuration>
  <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>master</value>
   </property>
      <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>
</configuration>

 

\$ 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_HOME/etc/hadoop/workers

slave1
slave2
slave3

 

\$ \$HADOOP_HOME/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
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

 

START HADOOP

마스터 노드에서만 실행하면 된다.

\$ \$HADOOP_HOME/bin/hdfs namenode -format -force

\$ \$HADOOP_HOME/sbin/start-dfs.sh

\$ \$HADOOP_HOME/sbin/start-yarn.sh

\$ \$HADOOP_HOME/binmapred --daemon start historyserver

 

STOP HADOOP

마스터 노드에서만 실행하면 된다.

\$ \$HADOOP_HOME/sbin/stop-dfs.sh

\$ \$HADOOP_HOME/sbin/stop-yarn.sh

\$ \$HADOOP_HOME/bin/mapred --daemon stop historyserver

\$ rm -rf \$HADOOP_HOME/data/namenode/*

데이터 노드에서 실행

\$ rm -rf \$HADOOP_HOME/data/datanode/*

 

HADOOP 설정 UI로 확인하기

NameNode

http://172.17.0.2:9870

 

RecourceManager

http://172.17.0.2:8080

 

MapReduce JobHistory Server

http://172.17.0.2:19888

 

여기서도 마찬가지다. IP주소는 설치 환경에 따라 바꿔야 한다.

 

 

위와 같이 환경 설정이 잘 마무리되었다면,

AWS나 Docker로 상당히 쉽게 Hadoop 클러스터를 구성할 수 있다.

 

혹시 이 글을 보고 Hadoop을 구성한다면 $앞에 붙은 '\'는 삭제해주자.

Latex 문법 때문에 티스토리 편집기가 '\'없이 $를 입력하면 수식으로 인식하기 때문에 $를 '\\$'로 표시하였다.

 

Hadoop을 설치하였으니 이제 Spark 설치하러 가자.

'Tips' 카테고리의 다른 글

UCINET CONCOR 분석  (0) 2021.11.09
Apache Flume 설치  (1) 2021.10.18
Apache Spark Cluster 구성  (1) 2021.10.10
Hadoop의 standalone 설치 방법  (0) 2021.10.08
Python의 가독성과 OOP에 대한 개인적인 견해  (0) 2021.09.29
admin