일상의 정리

Hadoop Resource Manager HA 구성하기

Hadoop/설치

Namenode 를 HA 구성하여 SPOF(Single Point Of Failure)에서 벗어났지만, 이번엔 리소스관리자인 YARN이 또다른 SPOF입니다. 이번에는 Resource Manager를 HA 구성하는 방법에 대하여 알아보겠습니다.

1. 서버 구성

1.1 yarn-site.xml

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.nodemanager.local-dirs</name>
		<value>/home/hadoop/hadoopdata/yarn/nm-local-dir</value>
	</property>
	<property>
		<name>yarn.resourcemanager.fs.state-store.uri</name>
		<value>/home/hadoop/hadoopdata/yarn/system/rmstore</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop01</value>
	</property>
 	<property>
		<name>yarn.web-proxy.address</name>
		<value>0.0.0.0:8089</value>
	</property>

	<!-- for Resource Manager HA configuration -->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>cluster1</value>
	</property>
	<property>
		<name>yarn.resourcemanager.ha.rm-ids</name>
		<value>rm1,rm2</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.rm1</name>
		<value>hadoop01</value>
	</property>
	<property>
		<name>yarn.resourcemanager.hostname.rm2</name>
		<value>hadoop02</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm1</name>
		<value>hadoop01:8088</value>
	</property>
	<property>
		<name>yarn.resourcemanager.webapp.address.rm2</name>
		<value>hadoop02:8088</value>
	</property>
	<property>
		<name>hadoop.zk.address</name>
		<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
	</property>

</configuration>

1.5 설정파일 전송

모든 설정 파일을 다른 hadoop 서버로 전송해 줍니다. 아래 명령을 이용합니다.

scp $HADOOP_HOME/etc/hadoop/* hadoop02:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/* hadoop03:$HADOOP_HOME/etc/hadoop/
scp $HADOOP_HOME/etc/hadoop/* hadoop04:$HADOOP_HOME/etc/hadoop/

2. 하둡 실행

아래 명령으로 하둡을 시작 합니다.

start-dfs.sh
start-yarn.sh

3. Resource Manager 상태 확인

아래 명령으로 Resource Manager의 상태를 확인합니다.

$ yarn rmadmin -getServiceState rm1
active
 
$ yarn rmadmin -getServiceState rm2
standby

4. Fail-over 테스트

4.1 Active Resource 종료

hadoop01 에서 아래 명령으로 Resource Manager 를 강제 종료 합니다.

$ jps
148195 Jps
144490 NameNode
145722 WebAppProxyServer
146696 ResourceManager
144750 JournalNode
144942 DFSZKFailoverController

$ kill -9 146696

4.2 Resource Manager 상태 확인

다음 명령으로 rm1 과 rm2 의 상태를 확인합니다.

$ yarn rmadmin -getServiceState rm1
2020-09-10 12:44:27,784 INFO ipc.Client: Retrying connect to server: hadoop01/192.168.35.81:8033. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)
Operation failed: Call From hadoop01/192.168.35.81 to hadoop01:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
 
$ yarn rmadmin -getServiceState rm2
active

위와 같이 rm1 에서는 실패하고 rm2에서는 active 로 표시되면 정상입니다.

4.2 Job 실행

다음 명령으로 Sample Job 을 실행해 봅니다.

yarn jar  $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar pi 16 1000

정상적으로 실행이 되면 Fail-over 가 성공한 겁니다.