HBaseとZookeeperの設定

完全分散モードによるHBaseとZookeeperに関する設定メモです。Hadoopについては以前のブログの内容に従ってインストールされていることが前提です。

今回利用したバージョンはhbase-0.94.11とzookeeper-3.4.5です。なお、hbase-0.94.11のデフォルトのHadoopバージョンは1.0.4で前回は1.1.2を設定する方法を紹介しましたが設定方法は同じです。

なお、今回紹介する方法はhbaseにzookeeperを管理させず、zookeeperノードを単体で起動する方法を紹介します。zookeeperは奇数台必要となります。

[ ]はそれぞれの環境で任意の設定値に読み替えてください。

■Zookeeperの設定
rootユーザでzookeeperを解凍し、ディレクトリのオーナーなどの設定を行います。


su -
cd /usr/local
tar -zxvf zookeeper-3.4.5.tar.gz
chown -R hadoop:hadoop zookeeper-3.4.5/
ln -s zookeeper-3.4.5 zookeeper

zookeeper用のデータディレクトリを作成します。


cd /opt
mkdir zookeeper
chown -R hadoop:hadoop zookeeper/

zookeeperの起動ユーザ(hadoopユーザ)にスイッチしzoo.cfgファイルの設定を行います。


su - hadoop
cd /usr/local/zookeeper/conf
cp -p zoo_sample.cfg zoo.cfg
vi zoo.cfg
/tmp/zookeeper

/opt/zookeeper #先ほど作成したディレクトリに変更
zookeeperが動作するノードリストを以下のように追加
#servers ↓zookeeperが動作するサーバ名とポート番号を設定
server.1=[ホスト名1]:[port1]:[port2]
server.2=[ホスト名2]:[port1]:[port2]
server.3=[ホスト名3]:[port1]:[port2]
...

各zookeeperのサーバででmyidファイルを/opt/zookeeper配下に作成します。


cd /opt/zookeeper
vi myid
1 ←server.1のノードでは1を設定。server.2の場合は2。

iptablesを次のように設定します。ここでは自分のネットワーク内からのアクセスのみを許可するようにします。


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport [zoo.cfgファイルのport1] -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport [zoo.cfgファイルのport2] -j ACCEPT

zookeeperの起動・停止・クライアントでのログイン

【起動】


cd /usr/local/zookeeper
./bin/zkServer.sh start

【停止】


./bin/zkServer.sh stop

【クライアントログイン】


./bin/zkCli.sh

■HBaseの設定
rootユーザでhbaseを解凍し、ディレクトリのオーナーなどの設定を行います。


su -
cd /usr/local
tar -zxvf hbase-0.94.11.tar.gz
ln -s hbase-0.94.11 hbase
chown -R hadoop:hadoop hbase-0.94.11

hbase用のディレクトリを作成します。


cd /opt
mkdir hbase
chown -R hadoop:hadoop hbase/

hadoopユーザでhbase/conf配下のhbase-site.xml、hbase-env.sh、regionservers、backup-mastersファイルをそれぞれ次のように編集します。

【hbase-site.xml

<configuration>
 <property>
   <name>hbase.rootdir</name>
   <value>hdfs://[hadoop_hdfsサーバ]:[port]/hbase</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.tmp.dir</name>
   <value>/opt/hbase</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.zookeeper.quorum</name>
   <value>[zookeeper_server_name1],[zookeeper_server_name1],[zookeeper_server_name1]</value>
   <description>
   ...
   </description>
 </property>
</configuration>

【hbase-env.sh】


export HBASE_PID_DIR=/var/run/hadoop
export HBASE_MANAGES_ZK=false #hbaseでzookeeperを起動しないようにする

【regionservers】
分散させるリージョンサーバ名をすべて記載します。


[regionserver_name1]
[regionserver_name2]
[regionserver_name3]
[regionserver_name4]
[regionserver_name5]
...

【backup-masters】
バックアップ用のHBaseマスタサーバ名を記載します。


[backup_masterserver_name1]

iptablesの設定
マスタサーバとリージョンサーバでそれぞれ以下のように設定します。ここでもローカルネットワークからのアクセスのみを許可するようにします。

【マスタサーバ】


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60000 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60010 -j ACCEPT

【リージョンサーバ】


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60020 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60030 -j ACCEPT

hbaseクラスタの起動と停止

【起動】


cd /usr/local/hbase
./bin/start-hbase.sh

【停止】


./bin/stop-hbase.sh

長くなりましたが以上です。