Raspberry Pi 2でクラスタ構築 その3(Hadoop編)

前回の構成ではNameNodeが単一障害点になっていたため、HDFS高可用性(HA)機能を試してみる。

サーバー構成を検討

スタンバイのNameNodeがSecondary NameNodeの代わりになるため、Secondary NameNodeは不要になる。

master1・・・Zookeeper,NameNode(Active), ResourceManager
master2・・・Zookeeper,NameNode(Standby)
master3・・・Zookeeper,NameNode(Standby)
slave1・・・DataNode, NodeManager
slave2・・・DataNode, NodeManager
slave3・・・DataNode, NodeManager
slave4・・・DataNode, NodeManager

Zookeeperをインストール

master1~3にインストールする。

wget https://downloads.apache.org/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
tar xvfz apache-zookeeper-3.6.2-bin.tar.gz
ln -nfs /home/xxx/apache-zookeeper-3.6.2-bin zookeeper-latest

master1~3のconf/zoo.cfgを編集する。

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/xxx/zookeeper-latest/data
clientPort=2181
server.1=master1:2888:3888
server.2=master2:2888:3888
server.3=master3:2888:3888

master1~3の~/zookeeper-latest/data/myidファイルを作成し、server.xで指定した数字と同じ数字を記入する。
その後、master1~3のZookeeperを順次起動する。

~/zookeeper-latest/bin/zkServer.sh start

HDFS高可用性(HA)機能の設定

master1~3のetc/hadoop/hdfs-site.xmlを編集する。

  <property>
    <name>dfs.nameservices</name>
    <value>rpcluster</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.rpcluster</name>
    <value>nn1,nn2,nn3</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn1</name>
    <value>master1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn2</name>
    <value>master2:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn3</name>
    <value>master3:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn1</name>
    <value>master1:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn2</name>
    <value>master2:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn3</name>
    <value>master3:9870</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master1:8485;master2:8485;master3:8485/rpcluster</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.rpcluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/ubuntu/.ssh/id_rsa</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master1:2181,master2:2181,master3:2181</value>
  </property>
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/home/ubuntu/hadoop-latest/dfs/journalnode</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/ubuntu/hadoop-latest/dfs/namenode</value>
  </property>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

slave1~4のetc/hadoop/hdfs-site.xmlを編集する。

   <property>
    <name>dfs.nameservices</name>
    <value>rpcluster</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.rpcluster</name>
    <value>nn1,nn2,nn3</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn1</name>
    <value>master1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn2</name>
    <value>master2:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.rpcluster.nn3</name>
    <value>master3:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn1</name>
    <value>master1:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn2</name>
    <value>master2:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.rpcluster.nn3</name>
    <value>master3:9870</value>
  </property>
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master1:8485;master2:8485;master3:8485/rpcluster</value>
  </property>
  <property>
    <name>dfs.client.failover.proxy.provider.rpcluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/ubuntu/.ssh/id_rsa</value>
  </property>
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
  </property>
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master1:2181,master2:2181,master3:2181</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/mnt/usbhdd/hadoop/data</value>
  </property>

master1~3、slave1~4のetc/hadoop/core-site.xmlを編集する。

  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://rpcluster</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master1:2181,master2:2181,master3:2181</value>
  </property>

HDFSのフォーマット

master1~3のJournalNodeのみ起動する。

$HADOOP_HOME/bin/hdfs --daemon start journalnode

master1でNameNodeをフォーマットする。

$HADOOP_HOME/bin/hdfs namenode -format
$HADOOP_HOME/bin/hdfs namenode -initializeSharedEdits -force
$HADOOP_HOME/bin/hdfs zkfc -formatZK -force

master1のNameNodeのみ起動する。

$HADOOP_HOME/bin/hdfs --daemon start namenode

master2、3でスタンバイ用のNameNodeを作成する。

$HADOOP_HOME/bin/hdfs namenode -bootstrapStandby -force

HDFSの起動

全てのNameNode、JournalNodeを停止する。

$HADOOP_HOME/bin/hdfs --daemon stop namenode
$HADOOP_HOME/bin/hdfs --daemon stop journalnode

master1で下記コマンドを実行し、HDFSを再起動する。

$HADOOP_HOME/sbin/start-dfs.sh

次回、ResourceManagerをHA化する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください