投稿日 2015/09/28
このブログは cloudera.com のブログ “Kudu: New Apache Hadoop Storage for Fast Analytics on Fast Data” の翻訳です。(原文投稿日: 2015/09/28)
HDFSとApache HBaseとを補完するこの新しいオープンソースプロダクトは、つなぎ合わされたハイブリッドアーキテクチャを生じさせたHadoopのストレージレイヤーのギャップを埋めるものです。
Apache Hadoopのエコシステムを定義するデータストレージとデータ処理の技術群は、拡張的で、絶えず改善され、ミッションクリティカルなエンタープライズアプリケーションで使用されるお客様の非常に多様なユースケースをカバーしています。Clouderaでは、我々は常にHadoopの可能性の境界を継続的に押し広げています。より速く、より簡単に操作でき、そしてより安全になるようにです。
2012年後半、我々は、複雑過ぎたり、特定のユースケースにおいてHadoopの採用を妨げているようなApache Hadoopのストレージレイヤーのギャップを分析するための長期的な計画を開始しました。この評価の過程で、我々はいくつかの重要な傾向に気づき、最終的にHDFSとApache HBaseが提供する機能を補完するための新しいストレージ技術の必要性があると結論づけました。今日、我々はオープンソースHadoopエコシステムに新しく追加されたKuduを発表いたします。Kuduは、高速分析とリアルタイム機能、最新のCPUとI/Oリソースの利用効率化、インプレースでの更新、シンプルで進化可能なデータモデルを提供することを目的としています。
この記事の残りの部分では、Kudu開発の動機の概要、アーキテクチャの簡単な説明、そして最終的にASFインキュベータへ寄贈すべく準備中の、活気あるオープンソースコミュニティを育てていくための大まかなプランについて紹介していきます。
性能のギャップ
多くのClouderaのお客様の環境の中で、我々はいくつかのHadoopのツールが同時に展開されている「ハイブリッドアーキテクチャ」が台頭している状況を観察してきました。HBaseのようなツールは、データを取り込むのには素晴らしく、小さいクエリを非常に高速に処理でき、インプレースでデータを更新することが可能です。HDFSは、Apache Parquetのようなカラムナファイルフォーマットを処理できるImpalaのようなツールと組み合わせることで、非常に巨大なデータセットに対する分析クエリに対し素晴らしいパフォーマンスを提供します。
しかし、単一のツールでは提供できない機能を同時に使う必要に迫られるユースケースでは、お客様は複数のツールをつなぎ合わせるハイブリッドアーキテクチャを作らなければなりません。お客様は多くの場合一つのストレージシステムにデータを取込み、かつそれを更新することを選択しますが、後でデータを再編成して外部から利用される分析レポートのユースケースに最適化します。
当社のお客様はこうしたハイブリッドアーキテクチャを正しく構築・運用していますが、我々はお客様にこのような複雑さを引き受けさせてはならないと信じてきました。幅広いワークロードにわたって優れたパフォーマンスを提供するために開発されたストレージシステムは、ハイブリッドアーキテクチャが解決しようとした問題に対するよりエレガントな解決策を提供します。
新しいハードウェア
我々がお客様の環境で観測したもう一つの傾向は、より多くの高性能なハードウェアが徐々に展開されていっていることです。第一に、当社のお客様が展開しているRAMの量は着実に増加していて、2012年にノードあたり32GBだったのが今日では256GBとなっていることです。さらに、コモディティノードにいくつかのSSDストレージが含まれるというのはますます一般的になってきています。HBase、HDFS、そして他のHadoopツールはこうしたハードウェアの展望の変化の利点を得るために変化していっていますが、これらのツールはシステム全体において最も一般的なパフォーマンスボトルネックがHadoopクラスタの下にあるディスクの速度にあるという前提で設計されました。スピニングディスクストレージアーキテクチャに最適化するという選択は、大量のデータをメモリにキャッシュすることができ、永続化ストレージに対するランダムアクセスが100倍も速くなった現代のアーキテクチャには必ずしも最適化されていません。
さらに、より高速なストレージレイヤーと、システム全体のパフォーマンスボトルネックがストレージレイヤーばかりというケースも、もはやあまりありません。一般に、これからのボトルネックはCPUになると我々は見ています。より低速のストレージレイヤーでは、CPU使用率の非効率性は、多くの場合、ストレージのボトルネックの下に隠されていますが、ストレージレイヤーが速くなるにつれて、CPUの効率がはるかに重要になります。
これらの現代的ハードウェア構成で動作するよう一から設計され、CPU効率を重視する新しいHadoopのストレージシステムの必要性があると信じています。
Kuduの紹介
ここに挙げたような傾向に対処するために、我々は2つの別々のアプローチを検討しました。一つは既存Hadoopのツールに変更を追加して行くこと、もう一つは全く新しいものを構築することです。我々が取り組もうとした設計目標は以下の通りでした。
- スキャンとランダムアクセスの双方における強力なパフォーマンスによってお客様の複雑なハイブリッド・アーキテクチャをシンプルにすることを手助けする
- 高いCPU効率によって当社のお客様が最新のプロセッサに行っている投資のリターンを最大化する
- 最新の永続化ストレージを活用するための高いIO効率を実現する
- 無駄な処理とデータ移動を回避するための、インプレース更新機能
- 地理的に離れた場所にある複数のデータセンターにまたがるアクティブ・アクティブ・レプリケーションクラスタのサポート
我々は、既存のオープンソースプロジェクト内でこれらの目標を達成するためのプロトタイピングを行いましたが、最終的にはこのゴールの達成には大きなアーキテクチャの変更が必要であることがわかりました。こうした変更はあまりに大きすぎたため、結果的に全く新しいデータ・ストレージ技術を開発することになりました。三年以上前に開発を開始し、これまで努力してきた成果を皆さんと共有できることを誇らしく思っています。我々がKuduと呼ぶ、新しいデータストレージ技術です。
Kuduの基本設計
ユーザの観点から見ると、Kuduは構造化データのテーブルのためのストレージシステムです。テーブルは、あらかじめ定義された数の型を持つ列からなる明確に定義されたスキーマを持っています。各テーブルには、その1つ以上の列で構成される主キーがあります。主キーは一意性制約(2つの行が同じキーを共有することができない)を持ち、効率的な更新と削除のためにインデックスとして振る舞います。
Kuduのテーブルは、リレーショナル・データベース・システムのパーティションに似た、タブレットと呼ばれるデータの一連の論理サブセットで構成されています。KuduはRaftコンセンサスアルゴリズムを使用して、複数のコモディティハードウェアノードにこれらのタブレットを複製することにより、データの耐久性とハードウェア障害に対する保護を提供します。タブレットは、通常、数十GBであり、個々のノードは、通常、10〜100タブレットを保持しています。
Kuduは、タブレットサーバに格納されたデータの論理構造を表現するメタデータ(カタログ)を管理するマスタサーバを持っています。このマスタサーバはハードウェア障害から復旧するときにコーディネータとして振る舞い、どのタブレットサーバがどのタブレットのレプリカをホストしているかを追跡し続けます。 高可用性を提供するために複数のスタンバイマスターサーバを定義することができます。Kuduでは、通常マスタープロセスに紐づく多くの責任はタブレットサーバに持たせることができますが、これはKuduのRaftコンセンサスの実装によるもので、このアーキテクチャは将来複数のマシンにマスターの責務を分割するための道筋を提供してくれます。我々はKuduのマスタープロセスがクラスタ全体のパフォーマンスボトルネックにならないと予測しており、250ノードのクラスタ上のテストではどの場合でも飽和状態にはなりませんでした。
更新、挿入、そして削除のために一時的にメモリにバッファされ、それから永続的なカラムナストレージにマージされるという、log-structured ストレージのバリエーションを用いることで、Kuduに格納されたデータは更新可能になっています。Kuduは、コンパクションなどの管理オペレーションを常に小さく実行することでより大きな管理オペレーションを決して必要としないようにすることにより、一般にこのようなアーキテクチャに関係するクエリレイテンシのスパイクから保護します。
KuduはC++とJavaによるダイレクトAPIを提供し、これにより行のポイント抽出及びバッチ抽出、書き込み、削除、スキーマ変更、そしてそれ以外の操作を可能にします。さらに、Kuduは既存のHadoopエコシステムツールと連携し、改善するために設計されています。Kuduのベータリリースでは、Impala、MapReduce、そしてApache Spark との連携が可能になっています。将来的に我々はほとんどまたは全てのHadoopエコシステムツールにおいてKuduをサポートされるストレージオプションにしようと計画しています。
Kuduのアーキテクチャについてのより詳細な情報についてはKuduのホワイトペーパーを参照してください。
Kuduコミュニティ
Kuduはすでに豊富な機能を持っていますが、やるべきことはまだまだ多く、皆様にもご協力いただければと思います。Kuduは、Apache Software License 2.0の下でライセンスされた、完全にオープンソースのソフトウェアです。さらに我々は、その成長を支援し、その利用を容易にするため、Apache インキュベータプロジェクトとして Apache Software Foundation に Kudu を提出する予定です。
Kuduのバイナリ(ベータ)は現在利用可能で、こちらからダウンロードすることができます。皆様がすぐKuduを起動して試せるよう、いくつかのインストールオプションを作成しました。ドキュメントはこちらです。現在我々はKuduの開発の全履歴を作るため、githubリポジトリと、外部向けにエクスポートしたイシュートラッキングシステムも利用可能にしています。今後、Kuduの開発は完全に透明性のある公開された状態で行われます。
AtScale、Intel、Splice Machine、Xiaomi、Zoomdataなど、いくつかの企業は既に相当なフィードバックと貢献を提供してKuduの改善を手助けしてくれていますが、これはほんの始まりに過ぎません。Kuduが対処しようとしているユースケースに興味のある人ならどんな人でも、Kuduへのフィードバックや貢献を歓迎します。
以上のことから、KuduがHadoopコミュニティにまたがる現実のニーズに対応するためにHDFSやHBaseを補完するものであるということがお分かりいただけたかと思います。我々は時間をかけてKuduを改善するために、コミュニティと協力できることを楽しみにしています。
参加するためのリソース
- Mailing list: kudu-user@googlegroups.
com - Discussion forum: http://community.
cloudera.com/t5/Beta-Releases/ bd-p/Beta - Contributions: http://getkudu.
io/contributing.html - JIRA: http://issues.cloudera.
org/projects/kudu
Todd Lipconが9/29(火)のNYC HUGでKuduのデザインゴールとアーキテクチャについて発表します。Strata + Hadoop World NYC の参加者はKudu技術セッションを9/30(水)に、AMAセッションを10/1(木)に見ることができるでしょう。
Todd Lipcon はClouderaのソフトウェアエンジニアです。彼はこの3年間Kuduチームをリードしてきました。彼はまた、Apache HBaseとApache HadoopのコミッターかつPMCメンバーであり、主に性能、耐久性、高可用性の分野で貢献してきました。
Michael CrutcherはClouderaのストレージ製品の責任者で、HDFS、HBase、Kuduを担当しています。彼は以前はPivotalでプロダクトマネージャをしていてGreenplum データベースの責任者として活躍し、Amazonではデータエンジニアとしてデータウェアハウス環境を設計し管理することを支援していました。