68
Apache HBase Committerによる Apache HBase/Apache Phoenixの最新情報 Cloudera Apache HBase Committer 鈴木 俊裕 (すずき としひろ)

Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

  • Upload
    others

  • View
    26

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBase Committerによる

Apache HBase/Apache Phoenixの最新情報

ClouderaApache HBase Committer鈴木 俊裕 (すずき としひろ)

Page 2: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

自己紹介• 鈴木俊裕 (すずきとしひろ)

• Apache HBase Committer

• Cloudera• Staff Software Engineer

• サポートチームで働いています

• エスカレーションされたサポートチケットのトラブルシューティング

• プロダクトのバグフィックス(主にHBase/Phoenix)

• 著書「HBase徹底入門」

Page 3: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

アジェンダ• Apache HBaseについて

• HBase on Cloud

• HBaseの最新運用ツール

• Apache Phoenixについて

Page 4: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBaseについて

Page 5: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBaseとは• Googleの分散DBである「BigTable」のオープンソースクローン

• ほとんどがJavaで実装されている

Page 6: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBaseの特徴• スケーラブル

• 自動シャーディング

• TableをRegionという単位に分割して管理

• 大規模データに対応

• 高可用性

• 自動フェイルオーバー機能

• ハイパフォーマンス

• LSM-tree(Log Structured Merge Tree)

• 特に書き込みが速い

• 読み込みも低レイテンシ (BlockCache/BucketCache)

Page 7: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBaseのシステム構成• マスタ型• Master

• RegionServerの管理やRegionのアサインなど

• 冗長化可能

• RegionServer• アサインされたRegionを管理する

• クライアントと実際にデータのやり取り (Masterは介さない)

Master

RegionServer RegionServer

Zookeeper

HDFS

・・・RegionServer

Page 8: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache HBaseのシステム構成• Zookeeper• 障害検知や各コンポーネント間のコーディネーション

• HDFS(Hadoop Distributed File System)上に構築されている

• (デフォルトで)レプリカを3つ持つので信頼性が高い

• HBaseのデータの信頼性はHDFSに依存している

Master

RegionServer RegionServer

Zookeeper

HDFS

・・・RegionServer

Page 9: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud

Page 10: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• これまでは、HBaseは主にオンプレミス環境下で構築・運用されることが多かった

• 近年のクラウドの普及によりIaaS (Amazon EC2, Google Compute Engine, Microsoft Azure Compute)上にHBaseを作るという選択肢

• クラウドのメリット

• 初期費用が安い

• 管理・運用コストを削減できる等

Page 11: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• HBaseをクラウド上で動かすためのチャレンジ

• IaaSの一般的な料金体系は稼働時間に対しての従量課金

• 料金を安くするために、Amazon EC2ではスポットインスタンスがある

• 使われていないEC2インスタンスに値段をつけ、その入札価格が現在のスポット価格を上回っている限り、そのインスタンスを利用することができる

• 料金を安くするためにスポットインスタンスを使いたいが、意図しないタイミングでインスタンスが中断してしまう可能性がある

Page 12: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• HBaseをクラウド上で動かすためのチャレンジ

• スポットインスタンスでHDFS を運用する場合

• スポットインスタンスが中断して、DataNodeが落ちると、ブロックのコピーが発生してしまう

• スポットインスタンスが中断される前に通知はくるが、それからDataNodeのデコミッションをしても間に合わない

• 対策として、Amazon EBS (Elastic Block Store)やGoogle Persistent Storageを使ったらデータロス・コピーは防げるが、料金が高くなってしまうことがある

Page 13: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• HBaseをクラウド上で動かすためのチャレンジ

• そこで、Amazon S3やGoogle Cloud Storage等のオブジェクトストアサービス

• Amazon EBSやGoogle Persistent Storageと比べて安い

• しかし、 Amazon S3やGoogle Cloud StorageはHDFSに比べて弱い整合性モデルを採用している

• HBaseに完全にフィットしない

Page 14: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

RegionServerRegion

HBase on Cloud• HBaseをクラウド上で動かすためのチャレンジ

• HBaseはStoreFileとWAL (Write Ahead Log)をHDFSに書き込む

• WAL:ログファイル。クラッシュ時にMemStoreのリカバリに必要

• StoreFile:データファイル

HDFSHFile

HFileStoreFile

WAL

Puts MemStore

Flush

Client

Page 15: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• HBaseをクラウド上で動かすためのチャレンジ

• WAL• Short-lived, Sub-second durability requirements

• オブジェクトストアを使うことができない (Azure Blob Storage (Page blob)/Azure Data Lake Storeは使用可能)

=> HDFS or Ratis LogService backed WALs (WIP)

• StoreFile• イミュータブルでキャッシュ可能

• 弱い整合性モデルのオブジェクトストアを使うことができる

• ただし、そのままでは使うことができない

=> HBOSS (HBase Object Store Semantics)

Page 16: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• HBase Object Store Semanticsの略

• Apache HBaseのサブプロジェクト

• https://github.com/apache/hbase-filesystem/tree/master/hbase-oss

• HBaseでオブジェクトストアを使うためのソリューション

• これを用いてStoreFileをオブジェクトストアに保存できる

• WALに関しては対象外

Page 17: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• 現在のところAmazon S3 (S3Aクライアント)でのみテストされているので、ここからはS3に特化した話になります

• テストはされてないが、理論的にはGoogle Cloud Storageやその他のオブジェクトストアでも動作可能

Page 18: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• Amazon S3• AWSが提供するオブジェクトストアサービス

• 高いスケーラビリティ、可用性、耐障害性

• 主に保存されたデータサイズと、リクエストに対して課金

• ファイルシステムではない

• あくまで保存される単位はオブジェクト

• ディレクトリはない

• S3Aクライアント

• S3のHadoop Filesystem API実装の1つ

• S3をファイルシステムのように扱うことができる

• あくまでもバックエンドはオブジェクトストア

Page 19: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• Amazon S3の整合性モデル

• 新規オブジェクトのPUT:書き込み後の読み込み整合性

• PUTしたオブジェクトを直後にGETすると一貫した結果が得られる

• PUTおよびDELETEの上書き:結果整合性

• 既存オブジェクトをPUTしてGETすると古いデータが返却される場合がある

• 既存オブジェクトをDELETEしてGETすると削除済データが返却される場合がある

Page 20: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• Amazon S3の整合性モデル

• オブジェクトの LIST:結果整合性

• 新規オブジェクトをPUTして直後にLISTすると、追加されたオブジェクトがリストに含まれない場合がある

• 既存オブジェクトをDELETEして直後にLISTすると、削除済のオブジェクトがリストに含まれる場合がある

• 参考:S3 整合性モデルと Hadoop/Spark の話

• https://www.slideshare.net/ssuserca76a5/s3-hadoopspark

Page 21: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• HBaseは各オペレーションがアトミックになることを想定している

• S3の結果整合性を採用した整合性モデルでは、エラーが発生したり、最悪の場合データロスが起こる可能性がある

Page 22: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• S3Guard• S3Aクライアントの機能

• S3の結果整合性問題を軽減するためのソリューション

• Amazon DynamoDBをメタデータストアとして使う

• S3へのアクセスを減らすこともできるので、パフォーマンスも改善する

Page 23: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• S3Guard• PUTやDELETEのオペレーションをするときにメタデータストア

(DynamoDB)を更新する

• PUT時はそのメタデータをメタデータストア(DynamoDB)に追加

• DELETE時は削除マーカーをメタデータストア(DynamoDB)に追加

• GET/LISTするときにはメタデータストア(DynamoDB)を参照する

• 整合性が取れた状態の結果が取得できる

• S3のアクセスも減らすことができるのでパフォーマンスも改善

Page 24: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• S3Guardでできないこと

• 更新されたデータの整合性の保証

• 更新されたデータにアクセスすると古いデータが返ってくることがある

• これがWALでS3を使うことができない理由

• ディレクトリのRename時の整合性の保証

• ディレクトリのRename中の不整合な状態が見えてしまう

• 途中で失敗した場合は不整合な状態になってしまう

Page 25: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• HBOSSはStoreFileの保存で必要な整合性と、S3Guardでできないことのギャップを埋めるためのソリューション

• ディレクトリのRename時の整合性の保証

• Hadoop Filesystem APIを実装していて、オブジェクトストアに分散ロック機構を追加する

• 各オペレーション時にファイルパス階層構造に合わせたロックを取る

• ディレクトリのRenameを含むStoreFileの保存で必要なファイルシステム系のオペレーションをアトミックにする

Page 26: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• 分散ロックの実装

• Null Implementation• テスト用のモック

• Local Implementation• 開発用の実装。スタンドアロンな環境で使える

