34
Apache HBase 入門 (第1回) “Big Data”のための Hadoop データベース by Tatsuya Kawano < http://twitter.com/tatsuya6502 > Hadoop ソースコードリーディング 東京, #2, 2010年5月27日

Apache HBase 入門 (第1回)

Embed Size (px)

Citation preview

Page 1: Apache HBase 入門 (第1回)

Apache HBase 入門 (第1回)“Big Data”のための Hadoop データベース

by Tatsuya Kawano <http://twitter.com/tatsuya6502>Hadoop ソースコードリーディング 東京, #2, 2010年5月27日

Page 2: Apache HBase 入門 (第1回)

[ ]自己紹介 Twitter: @tatsuya6502

証券会社の グローバル IT部門に勤務シニア Java / Scala デベロッパー

個人研究として、2009年秋からHBaseを評価中

グラフィックデザイナーでもあるニューヨークの美大 Pratt Institute を卒業し数年間、現地アメリカ企業に勤務

HBase エバンジェリスト!

Page 3: Apache HBase 入門 (第1回)

[ ]内容

HBaseの特徴

ユースケース(ユーザー事例)

次回以降【6月】HBase と Cassandra ̶ トレードオフを理解する【7月】はまりやすい落とし穴【7月】ロードマップ

Page 4: Apache HBase 入門 (第1回)

[ ]HBaseとは?Hadoop データベース

ランダムアクセス、シーケンシャルアクセス共に低レイテンシで行えるデータストア

Hadoop 分散ファイルシステム(HDFS)上に構築

Google Bigtableを参考に設計された

柔軟なテーブル構造、カラムファミリー指向

Bigtable と HBase の主なターゲットは “big data”

リアルタイムのウェブと、Map Reduce (MR) 処理の両方に対応可能。HBase では、これらを同時に扱える

Page 5: Apache HBase 入門 (第1回)

[ ]Big Dataへの道のり

あなたは、MySQLを使いこなして、1,000万件のウェブテーブルを提供することに成功しました

もちろん、ビジネスは大成功!

ウェブAPサーバーを数台追加したところreadとwriteがもの凄いペースで行われるようになった

テーブルはどんどん膨れ上がり、やがて1億件に(10倍)

Page 6: Apache HBase 入門 (第1回)

[ ]10倍 ‒ 便利な機能を切り捨てる大量 read ̶ memcached を採用。データの一貫性を失った

大量 write ̶ 二次インデックスを廃止した

クエリプランの改善を試みるが、いうことを聞かず

テーブルの結合(join) に負荷が集中。非正規化を行いリレーションを廃止した

何とか乗り切ることができた!しかし、もし、10億件(元の100倍)に達したら?

Page 7: Apache HBase 入門 (第1回)

[ ]100倍 ‒ シャーディング

データベースサーバーを増やして対応する

テーブルを N個に分割(例、N = 10)

N x 2 ノード(20ノード)の MySQL クラスターを構築。個々のパーティションを、それぞれのノードに割り当てる

これにより、ACID属性が失われた

そして最後は、5倍の大きさ(元の500倍)に達した

Page 8: Apache HBase 入門 (第1回)

[ ]500倍 ‒ 【再】シャーディング!10 x 5 x 2 = 100 ノードの新しい MySQL クラスターを構築

50億レコードを再移行

ダウンタイム? ̶ どのくらいの時間、停止するか?

Page 9: Apache HBase 入門 (第1回)

[ ]もう、お手上げかも...

50億件のテーブルで、カラムの追加・削除・変更をしたい?ダウンタイム?

100ノードあると、故障の頻度は?

Page 10: Apache HBase 入門 (第1回)

[ ]HBaseの出番自動シャーディング

柔軟性のあるテーブル構造

インデックスを持たない。行(row) はキー順に格納される

単純化されたクエリ。SQLはサポートしない

Hadoop Map Reduce (MR) をネイティブにサポート

強い一貫性(strong consistency) と CAS操作

高可用性 (HA) ̶ 故障を優雅に扱う

クラスターのモニタリングと管理機能

Page 11: Apache HBase 入門 (第1回)

[ ]自動シャーディングテーブルは、リージョンという単位に自動的に分割される

リージョンは、リージョンサーバー(RS) と呼ばれるワーカーノードにランダムに割り当てられる

1台のRSに、数十~数百のリージョンが載る

リージョンが大きくなると、自動的に再分割される

