Hadoop 클러스터 환경 구축 - 이중 NameNode 구성

Hadoop 환경설정 파일 수정

필요한 설정 파일은 $HADOOP_HOME/etc/hadoop 디렉토리에 있으며, 다음과 같이 수정해야 한다.

core-site.xml

<configuration>
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://cluster</value>
</property>
<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/hadoop/hdfs/tmp</value>
</property>
<property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
</property>
<property>
    <name>fs.checkpoint.period</name>
    <value>60</value>
</property>
<property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value>
</property>
<property>
    <name>ha.zookeeper.quorum</name>
    <value>node1:2181,node2:2181,node3:2181</value>
</property>
</configuration>

hdfs-site.xml

<configuration>
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<property>
    <name>dfs.nameservices</name>
    <value>cluster</value>
</property>
<property>
    <name>dfs.ha.namenodes.cluster</name>
    <value>node1,node2</value>
</property>
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/usr/hadoop/hdfs/name</value>
    <final>true</final>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/usr/hadoop/hdfs/data</value>
    <final>true</final>
</property>
<property>
    <name>dfs.namenode.secondary.http-address.cluster.node1</name>
    <value>node1:9001</value>
</property>
<property>
    <name>dfs.namenode.secondary.http-address.cluster.node2</name>
    <value>node2:9001</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.cluster.node1</name>
    <value>node1:9000</value>
</property>
<property>
    <name>dfs.namenode.rpc-address.cluster.node2</name>
    <value>node2:9000</value>
</property>
<property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
</property>
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
<property>
    <name>dfs.support.append</name>
    <value>true</value>
</property>
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<property>
    <name>dfs.client.failover.proxy.provider.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>~/.ssh/id_rsa</value>
</property>
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node1:8485;node2:8485;node3:8485/cluster</value>
</property>
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/data/install/hadoop-2.7.3/journal</value>
</property>
<property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>30000</value>
</property>
</configuration>

mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

yarn-site.xml

<configuration>
<property>
    <name>yarn.resourcemanager.address</name>
    <value>node1:18040</value>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>node1:18030</value>
</property>
<property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>node1:18088</value>
</property>
<property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>node1:18025</value>
</property>
<property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>node1:18141</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>

hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_281

集群启动 명령어

※ 주의: 최초启动와 일반적인启动의 명령어가 다르므로 순서에 유의해야 한다.

최초 시작 절차

1단계: 모든 노드에서 Zookeeper 시작

bin/zkServer.sh start

2단계: Zookeeper 초기화

node1 노드에서 Zookeeper를 초기화하여 필요한 znode 생성

bin/hdfs zkfc -formatZK

3단계: JournalNode 시작

모든 JournalNode 노드에서 다음 명령어로 JournalNode 실행

sbin/hadoop-daemon.sh start journalnode

4단계: JournalNode 초기화

node1 노드에서 shared edits 디렉토리 초기화

bin/hdfs namenode -initializeSharedEdits -force

node1 노드에서 NameNode 포맷

hdfs namenode -format

5단계: NameNode 시작

bin/hdfs namenode

6단계:standby NameNode 동기화

standby NameNode 노드에서 실행하여 메타데이터 복사

hdfs namenode -bootstrapStandby

7단계: 종료

동기화 완료 후 node1에서 NameNode 프로세스를 종료하고, 모든 JournalNode 중지

sbin/hadoop-daemon.sh stop journalnode

일반적인 시작/중지 명령어

sbin/start-all.sh
sbin/stop-all.sh

대체 시작 방법

1단계: Zookeeper 초기화

[root@node1 hadoop]$ bin/hdfs zkfc -formatZK

2단계: JournalNode 시작

sbin/hadoop-daemon.sh start journalnode

3단계: NameNode 및 JournalNode 디렉토리 포맷

hdfs namenode -format cluster

4단계: NameNode 시작

node1 (활성 NameNode)에서:

[root@node1 hadoop]$ sbin/hadoop-daemon.sh start namenode

node2 (대기 NameNode)에서:

[root@node2 hadoop]$ bin/hdfs namenode -bootstrapStandby
[root@node2 hadoop]$ sbin/hadoop-daemon.sh start namenode

5단계: DataNode 시작

[root@node1 hadoop]$ sbin/hadoop-daemons.sh start datanode

6단계: ZKFC 시작

node1 및 node2 각각에서:

[root@node1 hadoop]$ sbin/hadoop-daemon.sh start zkfc
[root@node2 hadoop]$ sbin/hadoop-daemon.sh start zkfc

7단계: JobHistoryServer 시작

[root@node1 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver

※ 참고: standby NameNode에 문제가 발생하여 자동으로 사라진다면, name 및 data 디렉토리를 삭제한 후 시작 절차를 다시 수행하기 바랍니다.

태그: hadoop namenode 클러스터 분산파일시스템

7월 8일 06:03에 게시됨