オープンソースの新しいストレージエンジン、Kudu
ついに本日アナウンスされた Kudu (クドゥ)、次世代ハードウェアにも対応するオープンソースのストレージエンジンです。まだベータ版ですが、3年もの開発期間を経てついに公開されました!
Super excited to finally talk about what I've been working on the last 3 years: Kudu! http://t.co/1W4sqFBcyH http://t.co/1mZCwgdOO5
— Todd Lipcon (@tlipcon) September 28, 2015
数日前にリークされた記事に「KuduはHDFSやHBaseを置き換えるものだ」と書かれていましたが、それは間違いです。詳細はFAQなどにも書かれていますが、HDFSとHBaseを補う新しいストレージエンジンです。
- プレスリリース(英語):Cloudera Launches Kudu, New Hadoop Storage for Fast Analytics on Fast Data
- Vision Blog (英語):Introducing Kudu: The New Hadoop Storage Engine for Fast Analytics on Fast Data
- Developer Blog (英語): http://blog.cloudera.com/blog/2015/09/kudu-new-apache-hadoop-storage-for-fast-analytics-on-fast-data/
- Developer Blog (日本語翻訳版):Kudu (クドゥ) : HDFSとHBaseを補完する、Hadoopの新しいストレージエンジン
※KuduはImpalaと同じ偶蹄目ウシ科の動物です。日本名ではクーズーとも言いますが、残念ながら両方とも日本の動物園にはいません。
書き込み | 読み込み | ユースケース | |
---|---|---|---|
HDFS | ライトワンス (追記可能) | スキャン | ストレージ。分析用の組み合わされたされた構造化データ |
HBase | 挿入/更新 | 行のルックアップ | 高速にオンラインデータの取得と提供 |
Kudu | 挿入/更新 | スキャン | 高速なデータ上で高速な分析 |
分析を行う場合、HDFSの読み出し処理はスキャンで行われるため、良い性能になります。(例えばParquet形式のファイルとして保存しておく)。しかし、データが頻繁に追加、変更される場合には適していません。
一方でHBaseは高速に書き込む(挿入、更新)ことができます。しかし、行のルックアップには優れているものの、大量にスキャンを行うような処理にはあまり適していません。
これらの間にあるギャップを補完するのがKuduです。
日本語ドキュメントがないので、ウェブページが翻訳されるまでのつなぎとして、ざっと抜粋して日本語化してみました。かなり端折っているので、詳細は原文をご確認ください。また、間違いを見つけた方はご指摘ください。
Kuduのホームページからの抜粋
効率化されたアーキテクチャ
Kuduは単一ストレージ層に渡って複数のリアルタイム分析のワークロードを可能にさせる、高速な挿入/更新と、効率的なカラムナスキャンを提供します。HDFSとApache HBaseの新しい補完として、風変わりなワークアラウンドを行うことなく、多様なユースケースに対処するためにKuduはアーキテクトに柔軟性を提供します。
高速な分析
Kuduは、高速な(素早く変更される)データが必要なユースケースに特別に設計されています。エンジニアが次世代ハードウェアとインメモリでの処理を利用するために、KuduはCloudera ImpalaとApache Spark(初めは。他の実行エンジンも来るでしょう)のクエリを著しく低レイテンシにします。
貢献に対して開かれている
Hadoopエコシステムに長く関わっているコントリビュータ達によって創設されたKuduプロジェクトは、Apache 2ライセンスの下でリリースされ、長期間の成功の重要な要因としてコミュニティの参加を尊重しています。私たちは今までのコントリビュータに感謝し、もっと多くの方に会うのを楽しみにしています!
Kudu Overviewからの抜粋
http://getkudu.io/overview.html
データモデル
- SQLで使用されているようなテーブル形式
- 主キーとひとつ以上の列
- 主キーによる効率の良い読み込み、更新、削除
- データ型(boolean, 8/16/32/64bit signed int, timestamp, double,float, UTF8, binary )
低レイテンシランダムアクセス
- 個々の行に対して、ミリ秒スケールの低レイテンシでのアクセスに対応するストレージシステム(Kuduはファイルシステムやファイルフォーマットではない)
- Java, C++でアクセス可能(Pythonは今後対応予定)
- OLTPのために設計されていない
- YCSBを使った10億行に対するランダムアクセスのワークロードでは、99パーセンタイルのレイテンシが6ms
Hadoopエコシステムと統合
- ライブストリーミングデータをJavaクライアントからストリームで格納し、Spark、Impala、MapReduceですぐに処理できる
オペレータによって、オペレータのために作られた
- Kuduは数百のエンタープライズのユースケースで重要なHadoopクラスタのサポートに関わっていたエンジニアによって作られた
- 従って、デバッグのためには良いメトリクス、トレース、管理ツールなしにデバッグするのはフラストレーションがたまると知っている
- 今回のβ版でさえ、トレース機能、広範囲なメトリクスのサポート、ウォッチドッグスレッドなどが含まれている
オープンソース
- Apache 2.0 ライセンスのオープンソース
- 最初はコードレビュート日々の議論をオープンにする
- また、Apache Software Foundationのincubatorになるようにする
Kuduのアーキテクチャ
非常に高速なカラムナ(列指向)ストレージ
- ほとんどの現代の分析データストアと同様に、Kuduは内部ではデータを列形式で保存する
- カラムナストレージは効率的なエンコードと圧縮ができる
- カラムナストレージは分析クエリをサービスするためのデータのI/Oの量も劇的に削減する
分散とフォールトトレランス
- Kuduは大規模なデータセットを「Tablet」という小さなユニットに分割する
- この分割は設定により、ハッシュ、レンジパーティション、その組み合わせによりテーブル単位で調整できる
- KuduはRaftコンセンサスアルゴリズムを使用
次世代ハードウェアのための設計
- Kuduチームは次世代ハードウェア技術のパワーに手綱をつけるために、インテルのエンジニアと密接に作業している
- KuduのストレージはSSDのIO特性を利用できるように設計されており、永続化メモリにデータを保存できるlibpmemライブラリに基づいた実験的なキャッシュ実装を含んでいる
- KuduはC++で開発されており、ノードごとに大量のメモリを使用できる
- 10コアを超えるように簡単にスケールできる
- SSE4およびAVXインストラクションセットからSIMDオペレーションを使用して、良好なインストラクションレベルでの並列性を達成