IT Cutting Edge ─世界を変えるテクノロジの最前線

第6回 Hiveでボトルネックとなってきたメタデータ,HBaseを使ってレイテンシの改善に挑む ―「Hadoop Summit 2016 San Jose」から

この記事を読むのに必要な時間:およそ 3 分

トランザクションをどう実装するか

メタストアが抱えている課題に対し,HortonworksらのHiveコミュニティメンバーが取り組んでいるのが,同じHadoopエコシステムのNoSQLストレージ技術であるHBaseとの連携です。つまり一般的なRDBMSだけでなく,HBaseをメタストアリポジトリとして活用する試みです。Hortonworksはこれを「HBase MetaStore」と呼んでいます。ビッグデータ化が進むメタデータを,ビッグデータの扱いを得意とするNoSQLで処理するというのは非常に興味深い着眼点です。

具体的なアーキテクチャとしては,Hiveクライアントとバックエンド(メタストアリポジトリ)をつなぐThriftサーバ上にインタフェース(RowStoreインタフェース)を実装する際,その実装クラスとしてRDBMSと接続するためのObjectStoreのほかに,HBaseと接続するためのHBaseStoreも実装し,新たに「HiveMetaStore Thrift Server」として機能させることを目的としています。

HBase MetaStoreのアーキテクチャ。通常はクライアントとバックエンドの間にThriftサーバを挟んでメタストアを利用するが,バックエンドにHBaseを利用できるよう,HBaseStoreを実装し,さらにトランザクションレイヤのOmidを介している

HBase MetaStoreのアーキテクチャ。通常はクライアントとバックエンドの間にThriftサーバを挟んでメタストアを利用するが,バックエンドにHBaseを利用できるよう,HBaseStoreを実装し,さらにトランザクションレイヤのOmidを介している

しかしここで問題になってくるのは,NoSQLデータベースであるHBaseはトランザクションレイヤをもたないことです。HBase MetaStoreはアトミックであることが求められます。テーブルやパーティションが作成されるたびに,そのデータを格納するストレージもディスクリプタによってひもづけられ,テーブル定義に変更があればパーティションも変更されます。トランザクションをサポートしないHBaseでは,これらが完全には担保されません。

これを解決するためにHBase MetaStoreでは,Thriftサーバとバックエンド(HBase)の間に,Omid(Optimistically transaction Management In Data-stores)というトランザクションレイヤを介しています。Omidはもともと2011年にYahoo!でスタートしたオープンソースプロジェクトで,現在はApacheのインキュベーションプロジェクトとして開発が進められています。トランザクション機能を捨ててパフォーマンスとスケーラビリティを得たはずのHBaseですが,やはり大規模になればなるほど,トランザクションを扱いたいというユーザのニーズが出てくるのは当然の流れなのかもしれません。

Omidは分離レベルとしてSnapshot Isolationを採用しており,リード/ライトのいずれのモードでも,ロック/デッドロック/ブロックが行われないことを担保しています。もし2つのコンカレントトランザクションが同じデータにアクセスした場合は,後者のトランザクションがアボートされます。これは元の名前が"Optimistically(楽観的)"で始まっていることからもわかります。またオーバヘッドが小さいことも特徴のひとつです。

Omidの主要なコンポーネントは

  • Transaction Clients
  • Transaction Status Oracle(TSO)
  • Commit Table
  • Shadow Cells

とOmidのドキュメントには書かれていますが,Hortonworksは本セッションでHBase MetaStoreに特化するために以下のの3つに分けて説明していました。

TSO Server(Timestamp Oracle)
トランザクションのタイムスタンプを生成し,コンカンレントなトランザクションの衝突を避ける
TSO Client
TSOサーバと会話するクライアント,トランザクションメタデータをキャッシュする
Compactor
HBase内部のコプロセッサとしてデプロイ

ここで言う"Oracle"とは某データベース巨大企業のことではなく,タイムスタンプを指してこう呼んでいます。

Omidを構成するコンポーネント。もっとも重要なのはOracleというタイムスタンプを発行するTSOサーバ

Omidを構成するコンポーネント。もっとも重要なのはOracleというタイムスタンプを発行するTSOサーバ

なおHBase MetaStoreではすべてのトラフィックをOmid経由にするのではなく,揮発性データやコンフリクトの可能性が高い場合はOmidをバイパスし,トランザクション処理をしないことも可能です。

高レベルな「ACID」の担保をめざすHBase MetaStore

セッションではベンチマーク結果として,TPC/DSクエリを「ObjectStore」⁠HBaseStore(Omidあり)⁠HBaseStore(Omidなし)⁠で実行した場合のHiveメタストアのプランニングタイムをそれぞれ紹介しています。全体的にObjectStoreよりもHBaseMetaStoreのほうが短時間で済んでいるようですが,現時点ではOmidのあり/なしではそれほど大きな差はついていないようです。逆にいえば,トランザクションレイヤとしてOmidを介しても実行速度にほとんど変わりがないという点は評価されるといえます。ただし,Omidは現状,⁠CPU使用率が非常に高い」⁠Hortonworks)ため,効率的に利用するためにはもう少し改善が必要でしょう。

プランニングタイムのベンチマーク結果。⁠HBaseStore(緑)⁠HBaseStore+Omid(青)⁠ObjectStore(紫)⁠Omidありでわずかに平均スピードが上昇している…かも

プランニングタイムのベンチマーク結果。「HBaseStore(緑)」「HBaseStore+Omid(青)」「ObjectStore(紫)」,Omidありでわずかに平均スピードが上昇している…かも

HBase MetaStoreは2015年9月にマージされたばかりの取り組みです。したがってやるべき課題も多い状況にありますが,もっとも重要なのは「トランザクションを扱うからこそACIDを高いレベルで担保することにある」とHortonworksはコメントしています。現在はメタデータのためのトランザクションサーバを新たに実装することも検討されているようです。

前述したように,高速化と大量データへの対応は時代のニーズであり,Hiveもその潮流から外れることはできません。今後もHBase MetaStoreのように,オリジナルの設計に大きく手を入れる取り組みは増えていきそうです。

著者プロフィール

五味明子(ごみあきこ)

IT系の出版社で編集者としてキャリアを積んだ後,2011年からフリーランスライターに。フィールドワークはオープンソースやクラウドコンピューティング,データアナリティクスなどエンタープライズITが中心。海外カンファレンス取材多め。Blog 「G3 Enterprise」やTwitter(@g3akk),Facebookで日々IT情報を発信中。

北海道札幌市出身/東京都立大学経済学部卒。

バックナンバー

IT Cutting Edge ─世界を変えるテクノロジの最前線

バックナンバー一覧