久々のHBaseネタ。以前簡単に試してそのままでしたが、もう少し触ってみたいなぁと思いまして。ただ、Cassandraとどっちを頑張るかは未だ悩み中…。
とりあえず、環境を作ってみるかなぁということで。
去年、1度Apache配布のバイナリから環境を作っています。
Apache HBaseことはじめ
http://d.hatena.ne.jp/Kazuhira/20130902/1378130405
Apache Hadoopをインストールする
http://d.hatena.ne.jp/Kazuhira/20130904/1378307097
擬似分散環境のHDFS上で、HBaseを使用する
http://d.hatena.ne.jp/Kazuhira/20130906/1378479769
前に作った環境は、Ubuntuをダウングレードした時に消失しました…。
今回は、CDHのtarballを使用して環境を作りたいと思います。個人的な好みから、RPMなどではなく、あくまでtarballです。
CDH Packaging and Tarball Information
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH-Version-and-Packaging-Information/cdhvd_topic_3.html
上記URLから、HadoopとHBaseのtarballをダウンロードしました。バージョンは、CDH 4.5(CDH 5はまだベーダだし…)です。
インストール方法は、以下の書籍を参考にやろうと思ったのですが、

- 作者: Eric Sammer,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/27
- メディア: 大型本
- この商品を含むブログ (4件) を見る

