하둡 싱글 클러스터를 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
참 귀여운 하둡,, 물론 코끼리요