前回、HDFS高可用性(HA)機能を設定した。今回はResourceManagerをHA化する。
準備
SDカードの寿命を縮めるため、あまり推奨は出来ないが、本格的にメモリ不足のため、念のためスワップ領域を作成しておく。
sudo mkdir /var/swap
sudo dd if=/dev/zero of=/var/swap/swap0 bs=1M count=2048
sudo chmod 600 /var/swap/swap0
sudo mkswap /var/swap/swap0
sudo swapon /var/swap/swap0
#再起動後も自動的にスワップ領域が適用されるようにする
sudo vi /etc/fstab
#下記の行を追加する
/var/swap/swap0 none swap defaults 0 0
2021/02/25 追記:
SDカードへ書き込みを少なくするため、スワップの頻度が少なくなるように調整する。
#スワップの閾値を確認
cat /proc/sys/vm/swappiness
> 60
sudo vi /etc/sysctl.conf
#下記を追記する(物理メモリが1%以下になったらスワップを開始)
vm.swappiness = 1
#設定を反映
sudo sysctl -p
cat /proc/sys/vm/swappiness
> 1
サーバー構成を検討
NameNodeは奇数で構成する必要があったが、ResourceManagerはそのような制約はないため、下記の2台構成とする。
master1・・・Zookeeper,NameNode(Standby), ResourceManager(Standby)
master2・・・Zookeeper,NameNode(Standby), ResourceManager(Active)
master3・・・Zookeeper,NameNode(Active)
slave1・・・DataNode, NodeManager
slave2・・・DataNode, NodeManager
slave3・・・DataNode, NodeManager
slave4・・・DataNode, NodeManager
ResourceManager高可用性(HA)機能の設定
master1~2のetc/hadoop/yarn-site.xmlを編集する。(メモリ関連の記述は省略)
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rpcluster_r</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>master2:8088</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>master1:2181,master2:2181,master3:2181</value>
</property>
slave1~4のetc/hadoop/yarn-site.xmlを編集する。(メモリ関連の記述は省略)
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>rpcluster_r</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>master2:8088</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>hadoop.zk.address</name>
<value>master1:2181,master2:2181,master3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
ResourceManagerの起動
master1で下記コマンドを実行し、ResourceManagerを起動する。
$HADOOP_HOME/sbin/start-yarn.sh
起動が確認できたので、実際に処理を実行してみる。
$HADOOP_HOME/bin/hadoop jar /home/xxx/hadoop-latest/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.2.jar pi 10 10000
最終的に下記の結果が表示された。スワップを設定したからか今回は前回に比べて50秒ほど早く処理が終わった。
Job Finished in 256.114 seconds
Estimated value of Pi is 3.14120000000000000000