Hadoop徹底入門 第2版 オープンソース分散処理環境の構築
- 作者: 太田一樹,岩崎正剛,猿田浩輔,下垣徹,藤井達朗,山下真一,濱野賢一朗
- 出版社/メーカー: 翔泳社
- 発売日: 2013/07/09
- メディア: 大型本
- この商品を含むブログ (5件) を見る
まあ、仕方がありません。今回構築するのは、自分の仮想マシン1台上を対象とするので、Hadoop(疑似分散モード)とその上で動くHBaseです。
Map Reduce Framework(v1、YARNは問わず)は、とりあえず使用しないことにします。前回YARNの環境を作ってみましたが、圧倒的にリソースが足りなくて動作しなかったことと、やりたいことはHBaseを動かすことなのでとりあえずいいかなぁ、と。
疑似分散モードのHadoop(CDH 4.5 tarball)をインストールする
アーカイブの展開とディレクトリの作成
インストール先ディレクトリは、以下を基点とします。
/usr/local/apache-hadoop
$ cd /usr/local/ $ sudo mkdir apache-hadoop $ cd apache-hadoop/ $ sudo cp [CDH 4.5 Hadoopのダウンロードディレクトリ]/hadoop-2.0.0-cdh4.5.0.tar.gz ./. $ sudo tar -zxvf hadoop-2.0.0-cdh4.5.0.tar.gz $ sudo rm hadoop-2.0.0-cdh4.5.0.tar.gz $ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] hadoop-2.0.0-cdh4.5.0 $ sudo ln -s hadoop-2.0.0-cdh4.5.0 current
個人的な趣味で、現在のバージョンには「current」と付与しています。あと、所詮1台なので専用ユーザの作成なども考慮しません。
続いて、NameNodeとDataNode用のディレクトリ、tmpディレクトリを作成します。
$ sudo mkdir -p dfs/data dfs/name $ sudo mkdir tmp $ sudo chown -R [Hadoopの起動ユーザ].[Hadoopの起動ユーザ] dfs tmp
あとは、.bashrcに以下を追加して
export PATH=/usr/local/apache-hadoop/current/bin:${PATH} export PATH=/usr/local/apache-hadoop/current/sbin:${PATH}
再評価。
$ . ~/.bashrc
はい。
それにしても、Map Reduce Frameworkのv1系は、あんまり使って欲しくないみたいですね。ディレクトリがほぼ分離されていて、YARNを使って欲しいような構成になっていたように思います。YARNはもともとやめておこうと思っていたところに、こういう光景を見てしまったのが、今回Map Reduce Frameworkを使わないことを決めた理由でもあったrします。
まあ、必要なら後で追加しましょうかと。
設定
設定は、冒頭の書籍の話と、Clouderaからの以下のページから辿れる
Viewing the Apache Hadoop Documentation
http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/latest/CDH4-Installation-Guide/cdh4ig_topic_4_6.html
Cluster Setup
http://archive.cloudera.com/cdh4/cdh/4/hadoop/hadoop-project-dist/hadoop-common/ClusterSetup.html
前回設定した時に、激しく見た覚えがあります。
以下、変更した設定です。
hadoop-2.0.0-cdh4.5.0/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost</value> </property> <!-- OOZIE proxy user setting --> <property> <name>hadoop.proxyuser.oozie.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.oozie.groups</name> <value>*</value> </property> </configuration>
付属の疑似分散モードのサンプルを見ながら、こんな感じに。OOZIE proxyって要らんのじゃない?って気もしますが…。
hadoop-2.0.0-cdh4.5.0/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/apache-hadoop/tmp</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/apache-hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/apache-hadoop/dfs/data</value> </property> </configuration>
先ほど作成したディレクトリを、各項目に指定しています。
NameNodeのフォーマット
HDFSを使い始める、最初の1回行います。[Hadoopインストールディレクトリ]/binにパスが通っていれば、以下のコマンドで。
$ hdfs namenode -format
ちゃんと、設定が効いていることも確認できます。
$ find dfs
dfs
dfs/data
dfs/name
dfs/name/current
dfs/name/current/fsimage_0000000000000000000
dfs/name/current/VERSION
dfs/name/current/seen_txid
dfs/name/current/fsimage_0000000000000000000.md5
各種デーモンの起動・停止
[Hadoopインストールディレクトリ]/sbinにパスが通っていれば、以下のコマンドで起動。
## NameNode $ hadoop-daemon.sh start namenode ## DataNode $ hadoop-daemon.sh start datanode ## Secondary NameNode $ hadoop-daemon.sh start secondarynamenode
起動してますね?
$ jps 31235 DataNode 31311 SecondaryNameNode 31378 Jps 31175 NameNode
停止は、以下のコマンドです。
## Secondary NameNode $ hadoop-daemon.sh stop secondarynamenode ## DataNode $ hadoop-daemon.sh stop datanode ## NameNode $ hadoop-daemon.sh stop namenode
少しだけ、動作確認
各種デーモンを起動した状態で
$ hdfs dfs -ls / 14/01/04 15:59:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
まあ、まだ何もないですけどね…。
HBase(CDH 4.5 tarball)をインストールする
アーカイブの展開とディレクトリの作成
インストール先ディレクトリは、以下を基点とします。
/usr/local/apache-hbase
$ cd /usr/local/ $ sudo mkdir apache-hbase $ cd apache-hbase/ $ sudo cp [CDH 4.5 HBaseのダウンロードディレクトリ]/hbase-0.94.6-cdh4.5.0.tar.gz ./. $ sudo tar -zxvf hbase-0.94.6-cdh4.5.0.tar.gz $ sudo rm hbase-0.94.6-cdh4.5.0.tar.gz $ sudo chown -R [HBaseの起動ユーザ].[HBaseの起動ユーザ] hbase-0.94.6-cdh4.5.0 $ sudo ln -s hbase-0.94.6-cdh4.5.0 current
こちらも、個人的に「current」と別名付与。
.bashrcにパスを追加。
export HBASE_HOME=/usr/local/apache-hbase/current export PATH=${HBASE_HOME}/bin:${PATH}
こっちは、環境変数も付けてしまいました。で、再評価。
$ . ~/.bashrc
設定
設定は、簡単にこれくらいです。
hbase-0.94.6-cdh4.5.0/conf/hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:8020/hbase</value> </property> <property> <name>dfs.replication</name> <property>1</property> </property> </configuration>
デーモンの起動・停止
「$HBASE_HOME/bin」にパスが通っていれば、以下で起動。
$ start-hbase.sh
確認。
*Hadoopは起動済みです
$ jps 31486 NameNode 32240 HMaster 31628 SecondaryNameNode 32424 Jps 31567 DataNode
HMasterが増えています。
停止。
$ stop-hbase.sh
動作確認
HBase Shellを使って動作確認。
$ hbase shell 14/01/04 16:14:24 WARN conf.Configuration: hadoop.native.lib is deprecated. Instead, use io.native.lib.available HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 0.94.6-cdh4.5.0, r, Wed Nov 20 15:38:35 PST 2013 hbase(main):001:0>
テーブル、カラムファミリの作成。
hbase(main):001:0> create 'test', 'cf' SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/apache-hbase/hbase-0.94.6-cdh4.5.0/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/apache-hadoop/hadoop-2.0.0-cdh4.5.0/share/hadoop/common/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 14/01/04 16:14:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 0 row(s) in 2.5870 seconds => Hbase::Table - test
テーブル一覧。
hbase(main):002:0> list 'test' TABLE test 1 row(s) in 0.0650 seconds
データの登録。
hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1' 0 row(s) in 0.0970 seconds
Scan。
hbase(main):004:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1388819774607, value=value1 1 row(s) in 0.0710 seconds
この時、HDFS上でデータが入っていることが確認できます。
$ hdfs dfs -ls /hbase 14/01/04 16:17:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Found 8 items drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:11 /hbase/-ROOT- drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:11 /hbase/.META. drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:13 /hbase/.logs drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:12 /hbase/.oldlogs drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:14 /hbase/.tmp -rw-r--r-- 3 xxxxx supergroup 38 2014-01-04 16:11 /hbase/hbase.id -rw-r--r-- 3 xxxxx supergroup 3 2014-01-04 16:11 /hbase/hbase.version drwxr-xr-x - xxxxx supergroup 0 2014-01-04 16:14 /hbase/test
テーブルの無効化。
hbase(main):005:0> disable 'test' 0 row(s) in 2.0910 seconds
テーブルの削除。
hbase(main):007:0> drop 'test' 0 row(s) in 1.1520 seconds
HBase Shellの終了。
hbase(main):008:0> exit
こんなところですね。