RSを何台か追加することで、より高い負荷に対応できる。 HBaseは、数千台のRSでもリニアにスケールする(Bigtableで 1000 TB 超の実績あり)

Page 12: Apache HBase 入門 (第1回)

[ ]自動シャーディング (続き)

Page 13: Apache HBase 入門 (第1回)

[ ]柔軟性のあるテーブル構造行(row) を書き込むとき、自由にカラムを追加できる

不在のカラム (値が NULL のカラム) はディスクスペースを消費しない

カラムのデータ型は Byte配列

Avro、Protobuf、MessagePackなどを使えば1つのカラムに複数の値を格納できる

非正規化したテーブルの格納に最適

本当の意味のインデックスを持たない。行はキー順に格納

DIY: 追加テーブルで、二次インデックスが実現できる

Page 14: Apache HBase 入門 (第1回)

[ ]単純化されたクエリHBase は SQL に対応していない

Put: 行の追加または更新

Get: 行の取得

Scanner + サーバー側 Filter: 指定した範囲の一連の行を取得

Delete: 行の削除

結合(join) や group by は用意されていない

DIY: テーブルの非正規化で対応できる。MR と Cascading で事前に非正規化

Page 15: Apache HBase 入門 (第1回)

[ ]強い一貫性 (strong consistency)行に関する操作はアトミック

更新前の古いデータが見えることはない

CAS (Check and Save) 操作

checkAndPut(row, cf, qual, oldValue, newValues)ユニーク値制約(例、emailの重複不可)

楽観的ロック(optimistic locking)

incrementColumnValue(row, cf, qual, incr)カウンターや連番

Page 16: Apache HBase 入門 (第1回)

[ ]クラスターのモニタリングと管理機能

HBase Region Server と HDFS Data Node の統計情報をモニタリング可能:Ganglia、JMX、ウェブコンソール

hbase shell 経由で様々なメンテナンス操作が可能

Page 17: Apache HBase 入門 (第1回)

[ ]HBase クライアントAPIネイティブ Java API

もちろん他の JVM 言語も利用可能 Closure、Scala、JRuby など

ゲートウェイアクセス

Thrift PHP、Python、C++ など

REST JSON, XML, Protbuf、    バイナリーエンコーディングなどをサポート

ゲートウェイアクセスでは、大きなレイテンシは見られないが、大量の write / read ではおすすめしない

Page 18: Apache HBase 入門 (第1回)

[ ]パフォーマンス特性Random Write: 驚異的!Sequential Read: 優秀!HTable#setScannerCaching(n) を大きくする

Sequential Write: いまいち負荷を分散する代わりに、1台のRSに負荷を集中させている状態レコードの順序をシャッフルするか、行キーにランダムな要素を加える(例、後半にハッシュ値を付ける)

Random Read: 悪い (特にベンチマーク)ディスクドライブを追加するLRU ブロックキャッシュのサイズを大きくする

Page 19: Apache HBase 入門 (第1回)

[ ]ユースケース

Page 20: Apache HBase 入門 (第1回)

[ ]巨大データベースでオンラインアクセスとMRバッチを同時処理数十億を超える行を格納

無数のクライアントからのオンラインCURD操作

MRバッチ処理を継続的に実行し、データのインポートや分析を実施

Page 21: Apache HBase 入門 (第1回)

[ ]Big Dataに対するMRバッチMRバッチを実行してキーワードインデックスや全文検索用インデックスを作成リコメンデーションを算出様々なレポートや、OLAP Cubeなどを生成

Page 22: Apache HBase 入門 (第1回)

[ ]Big Dataに対するMRバッチ (続き)MRバッチの実行時、ウェブクライアントのレスポンスを悪化させる心配をあまりしなくてよい夜間バッチに制限しなくてよい。頻度を増やして、ほぼリアルタイムな処理も可能ただし、十分な台数のディスクが必要 (1ノード 4~12台)I/Oが非常にヘビーな MRバッチでは、ウェブクライアントのレスポンスに影響を与えることもある

Page 23: Apache HBase 入門 (第1回)

[ ]StumbleUpon “Su.pr”Su.pr はコンテンツのリコメンデーションエンジンを備えた唯一の短縮 URL サービス

リアルタイムの分析処理はウェブからのデータ更新時に実行

さらに深い分析では Cascading と MR バッチを使用

Page 24: Apache HBase 入門 (第1回)