• Zookeeper Implementation• 本番用を想定された実装

• ZookeeperはHBaseで使っているものを使う想定 (2重に立てる必要はない)

• DynamoDB Implementation (未実装)

• S3GuardでDynamoDBを使うので、それを使った実装を想定

• ただし、DynamoDBには、ロックの階層構造のトラバースの効率的な方法がない

Page 27: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• StoreFileにオブジェクトストアを使うメリット

• Amazon EBSやGoogle Persistent Storageに比べてコストが安い

• ストレージとコンピューティングノードを分離できる

• HBaseにアクセスしないときには、コンピューティングノードをシャットダウンできる (コスト削減)

• 使いたいときに同じS3上のデータを参照して起動すればよい

• コンピューティングノードにスポットインスタンス等の安価なインスタンスを使用しやすくなる

Page 28: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBOSS• 課題

• HDFSに比べてS3にアクセス時のレイテンシが高い

• S3のレイテンシは数十ミリ秒から数百ミリ秒

• HDFSのレイテンシは数ミリ秒以下

• BlockCache/BucketCacheで軽減

• 現時点ではディレクトリのRenameの失敗時に不整合な状態になってしまう問題は解決できていない

Page 29: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBase on Cloud• まとめ:現在のクラウド用のHBaseの構成

• HBOSS (StoreFile) + HDFS (WAL)

Page 30: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBaseの最新運用ツール

Page 31: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBaseの最新運用ツール• HBCK2• HBase-2.xからのクラスタ修復ツール

• hbtop• UnixのtopコマンドライクなHBaseメトリクスのリアルタイムモニタリングツール

Page 32: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• HBase-1.xではHBCK(1)

• HBaseのメインプロジェクトに同梱されていたクラスタ修復ツール

• レポーティングと修復系(-fix* オプション)の機能がある

• HBase-2.xでは修復系のオプションが使えなくなっている

• レポーティングの機能は引き続き使える

Page 33: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• HBase-2.xではHBCK2

• HBaseのメインプロジェクトとは別のプロジェクトで管理されている

• https://github.com/apache/hbase-operator-tools

• HBaseに同梱されてないので注意

• これまでは、自分でビルドする必要があったが、v1.0.0がリリースされたので下記からダウンロード可能

• https://repo1.maven.org/maven2/org/apache/hbase/operator/tools/hbase-hbck2/1.0.0/

Page 34: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• なぜHBCK2が開発されたのか

• HBase-2.xで、Regionのアサイン周りの安定性の改善のためにAssignmentManager v2が再開発された

• HBCK(1)は、AssignmentManager v1を前提としているので使えなくなった

• レポーティング機能は引き続き使える

• AssignmentManager v2のために開発されたのがHBCK2

• HBCK2の使い方

• $ hbase hbck -j hbase-hbck2-1.0.0.jar <COMMAND> <ARGS>

Page 35: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• 現時点(2019-09-27)のHBCK2のコマンド

• assigns• unassigns• bypass• setTableState• setRegionState• filesystem• replication• scheduleRecoveries• fixMeta• reportMissingRegionsInMeta• addFsRegionsMissingInMeta

• コマンドの詳細はREADMEへ

• https://github.com/apache/hbase-operator-tools/blob/master/hbase-hbck2/README.md

• HBaseのバージョンによっては使えないコマンドもある

Page 36: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• HBCK2のよくあるユースケース

• META/NAMESPACEテーブルのRegionがアサインされない

• 原因:/hbase/MasterProcWALsの破損や手動削除

• HBCK2コマンド

• $ hbase hbck -j hbase-hbck2-1.0.0.jar assigns 1588230740

• NAMESPACEテーブルのRegionがアサインされない場合も同様

WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,,1.1588230740 is NOT online; state={1588230740 state=OPENING, ts=1550754721289, server=regionserver01.example.com,16020,1550676598448}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

Page 37: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• HBCK2のよくあるユースケース

• Region-In-Transition問題

• 原因:複数のRegionServerがダウンしたときなど

• HBCK2コマンド

• $ hbase hbck -j hbase-hbck2-1.0.0.jar assigns 11bf6b18ddacdd864728e6cf1199b2a7

WARN org.apache.hadoop.hbase.master.assignment.AssignmentManager: STUCK Region-In-Transition rit=OPENING, location=regionserver01.example.com,16020,1542314816394, table=hbase:acl, region=11bf6b18ddacdd864728e6cf1199b2a7 … WARN org.apache.hadoop.hbase.ipc.RpcServer: Dropping timed out call: callId: 702 service: ClientService methodName: Mutate size: 272 connection: 1.1.1.1:56492 deadline: 1542316740911 param: region= hbase:meta,,1, row=hbase:acl,,1404406671604.11bf6b18ddacdd864728e6cf1199b2a7. connection: 1.1.1.1:56492

Page 38: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

HBCK2• HBCK2のよくあるユースケース

• テーブルの状態がおかしい

• 原因:テーブルのdisable/enableがハング

• hbase> scan 'hbase:meta', {COLUMN => “table:state”}

• hbase> enable ‘usertable’

• HBCK2コマンド

• $ hbase hbck -j hbase-hbck2-1.0.0.jar setTableState usertable DISABLED

column=table:state, timestamp=1555406568751, value=\x08\x03

ERROR: Table tableName=usertable, state=ENABLING should be disabled!

Page 39: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

hbtop• Unixのtopコマンドライクなツール

• CLIツール

• 一定時間毎に画面がリフレッシュされて、現在のメトリクスを見ることができる

• HBaseメトリクスのリアルタイムモニタリングができる

• Introduction "hbtop", a real-time monitoring tool for HBase modeled after Unix's 'top' command• https://blogs.apache.org/hbase/entry/introduction-hbtop-a-

real-time

Page 40: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

hbtop• デモ

• hbtopの画面

• Namespace/Table/RegionServer/Region モード

• ソートフィールドの変更

• フィールドの表示・非表示

• フィールドの並び替え

• フィルタ

• ドリルダウン

Page 41: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

hbtop• 今後の展望

• branch-1 (HBase-1.x)へのサポート (WIP)

• メトリクスの追加

• レスポンスタイムのメトリクス

• ColumnFamily/User/Operation(GET, PUT, SCAN, etc)単位のメトリクス

• システム系メトリクス(CPU, Memory, etc.)

Page 42: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache Phoenixについて

Page 43: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Apache Phoenixとは• HBaseでSQLを使えるように

• SQLを用いてデータの定義や操作をすることができる

• もともとはSalesforceで開発されていた

• HBaseのデータに対して低レイテンシでアクセス

• クエリエンジンがSQLをHBase API (Put, Delete, Scan)に変換して実行される

• JDBCをサポートしている

• セカンダリインデックス、Join、Group by等の機能を持っている

Page 44: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

なぜPhoenixか• HBase APIを直接使ってコードを書くよりシンプルになる

• SELECT COUNT(*) FROM WEB_STAT WHERE HOST='EU' and CORE > 35 GROUP BY DOMAIN;

• SQLからパフォーマンス最適化が可能

• 統計情報を使った並列スキャン

• セカンダリインデックスの使用

• サーバサイド push down

• Filters, Skip scans, Partial aggregations, TopN, Hash joins

Page 45: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixには向いていないこと• 広範囲のスキャンを伴うクエリ

• ETL• データのクレンジング・変換

Page 46: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenix Semantics Support Semantics Supported?

UPSERT/DELETE Yes

SELECT Yes

WHERE/HAVING Yes

GROUP BY, ORDER BY Yes

LIMIT Yes

VIEWS Yes

JOINS Yes

TRANSACTIONS Yes (Experimental)

Page 47: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのアーキテクチャ

HBase Client

RegionServer RegionServer RegionServer

HDFS

ZooKeeper

ZooKeeper

ZooKeeper

Master

Master

Phoenix CoProc

Phoenix JDBC

Application

Phoenix CoProc Phoenix CoProc

Page 48: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル

HBase Table

• HBaseのテーブルにマッピングされる

Page 49: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Page 50: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3

Page 51: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Page 52: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Page 53: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Row Key 3 KeyValue

Page 54: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 Value

Row Key 2 Value Value

Row Key 3 Value

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 Value

Row Key 2 Value Value

Row Key 3 Value

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Row Key 3 KeyValue

Multiple Versions

Page 55: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Row Key 3 KeyValue

Phoenix Table

Page 56: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Row Key 3 KeyValue

Phoenix Table

Columns

Page 57: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• HBaseのテーブルにマッピングされる

HBase TableColumn Family A Column Family B

Qualifier 1 Qualifier 2 Qualifier 3Row Key 1 KeyValue

Row Key 2 KeyValue KeyValue

