하둡 싱글노드 클러스터 설정하기

서혁준·2022년 7월 17일
1
post-thumbnail

하둡 싱글 클러스터를 pseudo-distributed 모드로 설정하는 과정에 대해서 설명하였다.

하둡 설치

하둡은 JAVA 기반으로 구현된 분산처리 프레임워크이므로 Java가 설치된 상태여야 한다.
하둡 버전별로 지원하는 JDK 버전이 다르므로 잘 보고 설치해야 한다. (관련 링크)

하둡은 datanode와 namenode 간의 통신을 ssh를 이용하므로 ssh 를 설치하고, localhost에 비밀번호 (passphrase) 없이 접속할 수 있도록 해줘야 한다.

관련 셋업 설정은 여기 에 잘 설명되어 있다.

하둡 셋업 시 사용하는 파일 정리

~/.bashrc

쉘에서 하둡 스크립트 등을 명령어처럼 사용하게 하기 위해서 설정해준다.
$PATH 에 현재 하둡 명령어가 저장된 /bin/ 폴더가 저장된 폴더의 위치를 저장해준다.

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

# HADOOP ENVIRONMENT
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_HDFS_HOME=/usr/local/hadoop
export YARN_HOME=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
export PATH=$PATH:/usr/local/hadoop/sbin

# HADOOP NATIVE PATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"

/etc/hadoop/hadoop-env.sh

하둡 스크립트에서 사용할 환경변수들을 설정해준다.
대표적으로 설정해줘야 하는 환경변수는 다음과 같다.
JAVA_HOME : 현재 사용중인 JDK가 설치되어 있는 폴더.

core-site.xml

클러스터 내 Namenode에서 실행되는 데몬의 옵션을 설정한다.
여기에 설정하는 옵션들은 core-default.xml를 override한다.

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>
  • fs.defaultFS : 하둡 파일시스템의 이름이다

hdfs-site.xml

하둡 클러스터 내에서 실행되는 HDFS Daemon에 대한 설정이다.
여기에 설정하는 옵션들은 hdfs-default.xml을 override한다.

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/ubuntu/data/dfs/namenode</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>/home/ubuntu/data/dfs/namesecondary</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/ubuntu/data/dfs/datanode</value>
        </property>
        <property>
                <name>dfs.http.address</name>
                <value>localhost:50070</value>
        </property>
        <property>
                <name>dfs.secondary.http.address</name>
                <value>localhost:50090</value>
        </property>
</configuration>
  • dfs.replication : 파일 블록의 복제본을 몇 개 저장해둘 것인지에 대한 replication factor를 설정한다. 기본값은 3이다.
  • dfs.namenode.name.dir : HDFS에서 로컬 파일시스템을 이용하기 때문에 로컬 파일시스템 내의 어느 폴더에 DFS namenode가 fsimage를 저장할지 지정한다.
  • dfs.namenode.checkpoint.dir : DFS secondary namenode가 temporary image를 파일 시스템 내 어느 폴더에 저장해둘지를 설정한다.
  • dfs.namenode.checkpoint.edits.dir : DFS secondary namenode가 editslog를 파일 시스템 내 어느 폴더에 저장해둘지를 설정한다.
  • dfs.datanode.data.dir : DFS datanode가 어디에 block을 저정할지 설정한다.

mapred-site.xml

하둡 맵리듀스 데몬들 (JobTracker, TaskTracker) 에 대한 설정을 저장하고 있는 파일이다.
여기에서 설정하는 옵션들은 mapred-default.xml을 override한다.

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
</configuration>
  • mapreduce.framework.name : MapReduce 태스크를 실행하는 런타임 프레임워크를 설정한다. classic, local, yarn 을 선택할 수 있다.
  • yarn.app.mapreduce.am.env : 맵리듀스 앱 프로세스에서 사용할 환경변수를 설정할 수 있다.

yarn-site.xml

YARN 의 옵션을 설정할 수 있다.
여기에 설정한 옵션들은 yarn-default.xml을 override한다.

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>localhost</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>
  • yarn.resourcemanager.hostname : RM의 hostname.
  • yarn.nodemanger.aux-services : YARN에서 사용할 auxiliary 서비스 이름들. 콤마로 구분해서 여러개 넣을수 있다.
  • yarn.nodemanager.aux-services.mapreduce.shuffle.class : 사용할 auxiliary service class의 java package name.

하둡 설정파일 변경내용 적용하기

hdfs namenode -format 명령어를 이용해 namenode를 포맷할 수 있다.
네임노드를 포맷하면 dfs.namenode.name.dir에 설정해 놓은 fsimage와 editslog가 초기화된다.

중요한 것은 dfs.namenode.name.dir의 접근권한이 HDFS 프로세스에 열어줘야 한다는 것.

여튼 이렇게 설정한 내용을 적용하고 나서
start-all.sh 를 실행한다 (start-dfs.sh + start-yarn.sh 과 같다)

그러고 나서 jps 명령어를 이용해 현재 실행 중인 자바 프로세스 목록을 봤을 때

2432 ResourceManager
2242 SecondaryNameNode
1972 DataNode
2952 Jps
2590 NodeManager
1807 NameNode

이렇게 6개가 실행되고 있다면 설정에 성공했다고 볼 수 있다.

개인적인 경험으로는 hdfs namenode -format 만 했을때는 Datanode가 안 올라왔었다. 그럴 때는 dfs.namenode.name.dir를 정의한 폴더를 아예 삭제하고 다시 하니깐 Datanode가 잘 올라오는 것을 확인할 수 있었다.

참고자료

하둡 싱글 클러스터 셋업
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html

hdfs-default.xml 의 옵션 정리되어있는 문서
https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

profile
방구석에 앉아 미래를 상상하는 나

1개의 댓글

comment-user-thumbnail
2022년 7월 18일

참 귀여운 하둡,, 물론 코끼리요

답글 달기