Presented: 07/24/2010 Copyright © 2010 Happy-Camper Street. Presentation Demo Presented: 07/24/2010 HBase プログラミング ~ Scala ソース添え ~ @ueshin [email protected] http://happy-camper.st/ HBase プログラミング HBase とは データモデル 実装 インストール デモ 問題点とトピックス HBase プログラミング
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBase プログラミング~ Scala ソース添え ~
@[email protected]://happy-camper.st/
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBase とはHBase is the Hadoop database.
- 大規模データ (billions of rows X millions of columns)
- ランダムアクセス・リアルタイム読み書き
カラム指向分散データベース
- Bigtable: A Distributed Storage System for Structured Data
- Hadoop (HDFS) 上に構築
・自動シャーディング
・テーブル構造が柔軟
・インデックスなし
・クエリが単純化
・Hadoop MapReduce サポート
・一貫性、CAS 操作
・高可用性
・クラスタのモニタリングと監視
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング > HBase とは
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
データモデルBigtable を参考に
Column "contents:" Column "anchor:" Column "mime:" Row Key Time Stamp
"com.cnn.www" "CNN"
"CNN.com"
"text/html"
"anchor:cnnsi.com"
"anchor:my.look.ca"
"<html>..."
"<html>..."
"<html>..."
t8
t6
t5
t3
t9
セルの値を取得するには・・・
- テーブル名
- Row Key
- カラムファミリー
- 修飾子
- バージョンRow = Map<byte[], Map<byte[], Map<Long, byte[]>>>
実際問題、こんな感じ。
例 ) webtable
- 行の特定に Row Key
- あるカラムファミリーに対して、任意の数のカラムを持てる
HBaseプログラミング > データモデル
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
物理配置
その他
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
物理配置物理的には、カラムファミリー毎に保存
リージョン
Row Key の範囲によって分割された領域- リージョンのサイズが大きくなると自動的に分割されていく
Column "contents:" Row Key Time Stamp
"jp.co.cnn"
"<html>..."
"<html>..."
"<html>..." t5
t3
t6
Column "anchor:" Row Key Time Stamp
"jp.co.cnn" "CNN"
"CNN.com"
"anchor:cnnsi.com"
"anchor:my.look.ca" t8
t9
Column "mime:" Row Key Time Stamp
"jp.co.cnn" "text/html"t9
リージョン2
Column "contents:" Row Key Time Stamp
"com.cnn.www"
"<html>..."
"<html>..."
"<html>..." t5
t3
t6
Column "anchor:" Row Key Time Stamp
"com.cnn.www" "CNN"
"CNN.com"
"anchor:cnnsi.com"
"anchor:my.look.ca" t8
t9
Column "mime:" Row Key Time Stamp
"com.cnn.www" "text/html"t9
リージョン1
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
物理配置
その他
HBaseプログラミング > データモデル > 物理配置
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
耐障害性HDFS の NameNode が SPOF
CAP 定理クラスタが分断した場合には、状況によってはシステム停止
ACID 特性1つの Row に対するロックを取得できる
- Row 内のデータの更新を Atomic に実行することが可能。
- Row 内のデータの Consistency は保証される。
- 複数の Row にまたがる更新の Atomicity は確保できない。
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
物理配置
その他
HBaseプログラミング > データモデル > その他
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
実装
HMaster
RegionServer RegionServer RegionServer
ZooKeeper クラスタ
HDFS
- リージョン割り当て
- リージョンサーバーの障害回復
- 0 個以上のリージョン
- 読み書き要求
- リージョン分割管理
- クラスタ管理
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
HBase の操作
書き込み
読み込み
その他
HBaseプログラミング > 実装
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBase の操作 : メタデータ
RegionServer RegionServer RegionServer
ZooKeeper クラスタ
HDFS
1. -ROOT- の位置取得
2. -ROOT- から、.META. の位置取得3. .META. からリージョンの位置取得
クライアント
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
HBase の操作
書き込み
読み込み
その他
HBaseプログラミング > 実装 > HBase の操作
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBase の操作 : 書き込み
RegionServer RegionServer RegionServer
ZooKeeper クラスタ
HDFS
1. 書き込み
2. コミットログ追記
3. メモリキャッシュに追加
4. メモリキャッシュが一杯になったらフラッシュ
クライアント
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
HBase の操作
書き込み
読み込み
その他
HBaseプログラミング > 実装 > HBase の操作 > 書き込み
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBase の操作 : 読み込み
RegionServer RegionServer RegionServer
ZooKeeper クラスタ
HDFS
1. 読み込み
2. メモリキャッシュを調べる
3. フラッシュファイルを調べる
クライアント
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
HBase の操作
書き込み
読み込み
その他
HBaseプログラミング > 実装 > HBase の操作 > 読み込み
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
Compactions
リージョン分割
minor compaction
major compaction
- フラッシュファイルの数が閾値を超えると1つにまとめる。
- リージョンに属するすべてのフラッシュファイルを定期的に1つにまとめる。
フラッシュファイルのサイズが閾値を超えるとリージョン分割
1. 親リージョンがオフラインに
2. .META. に記録して HMaster に通知
3. HMaster が新規リージョンをアサイン
- この間このリージョンへの読み書きは一時停止
- クライアントは子リージョンがオンラインになるまで待ち。
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
HBase の操作
書き込み
読み込み
その他
HBaseプログラミング > 実装 > その他
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
インストールファイルのダウンロード
解凍
起動 (スタンドアロンモード )
http://www.apache.org/dyn/closer.cgi/hbase/ から適当なミラーサーバーを選択し、
最新のファイルをダウンロード。 (2010/7/24 現在、0.20.5 が最新安定版 )
適当なディレクトリに解凍。
% pwd/usr/local% tar zxvf /path/to/hbase-0.20.5.tar.gz% ln -s hbase-0.20.5 hbase% mkdir hbase/logs
% /usr/local/hbase/bin/start-hbase.sh
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
最小設定(擬似分散モード)
最小設定(完全分散モード)
HBaseプログラミング > インストール
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
最小設定 ( 擬似分散モード )
hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property></configuration>
hadoop-env.sh
export HADOOP_CLASSPATH=/usr/local/hbase/conf :/usr/local/hbase/hbase-0.20.5.jar :/usr/local/hbase/lib/zookeeper-3.2.2.jar
hbase-env.sh
export HBASE_CLASSPATH=/usr/local/hadoop/conf
HBaseプログラミング > インストール > 最小設定(擬似分散モード)
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
最小設定(擬似分散モード)
最小設定(完全分散モード)
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
最小設定 ( 完全分散モード )hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://node0:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>node0</value> </property></configuration>
regionservers
rs01rs02・・・
HBaseプログラミング
HBase とは
データモデル実装
インストール
デモ
問題点とトピックス
最小設定(擬似分散モード)
最小設定(完全分散モード)
HBaseプログラミング > インストール > 最小設定(完全分散モード)
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
Demoやること
Twitter Streaming API からデータ取り込み
取り込んだデータを MapReduce で解析
データモデル
- 言語 (user:lang) で集計- ソース (status#source) で集計- ハッシュタグ (status#textから抽出) で集計
Column "user:" Column "status:" Row Key ts
"000000000059e658" Status
Status
"status:0000000466161916"
"status:0000000465e3d8a1"5891672L
"Takuya UESHIN"
"user:id"
"user:name"
"ja" "user:lang"
・・・
t1
t2
http://stream.twitter.com/1/statuses/sample.xml?delimited=length
http://hadoop.happy-camper.st/browser/trunk/hbase-twitter
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング > デモ
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング
問題点
ファイルディスクリプタの枯渇
メモリ設定
- メモリを大量に使います。
- スワップアウトが起きない範囲でできるだけ大きく設定する。
- Region Server、HDFS Data Node、Hadoop Task Tracker を同居させるなら最低でも 8GB。
- データファイルをオープンしたまま。
- ファイルシステムの ulimit を超えがち。
- ファイルディスクリプタの ulimit の値を増やす必要がある。
などなど、設定、大変みたいです。。。
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング
トピックスApache Top Level Project へ昇格 (2010/03/10)
Pig/Hive インテグレーション
0.20.6 リリース準備中。
- 7/26 まで VOTE やってます
バージョンのつけ方が変わります。
- 0.20 現安定版
- 0.89 開発版
→ 0.90、1.0 へ
- Twitter で Pig と HBase の統合を開発中
- Facebook で Hive と HBase の統合を開発中
などなど、大手も力入れてます。
Presented: 07/24/2010Copyright © 2010 Happy-Camper Street.
Presentation Demo
Presented: 07/24/2010
ご静聴ありがとうございました。
HBaseプログラミング
HBase とは
データモデル
実装
インストール
デモ
問題点とトピックス
HBaseプログラミング