Row Key 3 KeyValue

Phoenix Table

ColumnsPrimary Key Constraint

Page 58: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• 例)SERVER_METRICS テーブル

Row Key

SERVER_METRICS

HOST CHAR(2)

DOMAIN VARCHAR

FEATURE VARCHAR

DATE DATE

USAGE.CORE BIGINT

USAGE.DB BIGINT

STATS.ACTIVE_VISITOR INTEGER

Page 59: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• 例)SERVER_METRICS テーブル

SERVER_METRICS

HOST CHAR(2)

DOMAIN VARCHAR

FEATURE VARCHAR

DATE DATE

USAGE.CORE BIGINT

USAGE.DB BIGINT

STATS.ACTIVE_VISITOR INTEGER

Key Values

Column Family

Page 60: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixのデータモデル• 例)SERVER_METRICS テーブル

CREATE TABLE SERVER_METRICS ( HOST CHAR(2) NOT NULL, DOMAIN VARCHAR NOT NULL, FEATURE VARCHAR NOT NULL, DATE DATE NOT NULL, USAGE.CORE BIGINT, USAGE.DB BIGINT, STATS.ACTIVE_VISITOR INTEGER CONSTRAINT PK PRIMARY KEY (HOST, DOMAIN, FEATURE, DATE) );

Page 61: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• セカンダリインデックス

• 一般的なRDBと同様に、クエリの効率を上げるためにセカンダリインデックスを作ることができる

• TableかViewに対して作ることができる

• 基本的にはCREATE INDEX文を発行後に自動的に構築される

• SELECT時にクエリエンジンが最適なインデックスを選択する

• HINTを指定することも可能

Page 62: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• セカンダリインデックス

• GLOBAL INDEX• 読み込みが多いワークロードに向いている

• Coprocessorを使ってインデックスを構築する

• インデックス用に別テーブルが作成される

• 書き込み時に複数のテーブルに書かれる

• 読み込み時は1つのテーブルへ

• INCLUDEを指定してインデックスに含めるカラムを指定できる (COVERED INDEX)

Phoenix> CREATE INDEX index_name ON table_name (indexed_column1, indexed_column2, ...) [INCLUDE (covered_column1, covered_column2, ...)]

Page 63: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• セカンダリインデックス

• LOCAL INDEX• 書き込みが多いワークロードに向いている

• インデックス用の新しいColumnFamilyが作成される

• 書き込み時は1つのRegionへ

• 読み込み時には、基本的に複数のRegionにアクセスする

Phoenix> CREATE LOCAL INDEX index_name ON table_name (indexed_column1, indexed_column2, ...)

Page 64: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• Phoenix Query Server• PhoenixのHTTPゲートウェイ

• クエリはPhoenix Query Server経由で発行される

• JVM言語以外のアプリケーションからもアクセスできる

• Phoenix Query Server用のJDBCドライバ

Page 65: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• View• PhoenixはViewもサポートしている

• 現在のところ1つのテーブルへのViewのみサポート

• 条件によってRead-only ViewかUpdatable Viewになる

• Updatable Viewの例

Phoenix> CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS SELECT * FROM product_metrics WHERE metric_type = ‘m';

Phoenix> UPSERT INTO mobile_product_metrics(created_by, create_date, metric_id, carrier, dropped_calls) VALUES('John Doe', CURRENT_DATE(), NEXT VALUE FOR metric_seq, 'Verizon', 20);

Phoenix> CREATE VIEW view_name AS SELECT column(s) FROM table_name [WHERE condition]

Page 66: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

Phoenixの機能• Transaction• Apache TephraとApache Omidを使ったトランザクション実装

• どちらの実装もトランザクションマネージャーが必要

• まだ、プロダクションレディではない

Transaction Manager(Active)

Transaction Manager(Standby)

HBase

ZooKeeper

Client

Page 67: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

まとめ• Apache HBaseについて

• HBase on Cloud• StoreFileのためのHBOSS

• HBaseの最新運用ツール

• HBCK2:HBase-2.xからのクラスタ修復ツール

• hbtop:UnixのtopコマンドライクなHBaseメトリクスのリアルタイムモニタリングツール

• Apache Phoenixについて

Page 68: Apache HBase Committerによる Apache HBase/Apache Phoenix …€¦ · Apache HBaseのシステム構成 • Zookeeper • 障害検知や各コンポーネント間のコーディネーション

おわり• ご清聴ありがとうございました