[ ]Su.pr ウェブアクセスThriftゲートウェイを使用し、PHPコードから HBaseにアクセス

HBaseの組み込みキャッシュのみで運用

これにより、強い一貫性(strong consistency) が保てる

memcachedなどを使うと、キャッシュした値の無効化に気を遣う必要がある

Page 25: Apache HBase 入門 (第1回)

[ ]Su.pr ‒ 巨大なデータを格納90億行、1.3 TB のデータを HBase に格納

700 GBのテーブルを、約20分で MR できる

毎秒 600万行

Page 26: Apache HBase 入門 (第1回)

[ ]Socorro では 週250万件の Firefox クラッシュレポートを受信

1日あたり 350 GB のデータが登録される

現行システムでは、そのうちの 15%しか処理できない

NSF: 単一ノードであることがボトルネックになり、バッチ処理がスケールしない

RDB: この規模のデータを格納することは非現実的

Socorro: Mozillaクラッシュレポート

Page 27: Apache HBase 入門 (第1回)

[ ]Socorro: HBase & MRへ移行現在、HBase と MR による新しいシステムへ移行中

全てのクラッシュレポートは、すでに HBase にも格納されている

2010年の第2四半期(6月の終わり)までにクラッシュレポートの MRによる分析処理を開始

これにより、全てのクラッシュが分析可能に

将来はさらに複雑な分析をする方向で検討中

全文検索、faceted search (多面的・横断検索)、“クラッシュの爆発的増加” の発見など

Page 28: Apache HBase 入門 (第1回)

[ ]MRバッチの能力を拡張するHBaseをデータソースに設定し、HDFSでは不可能な処理を実現HDFSファイルでは書き込みは1度きり。ファイルの一部を書き換えたりできないインデックスがないので、キーによるランダムなルックアップができない

Page 29: Apache HBase 入門 (第1回)

[ ]MRバッチの能力を拡張する (続き)

HBaseで解決できるTwitterでは、People Searchの下準備としてHBase上のデータソースのカウンター値を更新しながらMRを実行Yahoo! では、文書の重複検出を行うためにHBase と MRを活用。ほぼリアルタイムで処理

Page 30: Apache HBase 入門 (第1回)

[ ] Pig や Hive との統合HBaseを直接使うのではなく、Pig や Hiveの性能を向上させるため、縁の下の力持ちとして活用Twitter ̶ Pig と HBaseの統合を開発中1日に 7 TB のデータが発生1日あたり20,000ジョブを実行ちなみに、全データでツィートが占める割合は 0.5%すでに、MR から HBase を使っているが、現在、Pig から使えるよう開発中

Page 31: Apache HBase 入門 (第1回)

[ ] Pig や Hive との統合 (続き)Facebook ̶ Hive と HBaseの統合を開発中現状は、2,000台の Hadoop MR/HDFSクラスタで運用2009年の終わりには、1日に12 TB のデータが発生1日あたり7,500ジョブを実行200人を超えるユーザー。最新データですぐ結果がほしい

Hive + HBase の統合機能を、20ノードクラスター6 TB のデータでテスト中

低レイテンシなウェアハウスの実現へ!

Page 32: Apache HBase 入門 (第1回)

[ ]その他のユーザーAdobe Systems

Meetup

Ning, SNS SaaS

Karooga, Photo Album Discovery

HBase PoweredByページhttp://wiki.apache.org/hadoop/Hbase/PoweredBy

Page 33: Apache HBase 入門 (第1回)

[ ]なぜ Big Dataなのか?Twitter、Facebook、Yahoo! が大量データを扱うのは当然。私たちの業務には大げさでは?

いままで、コストの面から保存できず、捨てていたデータはないだろうか?

例:過去10年の小売り情報

Hadoopの登場によって、データを保管したり、Pig や Hiveによるアドホックな分析が実現できる時代になった

まず、データを貯めることから始めてみる

MRで分析し、その結果を HBase で社内提供してもよい

Page 34: Apache HBase 入門 (第1回)

[ ]困ったとき、質問は

HBase は、初期設定のままではうまく動かないのが普通?あきらめる前に質問してください

Hadoop ユーザー会 http://hugjp.org/

nosql-ja http://groups.google.com/group/nosql-ja

エバンジェリスト氏に直接質問もOK(お気軽にどうぞ)http://twitter.com/tatsuya6502

回答内容をブログなどにまとめてもらえると嬉しいです!