Apache Kuduの概要
Apache Kudu(アパッチ クドゥ)とは、Hadoopプラットフォーム用に開発されたオープンソースのカラムナ(カラム指向の)ストレージで、2016年9月にバージョン1.0.0がリリースされました。Kuduはアフリカに住むウシ科の動物でロゴマークにもなっています。
カラムナストレージは効率的なデータエンコーディングや圧縮が可能です。単一のカラムのみを読み取ることから検索が高速であり、同じカラムは同一の型データであることから、圧縮も効率的に行えます。したがってカラムナストレージは、ビッグデータを扱うストレージとして適しているといえます。
Apache Kuduは、これまでMapReduceやSparkで使用されていたストレージであるHDFSとHBaseのギャップを補完するために開発されました。
Kuduは、シーケンシャルな読み込みとランダムな読み込み/書き込み双方を同時に行う処理に対して効果を発揮します。たとえば、更新可能なデータを、高速に分析するオンラインレポートのような処理に適しています。
Apache Kuduの主な特徴
- シンプルなデータモデル
Kuduは、リレーショナルデータベースと同様に、テーブルにデータを格納します。テーブルは、Key/Valueストアのような単純なものから、異なる型のカラムが多数存在する複雑なものまで作成することが可能な構造化データモデルです。テーブルは、リレーショナルデータベースと同様に、1つ以上のカラムで構成される主キーを保持します。テーブルの行は、主キーによって効率的に読み込み・更新・削除することができます。
このシンプルなデータモデルにより、アプリケーションの新規開発や既存のアプリケーションを移植することが容易です。
- 低レイテンシランダムアクセス
Kuduは単なるファイル形式ではなく、テーブルの各行に対してミリセカンドオーダーの低レイテンシアクセスをサポートするライブストレージシステムです。
KuduはOLTPシステムとして設計されているわけではありませんが、メモリに収まるデータのサブセットがある場合、OLTPと同等のランダムアクセスパフォーマンスを提供します。
- Apache Hadoopエコシステム連携
Kuduは、Hadoopエコシステムに適合するように設計されており、容易に他のデータ処理フレームワークと連携することが可能です。
Javaクライアントを使用してリアルタイムデータソースからデータをストリーミングし、Spark、Impala、MapReduceなどを使用して即座に処理することができます。 Kuduテーブルに、HDFSやHBaseなどのHadoopストレージに保存されているデータを結合することも可能です。
- 分散アーキテクチャ
Kuduは、大規模データセットや大規模クラスタに対応し、スケールアウト可能な分散アーキテクチャを持っています。
Kuduは、実データを格納するタブレットサーバとメタデータを扱うマスターサーバで構成され、データは、テーブルに格納されます。テーブルは、パーティションによって分割されたタブレットという連続したセグメントに格納されます。効率的な書込み・スキャンを行うためには、パーティション設計が重要です。パーティションは、レンジ(範囲)とハッシュまたは、双方の組み合わせにより分けることが可能です。
タブレットは、可用性と一貫性を保証するため、レプリケーションに「Raftコンセンサスアルゴリズム」を使用しています。Raftコンセンサスアルゴリズムは、クライアントの要求に応答する前に、少なくとも2つのノードによってすべての書き込みが維持されるようにし、マシンの障害によるデータが損失を防ぎます。
Raftコンセンサスアルゴリズムでは、リーダーとフォロワーというクラスタで構成されています。また、結果整合性(eventually consistency)とは異なり、すべてのレプリカがデータの状態に対して合意する保証と、論理的時刻と物理的時刻の組み合わせを使用することにより、強い整合性を保証することができます。
書き込みはリーダータブレットに対して送信され、タブレットの過半数が書き込みに成功するとクライアントに対して処理の成功を通知します。
図 1 Kuduの書込みフロー
WAL: Write-Ahead Log(先行書き込みログ)とは、データベースに対する実際の変更操作の前に記録されるログのことです。
図 2 Kuduのリーダー選出
- 次世代ハードウェアのための設計
Kuduは、高性能化するハードウェアを先取りするものとして、Cloudera社とIntel社によって共同で開発されました。Intel社の不揮発性メモリプロジェクトで開発された、新しい pmem テクノロジーを利用するよう設計されています。
インメモリカラム指向実行パスにより、KuduはSSE4およびAVX命令セットからのSIMD演算を使用して、インストラクションレベルの並列性を実現できる実装となっています。
※pmem・・・永続的メモリ(persistent memory)のこと。プロセッサのロードとストアの命令を使用して揮発性メモリのようにアクセスできますが、電力損失が起きてもその内容を保持します。
まとめ
Kuduの公式ページによると、代表的なユースケースとして
- 効率的なカラムスキャンによる高速書込み・更新を使用した「リアルタイム解析」
- レンジパーティショニングとハッシュパーティショニングの併用によりデータアクセスのホットスポットを解消した「多様なアクセスパターンを持つ時系列アプリケーション」
- 予測モデルとデータを頻繁に更新し、グラフ化する「予測モデリング」
- Apache Impalaとの連携による「レガシーシステムとの結合」
これまでNoSQLの世界では、結果整合性の考え方を採用して一貫性の保証を弱くしたり、トランザクションをひとつのデータアイテムに限るという制限を設けたりすることが多く行われてきました。Kuduも現時点(2023年3月)では、単一行単位でのトランザクションのみ実装されています。しかし、Kuduのドキュメントでは、最終的には完全にACIDとなるよう設計されている、と述べられています。
今後は、一貫性と可用性をより柔軟に調整できるような実装になっていく可能性もあると考えられます。
Apache Kuduの動作環境
ハードウェア
-
Kuduマスターを実行する1つ以上のホスト
1つのマスター、または3つのマスターを推奨。マスター数は奇数である必要があります。 -
Kuduタブレットサーバを実行する1つ以上のホスト
レプリケーションを使用する場合は、少なくとも3台のタブレットサーバが必要です。
-
Linux
- RHEL7、RHEL8、CentOS7、CentOS8、Ubuntu 18.04(bionic)、Ubuntu 20.04(focal)
- hole punchingをサポートするカーネルとファイルシステム
- ntpまたはchrony
- xfsまたはext4でフォーマットされたドライブ
- nscdで、DNS 名前解決と静的名前解決のキャッシュをすることを強く推奨
-
MacOS
- macOS 10.13(High Sierra)、macOS 10.14(Mojave)、macOS 10.15(Catalina)
-
Windows
- Windowsはサポートされていません。
- Kuduをhighest durabilityに設定し、ソリッドステートストレージが利用可能な高性能なメディアにKudu WALを保存することで、レイテシンが大幅に改善される可能性があります。
- KuduをビルドするためにJDK8が必要ですが、テスト以外の実行時には必要ありません。
Apache Kuduのインストール
Apache Kuduのインストールはソースからビルドして行います。詳細はインストール方法のページをご参照ください。
https://kudu.apache.org/docs/installation.html
Apache Kuduのライセンス
Apache Kuduのライセンスは、Apacheソフトウェア財団 (ASF) によって規定されたApache License Version 2.0を採用しています。
Apache Kuduの使用にあたって、著作権の表示などの条件に従うことで、商用利用、修正、再頒布などが自由に行えます。
Apache Kuduのダウンロード
Apache Kuduのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。