(57)【要約】      （修正有）【課題】ＭａｐＲｅｄｕｃｅのバッチ処理を完了させながら、リアルタイム又はほぼリアルタイムのアドホッククエリ機能を提供するＡｐａｃｈｅ  Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを提供する。【解決手段】クエリ要求、及びクエリの実行に関連する全ての内部要求を処理するための、Ｈａｄｏｏｐクラスタのデータノードにインストールされたデーモンを含む。クライアントを介してクエリ要求を受け取り、この要求を一群のプランフラグメントに変化させるとともに、遠隔デーモン上におけるプランフラグメントの最適化された並列実行を調整して結果を生成する。【選択図】図１
2014194769.tif 000002
【特許請求の範囲】
【請求項１】
分散コンピューティングクラスタ内の記憶データに対するクエリを実行するためのシステムであって、
複数のデータノードを含み、各データノードは、
クライアントからのクエリを解析してクエリフラグメントを作成するクエリプランナと、
前記クエリフラグメントを前記複数のデータノード間で分散させるクエリコーディネータと、
前記クエリフラグメントを実行して中間結果を取得し、該中間結果を集約してクライアントに戻すクエリ実行エンジンと、
を有する、
ことを特徴とするシステム。
【請求項２】
前記分散コンピューティングクラスタは、Ｈａｄｏｏｐクラスタである、
ことを特徴とする請求項１に記載のシステム。
【請求項３】
前記複数のデータノードのうちの１つのクエリコーディネータ及びクエリプランナは、クライアントからのクエリのための開始クエリコーディネータ及び開始クエリプランナとしてそれぞれ選択される、
ことを特徴とする請求項２に記載のシステム。
【請求項４】
前記開始クエリコーディネータ及び前記開始クエリプランナは、負荷バランシングスキームを使用してクライアントからのクエリを前記複数のデータノード間に分散させるルーティングコンポーネントにより選択される、
ことを特徴とする請求項３に記載のシステム。
【請求項５】
前記開始クエリコーディネータ及び前記開始クエリプランナは、前記複数のデータノードのうちの前記クエリを送信すべき特定のデータノードを標的にする前記クライアントに基づいて選択される、
ことを特徴とする請求項３に記載のシステム。
【請求項６】
前記クエリフラグメントは、前記複数のデータノードのうちの前記クエリに関連するデータを有するデータノードのクエリ実行エンジンによって並列実行される、
ことを特徴とする請求項３に記載のシステム。
【請求項７】
前記開始クエリコーディネータは、前記クエリ実行エンジンからのクエリ結果を集約し、該集約されたクエリ結果を前記クライアントに提供する、
ことを特徴とする請求項６に記載のシステム。
【請求項８】
前記クエリ結果を前記開始クエリコーディネータに送信する前に、事前集約のために前記クエリ実行エンジン間で中間クエリ結果がストリーミングされる、
ことを特徴とする請求項７に記載のシステム。
【請求項９】
前記クエリ実行エンジンは、前記記憶データを含むＡｐａｃｈｅ  ＨＢａｓｅデータ及びＨａｄｏｏｐ分散ファイルシステム（ＨＤＦＳ）データに対して前記クエリフラグメントを直接実行する、
ことを特徴とする請求項６に記載のシステム。
【請求項１０】
前記クエリ実行エンジンは、前記記憶データをメモリ内フォーマットにランタイムで変換するためのスキーマオンリードを決定する、
ことを特徴とする請求項９に記載のシステム。
【請求項１１】
クエリプランナ、クエリコーディネータ及びクエリ実行エンジンを有する各データノードの状態を追跡してメタデータを分散させる状態ストアをさらに含む、
ことを特徴とする請求項２に記載のシステム。
【請求項１２】
前記開始クエリプランナは、前記Ｈａｄｏｏｐクラスタ内のネームノードからの情報を使用して、前記クエリの関連データを有するデータノードを識別する、
ことを特徴とする請求項２に記載のシステム。
【請求項１３】
ランタイムコードの生成及びレイテンシの短縮のための低水準仮想機械コンポーネントをさらに含む、
ことを特徴とする請求項２に記載のシステム。
【請求項１４】
複数のデータノードを有する分散コンピューティングクラスタにおけるクエリの実行方法であって、
前記分散コンピューティングクラスタ内の調整データノードによってクエリを受け取るステップと、
前記調整データノードにより、前記分散コンピューティングクラスタ内の前記クエリに関連するデータを有するデータノードに前記クエリのフラグメントを分散させるステップと、
を含むことを特徴とする方法。
【請求項１５】
前記データノードは、前記分散コンピューティングクラスタの分散ファイルシステム又はデータストアに対して前記クエリのフラグメントを実行する、
ことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記分散コンピューティングクラスタは、Ａｐａｃｈｅ  Ｈａｄｏｏｐクラスタであり、前記分散ファイルシステムは、Ｈａｄｏｏｐ分散ファイルシステム（ＨＤＦＳ）であり、前記データストアは、「ＮｏＳＱＬ」（非構造化照会言語）データストアである、
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記ＮｏＳＱＬデータストアは、Ａｐａｃｈｅ  ＨＢａｓｅを含む、
ことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記クエリを解析及び分析して、前記Ａｐａｃｈｅ  Ｈａｄｏｏｐクラスタ内の前記データノード上で実行されるクエリ実行エンジンが実行すべきタスクを決定するステップをさらに含む、
ことを特徴とする請求項１６に記載の方法。
【請求項１９】
状態ストアから得られた前記データノードの状態を判断するステップをさらに含み、前記状態ストアは、起動時又は接続喪失後に前記データノードを登録する、
ことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記状態ストアから得られた前記クエリに関連する前記データの位置を特定するステップをさらに含む、
ことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記データノードにわたる前記クエリのフラグメントの並列実行中に、該実行から得られた中間結果が、前記データノード上で実行中のクエリ実行エンジン間でストリーミングされる、
ことを特徴とする請求項１６に記載の方法。
【請求項２２】
前記調整データノードにより、前記データノードから受け取った結果をクライアントに送信するステップをさらに含む、
ことを特徴とする請求項１６に記載の方法。
【請求項２３】
前記調整データノードにより、前記クエリの事前集約された結果を前記データノードから受け取るステップと、
前記調整データノードにより、前記事前集約された結果に演算を実行して前記クエリの結果を決定するステップと、
をさらに含むことを特徴とする請求項１６に記載の方法。
【請求項２４】
前記演算は、集約演算又はＴｏｐＮ演算を含む、
ことを特徴とする請求項２３に記載の方法。
【請求項２５】
前記クエリのフラグメントは、走査境界に沿ったパーティションを含む計画に対応する、
ことを特徴とする請求項１６に記載の方法。
【請求項２６】
前記データノードは、前記調整データノードを含む、
ことを特徴とする請求項１６に記載の方法。
【請求項２７】
前記クエリ実行エンジンは、ランタイムコードの生成及びレイテンシの短縮のための低水準仮想機械を実装する、
ことを特徴とする請求項１８に記載の方法。
【請求項２８】
前記調整データノードにより、前記クエリのフラグメントの実行に対応する結果を前記データノードから受け取るステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項２９】
分散コンピューティングクラスタにおけるクエリ実行システムであって、
クエリを受け取る手段と、
前記クエリを解析及び分析する手段と、
前記クエリのプランフラグメントを作成する手段と、
前記分散コンピューティングクラスタ内の前記クエリに関連するデータを有するデータノードに前記クエリのプランフラグメントを分散させる手段と、
を備えることを特徴とするシステム。
【請求項３０】
前記プランフラグメントを実行のために受け取る手段をさらに備える、
ことを特徴とする請求項２９に記載のシステム。
【請求項３１】
前記クエリのプランフラグメントをデータストレージ手段上で実行する手段をさらに備える、
ことを特徴とする請求項３０に記載のシステム。
【請求項３２】
前記クエリのプランフラグメントをデータストレージ手段上で実行する手段に分散させるためのメタデータをキャッシュする手段をさらに備える、
ことを特徴とする請求項３１に記載のシステム。
【請求項３３】
前記クエリに関連する前記データの位置を特定する手段をさらに備える、
ことを特徴とする請求項２９に記載のシステム。
【請求項３４】
前記クエリの結果を事前集約する手段と、
前記事前集約されたクエリの結果を通信する手段と、
をさらに備えることを特徴とする請求項３１に記載のシステム。
【請求項３５】
前記事前集約されたクエリの結果を受け取る手段と、
前記事前集約されたクエリの結果に演算を実行して前記クエリの結果を決定する手段と、
をさらに備えることを特徴とする請求項３４に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
Ａｐａｃｈｅ  Ｈａｄｏｏｐプロジェクト（以下、「Ｈａｄｏｏｐ」）は、商品機械のクラスタにわたる大規模データセットを確実かつスケーラブルに分散処理するソフトウェアを開発するためのオープンソースソフトウェアフレームワークである。Ｈａｄｏｏｐは、Ｈａｄｏｏｐ分散ファイルシステム（ＨＤＦＳ）として知られている分散ファイルシステムを含む。ＨＤＦＳはローカルノード上のファイルシステムを相互にリンクして、Ｈａｄｏｏｐクラスタ全体にわたる統一ファイルシステムを形成する。Ｈａｄｏｏｐは、ＭａｐＲｅｄｕｃｅとして知られているプログラミングフレームワークが利用するジョブスケジューリング及びクラスタリソース管理のためのフレームワークを提供するＨａｄｏｏｐ  ＹＡＲＮも含む。Ｈａｄｏｏｐは、ＡｐａｃｈｅＨｉｖｅ（以下、「Ｈｉｖｅ」）及びＡｐａｃｈｅＨＢａｓｅ（以下、「ＨＢａｓｅ」）を含むその他のＡｐａｃｈｅプロジェクトによっても補完される。Ｈｉｖｅは、データ要約及びアドホッククエリを提供するデータウェアハウスインフラである。ＨＢａｓｅは、大型テーブルのための構造化データストレージをサポートするスケーラブルな分散ＮｏＳＱＬ（非構造化照会言語）データベース又はデータストアである。
【０００２】
ＭａｐＲｅｄｕｃｅは、作業をより小さな部分問題にマッピング（ｍａｐ）又は分割し、これらの部分問題をクラスタ内のワーカノードに割り当てることによりデータを並列処理する。これらのワーカノードは、部分問題を処理して結果を戻し、これらの結果が組み合わさって出力へと「帰着（ｒｅｄｕｃｅ）」し、これが解に受け継がれる。ＭａｐＲｅｄｕｃｅはバッチ処理フレームワークであり、作業負荷を異なる機械に分散することにより大量のデータを並列処理するように最適化される。ＭａｐＲｅｄｕｃｅは、耐障害性を含む利点を提供するが、高レイテンシなどの深刻な不利点もある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ＭａｐＲｅｄｕｃｅのレイテンシは、そのバッチ指向のｍａｐ／ｒｅｄｕｃｅモデルに起因する。ＭａｐＲｅｄｕｃｅでは、実行中、「ｍａｐ」段階の出力が「ｒｅｄｕｃｅ」段階の入力として提供されるため、実行中の「ｍａｐ」段階が完了するまで「ｒｅｄｕｃｅ」段階を終えることができない。さらに、全ての中間データがディスクに記憶されてからリデューサにダウンロードされる。このため、ＭａｐＲｅｄｕｃｅではレイテンシが加わり、ＭａｐＲｅｄｕｃｅを通じて開始された単純なクエリの実行に長い時間がかかる場合がある。
【０００４】
Ｈｉｖｅは、ＭａｐＲｅｄｕｃｅの上位に位置するフレームワークである。Ｈｉｖｅは、構造化照会言語（ＳＱＬ）のように見える言語をＭａｐＲｅｄｕｃｅコードに変換し、Ｈａｄｏｏｐクラスタ内のデータアクセスをユーザに対して大幅に容易にする。しかしながら、Ｈｉｖｅは、内部的にはその実行エンジンとしてＭａｐＲｅｄｕｃｅを使用しており、ＭａｐＲｅｄｕｃｅの全ての不利点を受け継いでいる。このため、単純なＨｉｖｅクエリの実行に長い時間がかかる場合がある。
【課題を解決するための手段】
【０００５】
ＭａｐＲｅｄｕｃｅのバッチ処理を完了させながら、リアルタイム又はほぼリアルタイムのアドホッククエリ機能を提供するＡｐａｃｈｅ  Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを提供する。
【図面の簡単な説明】
【０００６】
【図１】低レイテンシクエリエンジンを展開できる環境例を示す図である。
【図２】バッチ指向のリアルタイムアドホッククエリをサポートする統合プラットフォームのコンポーネント例を示すブロック図である。
【図３Ａ】Ｈａｄｏｏｐクラスタ内のデータノードにインストールされて統合ストレージ層上に対話型のリアルタイム構造化照会言語（ＳＱＬ）クエリを直接提供するインストールマネージャ及び低レイテンシクエリエンジンのコンポーネント例を示すブロック図である。
【図３Ｂ】Ｈａｄｏｏｐクラスタ内のデータノードにインストールされて統合ストレージ層上に対話型のリアルタイム構造化照会言語（ＳＱＬ）クエリを直接提供するインストールマネージャ及び低レイテンシクエリエンジンのコンポーネント例を示すブロック図である。
【図４】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンによってＳＱＬクエリを処理する方法例を示す図である。
【図５Ａ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図５Ｂ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図５Ｃ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図５Ｄ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図５Ｅ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図５Ｆ】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンを使用したクエリ実行のフロー例を示す図である。
【図６】Ｈａｄｏｏｐ用の低レイテンシクエリエンジンによるクエリプラン例の実行を示すブロック図である。
【図７】Ｈｉｖｅ及び低レイテンシクエリエンジンを使用してデータセットに対して行ったクエリの実行時間例を示すスクリーンショットである。
【図８】ビジネスインテリジェンス環境におけるリアルタイムアドホッククエリのための低レイテンシクエリエンジンを示すブロック図である。
【図９】本明細書で説明する方法のいずれか１つ又はそれ以上を機械に実行させる命令セットを実行できる例示的なコンピュータシステムの形の機械の図形表現である。
【発明を実施するための形態】
【０００７】
以下の説明及び図面は例示的なものであり、限定的なものと解釈すべきではない。本開示を完全に理解できるように数多くの具体的な詳細について説明する。しかしながら、いくつかの例では、説明を曖昧にしないために周知の又は従来の詳細については説明していない。本開示における１つの実施形態又はある実施形態に対する言及は、必ずしもそうではないが同じ実施形態に対する言及とすることができ、このような言及は実施形態の少なくとも１つを意味する。
【０００８】
本明細書における「１つの実施形態」又は「ある実施形態」に対する言及は、実施形態に関連して説明する特定の特徴、構造又は特性が本開示の少なくとも１つの実施形態に含まれることを意味する。本明細書の様々な箇所に出現する「１つの実施形態では」という表現は、必ずしも全てが同じ実施形態について言及するものではなく、他の実施形態を互いに排除する別個の又は代替の実施形態について言及するものでもない。さらに、実施形態によって示すことも示さないこともある様々な特徴についても説明する。同様に、実施形態によって要件になることもならないこともある様々な要件についても説明する。
【０００９】
一般に、本明細書で使用する用語は、本開示の文脈及び個々の用語を使用する特定の文脈での当技術における通常の意味を有する。以下では、又は本明細書の別の箇所では、本開示の説明に関するさらなる指針を実務者に与えるために、本開示の説明に使用する用語について説明している箇所もある。便宜上、イタリック体及び／又は引用符などを使用していくつかの用語を強調表示していることもある。強調表示の使用によって用語の範囲及び意味に影響が及ぶものではなく、強調表示されているかどうかに関わらず、同じ文脈では用語の範囲及び意味は同じものである。同じ事柄を２通り以上の言い方で述べることもできる。
【００１０】
従って、本明細書で１つの用語について詳述又は説明しているかどうかに関わらず、本明細書で説明する用語のいずれか１つ又はそれ以上には別の言語及び同義語を使用することができ、またいずれかの特別な意味が置かれることもない。いくつかの用語については同義語を使用している。１又はそれ以上の同義語の記述は、他の同義語の使用を排除するものではない。本明細書で説明するいずれかの用語の例を含む例を本明細書のいずれかの箇所で使用していたとしても、これらは例示的なものにすぎず、本開示又はいずれかの例示する用語の範囲及び意味をさらに限定することを意図するものではない。同様に、本開示は、本明細書で示す様々な実施形態に限定されるものではない。
【００１１】
以下、本開示の範囲をさらに限定することを意図せずに、本開示の実施形態による機器、装置、方法及びこれらの関連結果の例を示す。なお、例では読者の便宜を図って表題又は副題を使用することがあるが、これらは決して本開示の範囲を限定すべきものではない。特に定義していない限り、本明細書で使用する全ての技術用語及び科学用語は、本開示が属する技術の当業者によって一般的に理解されるものと同じ意味を有する。不一致が生じた場合、定義を含めて本明細書が優先する。
【００１２】
本開示の実施形態は、Ｈａｄｏｏｐ用の低レイテンシ（ＬＬ）クエリエンジンを含む。本開示の実施形態は、Ｈａｄｏｏｐに記憶されたデータに対してリアルタイム又はほぼリアルタイムでクエリを実行するためのシステム及び方法も含む。本開示の実施形態は、Ｈａｄｏｏｐに記憶されたあらゆるフォーマットのデータに対してアドホッククエリを実行するためのシステム及び方法をさらに含む。
【００１３】
開示するＨａｄｏｏｐ用の低レイテンシ（ＬＬ）クエリエンジンは、高速な対話型のクエリ結果を提供する別の処理フレームワークを提供し、よく知られたＳＱＬクエリ構文を使用する。この低レイテンシ（ＬＬ）クエリエンジンは、結果の生成にＭａｐＲｅｄｕｃｅを使用せず、代わりにＨａｄｏｏｐクラスタに散在するそのデーモンを介してデータに対して直接クエリを行う。
【００１４】
１つの実施形態では、低レイテンシ（ＬＬ）クエリエンジンが、構造化されていない及び／又は構造化されているビッグデータの高速クエリを行うための機構を提供する。低レイテンシ（ＬＬ）クエリエンジンは、クエリに応答して素早く情報を戻すことができる。多くの場合、大量のデータの場合でも、クエリに対する結果をリアルタイム又はほぼリアルタイムで戻すことができる。この低レイテンシ（ＬＬ）クエリエンジンは、ジョブを開始してからデータにクエリを行うＭａｐＲｅｄｕｃｅとは異なり、ＨＤＦＳ及び／又はＨＢａｓｅテーブルに記憶されているデータに対して直接クエリを行う。この直接クエリ機能は、システムにデータが取り込まれる際にデータに対して高速クエリを実行する能力をユーザに提供する。
【００１５】
１つの実施形態では、低レイテンシ（ＬＬ）クエリエンジンの低レイテンシという利点により、ユーザが対話式にクエリを実行することができる。ＭａｐＲｅｄｕｃｅなどの既存のクエリエンジンでは、単純なクエリでも数十分かかることがある。従って、ユーザは、結果を見るまで長い間待ってから別のクエリを開始する必要がある。
【００１６】
別の実施形態では、低レイテンシ（ＬＬ）クエリエンジンが、データストレージから処理を分離するスキーマオンリードモデルを実装する。低レイテンシ（ＬＬ）クエリエンジンは、ＨＤＦＳ及びＨＢａｓｅの基本ストレージ層にデータを記憶するフォーマットに関わらず、ランタイムで抽出された関連スキーマを使用してこのようなデータに対して直接クエリを行う。低レイテンシ（ＬＬ）クエリエンジンは、柔軟性に欠けるスキーマに結合されていないので、ユーザは、洞察及びその他の発見をもたらし得るアドホックな探索的質問を行うことができる。
【００１７】
低レイテンシ（ＬＬ）クエリエンジンを配置するための環境例
図１は、低レイテンシ（ＬＬ）クエリエンジンを配置できる環境例１００を示す図である。環境１００には、Ｊａｖａ（登録商標）データベースコネクティビティ（ＪＤＢＣ）クライアント、オープンデータベースコネクティビティ（ＯＤＢＣ）クライアント、及びＨａｄｏｏｐクラスタに接続及び／又はアクセスするためのＡＰＩ及びその他のツールを提供する同様のものなどのクライアント１０４を示している。ＨｕｅなどのＳＱＬアプリケーション１０２は、クエリ又はジョブの実行、ＨＤＦＳの閲覧、ワークフローの作成などを行うための、Ｈａｄｏｏｐ用のユーザインターフェイスを提供する。環境１００は、Ｈａｄｏｏｐクラスタを含むデータノード１２０ａ〜ｃ上で実行される低レイテンシ（ＬＬ）クエリエンジンデーモンにクエリを発行するためのコマンドラインインターフェイス１１６も含む。１つの実施形態では、クライアント１０４、ウェブアプリケーション１０２及びコマンドラインインターフェイス１１６を、個別に又はまとめて一般にクライアントと呼ぶことができる。
【００１８】
環境１００には、複数のデータノード１２０ａ〜ｃを示している。低レイテンシ（ＬＬ）クエリエンジンデーモンは、各データノード上で実行される。低レイテンシ（ＬＬ）クエリエンジンデーモンは、クエリを調整して実行する長期にわたる処理である。低レイテンシ（ＬＬ）クエリエンジンデーモンの各インスタンスは、クライアント１０２／１０４を介して受け取られるクエリを受け取り、計画し、調整することができる。例えば、低レイテンシ（ＬＬ）クエリエンジンは、クエリをフラグメントに分割することができ、これらのフラグメントが低レイテンシ（ＬＬ）クエリエンジンのインスタンスを実行する遠隔ノードに分散されて並列実行される。データノード１２０ａ〜ｃには、ＨＤＦＳしか実行できないものもあれば、ＨＢａｓｅリージョンサーバ１２２ａ〜ｃを実行できるものもある。クエリは、（１２０ａ〜ｃなどの）ＨＤＦＳ及び／又は（１２２ａ〜ｃなど）ＨＢａｓｅに対して直接実行される。
【００１９】
環境１００には、Ｈｉｖｅメタストア１０６、ＹＡＲＮ１０８、ＨＤＦＳネームノード１１０及び／又は状態ストア１１２などの統合メタデータ及びスケジューラコンポーネントを示している。Ｈｉｖｅメタストア１０６は、低レイテンシ（ＬＬ）クエリエンジンが利用できるデータに関する情報を含む。具体的には、Ｈｉｖｅメタストアは、テーブル定義、すなわち公表される論理テーブル内への物理データのマッピングを含む。ＹＡＲＮ１０８は、ジョブスケジューリング及びクラスタリソース管理を行う。ＨＤＦＳネームノード（ＮＮ）１１０は、ローカルな読み込みを最適化するためのデータノードにわたるファイルの分散の詳細を含む。１つの実装では、ネームノード１１０が、個々のノード上のファイルが存在するディスクボリュームに関する情報を含むこともできる。
【００２０】
状態ストア１１２は、クラスタ内の単一ノード上で実行されるグローバルシステムリポジトリである。１つの実装では、データストア１１２をネームサービスとして使用することができる。全ての低レイテンシ（ＬＬ）クエリエンジンデーモンは、起動時に状態ストアに登録してメンバーシップ情報を取得することができる。このメンバーシップ情報を使用して、クラスタ上で実行されている全ての低レイテンシ（ＬＬ）クエリエンジンデーモンに関する情報を得ることができる。さらなる実装では、状態ストア１１２を使用して、クエリを実行するためのメタデータを提供することができる。状態ストア１１２は、メタデータをキャッシュし、起動時又は別の時点に低レイテンシ（ＬＬ）クエリエンジンデーモンにメタデータを分散させることができる。状態ストアが故障した場合、システムの残り部分は、状態ストアから受け取った最後の情報に基づいて動作を継続することができる。さらなる実装では、状態ストアが、負荷情報、診断情報、及びＨａｄｏｏｐクラスタの機能及び／又は性能を高めるために使用できる同様のものなどの他のシステム情報を記憶して分散させることができる。
【００２１】
図２は、バッチ指向のリアルタイムアドホッククエリをサポートする統合Ｈａｄｏｏｐプラットフォーム２１２のコンポーネント例を示すブロック図である。統合Ｈａｄｏｏｐプラットフォーム２１２は、分散処理及び分散ストレージをサポートする。統合Ｈａｄｏｏｐプラットフォーム２１２は、ユーザインターフェイス２１４、ストレージ２２０及びメタデータ２２２コンポーネントを含む。ユーザインターフェイス２１４は、ＯＤＢＣドライバ、ＪＤＢＣドライバ及びＨｕｅ  ＢｅｅｓｗａｘなどのＨｉｖｅインターフェイスを含む。ユーザインターフェイス２１４はＳＱＬサポートも含む。ユーザインターフェイス２１４を介して、クエリを発行すること、ストレージ２２０との間でデータの読み書きを行うことなどができる。ストレージ２２０は、ＨＤＦＳ及び／又はＨＢａｓｅストレージを含む。ＨＤＦＳは、以下に限定されるわけではないが、テキストファイル、シーケンスファイル、ＲＣファイル、Ａｖｒｏなどを含む様々なファイルフォーマットをサポートすることができる。ｓｎａｐｐｙ、ｇｚｉｐ、ｄｅｆｌａｔｅ、ｂｚｉｐなどを含む様々な圧縮コーデックをサポートすることもできる。メタデータ２２２は、例えば、テーブル、そのパーティション、スキーマオンリード、カラム、タイプ、テーブル／ブロック位置などの情報を含むことができる。メタデータ２２２は、ＨＢａｓｅテーブルのマッピング、開始／中止行内にマッピングされる行キーカラム上の述語、単一カラム値フィルタにマッピングされる他のカラム上の述語などを含む既存のＨｉｖｅメタストアを利用することができる。
【００２２】
既存のＨａｄｏｏｐプラットフォームは、Ｈａｄｏｏｐデータのバッチ処理２１６にバッチ指向のクエリエンジン（すなわち、ＭａｐＲｅｄｕｃｅ）を使用する。ＭａｐＲｅｄｕｃｅのバッチ処理能力は、統合Ｈａｄｏｏｐプラットフォーム２１２内のリアルタイムアクセスコンポーネント２１８により補完される。リアルタイムアクセスコンポーネント２１８は、低レイテンシに最適化された分散低レイテンシ（ＬＬ）クエリエンジンを介して、統合ストレージ２２０に対してリアルタイムアドホックＳＱＬクエリを直接実行できるようにする。従って、リアルタイムアクセスコンポーネント２１８は、ビッグデータに対するクエリ及び分析の両方をサポートすることができる。一方、（ＭａｐＲｅｄｕｃｅなどの）既存のクエリエンジンは、ストレージ、メタデータ及びクエリの密接な結合を特徴とし、すなわちこのようなクエリエンジンは、この密接な結合に起因して、Ｈａｄｏｏｐから遠隔的にデータを読み取り、このデータをエンジンのストレージフォーマットに変換してからしかクエリを実行することができない。
【００２３】
図３Ａは、統合ストレージ層に対して対話型のリアルタイムＳＱＬクエリを直接提供するように低レイテンシ（ＬＬ）クエリエンジンのコンポーネントをＨａｄｏｏｐクラスタにインストールするためのインストールマネージャ３０２のコンポーネント例を示すブロック図である。
【００２４】
マネージャ３０２は、低レイテンシ（ＬＬ）クエリエンジンを自動的にインストールし、構成し、管理し、モニタできるインストールマネージャである。或いは、低レイテンシ（ＬＬ）クエリエンジンを手動でインストールすることもできる。インストールマネージャ３０２は、低レイテンシ（ＬＬ）クエリエンジンデーモン３０４、状態ストアデーモン３０６及び低レイテンシ（ＬＬ）クエリエンジンシェル３０８を含む３つのバイナリをインストールする。上述したように、低レイテンシ（ＬＬ）クエリエンジンデーモン３０４は、ＨＤＦＳ及び／又はＨＢａｓｅデータに対するクエリを計画して実行するサービス又は処理である。低レイテンシ（ＬＬ）クエリエンジンデーモンは、クラスタ内の各データノードにインストールされる。状態ストアデーモン３０６は、クラスタ内の全ての低レイテンシ（ＬＬ）クエリエンジンデーモンインスタンスの位置及び状態を追跡するネームサービスである。いくつかの実装では、状態ストアデーモン３０６を、メタデータ及び／又はその他の診断情報を提供するためのメタデータストアとすることもできる。低レイテンシ（ＬＬ）クエリエンジンシェル３０８は、低レイテンシ（ＬＬ）クエリエンジンデーモンにクエリを発行するためのコマンドラインインターフェイスであり、クライアントにインストールされる。
【００２５】
図３Ｂは、Ｈａｄｏｏｐクラスタ内の各データノードにインストールされた低レイテンシ（ＬＬ）クエリエンジンデーモンのコンポーネント例のブロック図である。図示のように、低レイテンシ（ＬＬ）クエリエンジンデーモン３０４は、各データノード３１４にインストールされる。１つの実施形態では、低レイテンシ（ＬＬ）クエリエンジンデーモン３０４が、クエリプランナ３１６、クエリコーディネータ３１８及びクエリ実行エンジン３２０を含む。クエリプランナ３１４は、クライアントからのクエリ要求を一群のプランフラグメントに変化させ、これらのプランフラグメントをクエリコーディネータ３１８に提供する。クエリプランナ３１４は、低レイテンシ（ＬＬ）クエリエンジンのフロントエンドを構築することができ、メタストア／状態ストア、ＡＰＩなどのＨａｄｏｏｐ環境の残り部分とのやりとりが容易になるようにＪａｖａ又は別の好適な言語で書くことができる。クエリプランナ３１４は、Ｓｃａｎ、ＨａｓｈＪｏｉｎ、ＨａｓｈＡｇｇｒｅｇａｔｉｏｎ、Ｕｎｉｏｎ、ＴｏｐＮ、Ｅｘｃｈａｎｇｅなどの様々な演算子を使用してクエリプランを構築することができる。各演算子は、何らかの方法でデータを実体化又は生成し、或いはデータを組み合わせることができる。１つの実装では、例えば、クエリプランナが、１又はそれ以上の演算子のレフティプラン又はツリーを（例えば、手動で又はオプティマイザを使用して）作成することができる。走査演算子は、走査行又は境界に沿ってプランを分割することができる。全ての異なるストレージマネージャには特殊な走査ノードが存在することができる。従って、例えば、ＨＤＦＳ走査ノード及びＨＢａｓｅ走査ノードが存在することができ、これらは各々、異なるファイルフォーマットのための異なる処理を内部的に利用することができる。プランによっては、ハッシュテーブルを満たした後に集約結果を出力できるハッシュアグリゲーションのためにデータを組み合わせるものもある。ユニオン演算子は、異なるプランフラグメントからの出力を結合することができる。ＴｏｐＮ演算子は、制限付きのｏｒｄｅｒ  ｂｙに相当することができる。交換演算子は、異なる２つのノード上で実行される２つのプランフラグメント間におけるデータ交換に対処することができる。
【００２６】
クエリコーディネータ３１８は、クエリに関与する全ての低レイテンシ（ＬＬ）クエリエンジンデーモンにわたってプランフラグメントの実行を開始する。クエリコーディネータ３１８は、状態ストアからのメンバーシップ情報及び／又はネームノードからのデータブロックの位置情報を使用して、クエリプランフラグメントを実行するデータノード上の低レイテンシ（ＬＬ）クエリエンジンデーモンを決定又は識別する。１つの実装では、クエリコーディネータ３１８が、クエリからのあらゆる述語を適用して、プランフラグメントを実行すべきファイルセット及びブロックセットに範囲を絞り込むこともできる。クエリコーディネータ３１８は、遠隔ノードにおける低レイテンシ（ＬＬ）クエリエンジンデーモンからのデータの最終的な集約又は結合を行うこともできる。１つの実装では、低レイテンシ（ＬＬ）クエリエンジンデーモンが、データの一部を事前に集約してノード全体に集約が分散されるようにすることによりクエリを高速化する。
【００２７】
クエリ実行エンジン３２０は、ＨＤＦＳ及びＨＢａｓｅに対し、計画したクエリフラグメントをローカルに実行する。例えば、クエリ実行エンジン３２０は、走査演算子及び／又は他のいずれかのクエリ演算子を起動する。クエリ実行エンジン３２０は、Ｃ＋＋で書かれているが、Ｊａｖａなどの他のいずれかの好適な言語で書くこともできる。クエリ実行エンジンは、ＭａｐＲｅｄｕｃｅとは別個の実行エンジンである。クエリ実行エンジンは、データ（ＨＤＦＳ及びＨＢａｓｅなど）を提供するインフラストラクチャを使用するが、ジョブトラッカ又はタスクトラッカなどの、マップリダクションを実行するインフラストラクチャは利用しない。
【００２８】
１つの実施形態では、クエリ実行エンジン３２０が、中央処理装置（ＣＰＵ）が効率的に実行できるフォーマットに解釈コードを変換するために、コンポーネント３２２、低水準仮想マシン（ＬＬＶＭ）、オプティマイザ、又はランタイムコード生成のためのその他のコンパイラインフラを含むことができる。例えば、典型的なリレーショナルデータベースシステムは、インデックスなどからデータを抽出するために、式を評価するための解釈コードを有する。クエリ実行エンジンは、低水準仮想マシン（ＬＬＶＭ）を使用してコードをハードウェアに密接に結合することにより、この問題を回避する。例えば、クエリにおけるＡ＝Ｂ／（Ａ＋Ｂ）＝Ｃという式は、３つの関数呼出しを行うことにより評価することができる。ＬＬＶＭは、この式を評価して速度を高めるために、３つの関数呼び出しを行う代わりにＣＰＵが提供する演算を使用する。
【００２９】
さらなる実施形態では、低レイテンシ（ＬＬ）クエリエンジンが、例えばテキスト処理及び／又はその他のリソース集約的な処理を行うために特別なＣＰＵ命令を使用することもできる。別の例として、速度を高めるために、特別な巡回冗長検査（ＣＲＣ３２）命令を使用してハッシュ値計算を実行することもできる。
【００３０】
クエリ処理の例
図４に、Ｈａｄｏｏｐ用の低レイテンシ（ＬＬ）クエリエンジンによるＳＱＬクエリの処理方法例を示す。上述したように、Ｈａｄｏｏｐクラスタのデータ（ＨＤＦＳ及びＨＢａｓｅなど）を有する各ノード上で低レイテンシ（ＬＬ）クエリエンジンのインスタンスが実行される。ユーザは、クライアント（ＯＤＢＣクライアント／Ｈｕｅ／コマンドラインツールなど）を介して低レイテンシ（ＬＬ）クエリエンジンデーモンのいずれかにクエリを提出する。ユーザは、データノード上の特定の低レイテンシ（ＬＬ）クエリエンジンデーモンに直接接続することにより、クライアント（ＯＤＢＣクライアントなど）を介して低レイテンシ（ＬＬ）クエリエンジンデーモンのいずれかを標的にすることができる。或いは、ラウンドロビン法を使用して、クラスタ内の全ての遠隔デーモンに負荷を分散させることもできる。
【００３１】
１つの実装では、ブロック４０２において、低レイテンシ（ＬＬ）クエリエンジンデーモンのユーザ対応側（すなわち、クエリプランナ）が、ユーザからのクエリ要求を受け取り又は受け付ける。クエリプランナは、ブロック４０６において、この要求を一群のプランフラグメントに変化させ、このクエリプランフラグメントを同じノード内のクエリコーディネータに受け渡す。クエリコーディネータは、このクエリに関与する他の全ての低レイテンシ（ＬＬ）クエリエンジンデーモン又は遠隔デーモンにわたって実行計画全体を調整する単一のインスタンスとして機能する。１つの実装では、クエリコーディネータが、実行計画全体を調整するために、ブロック４０８において、状態ストアからメンバーシップ情報を、（ＨＤＦＳクエリの）ネームノードから位置情報を受け取り、又は取得する。クエリコーディネータは、メンバーシップ情報及びブロック位置情報を使用して、クラスタ内のいずれのデーモン又はノードが実行のためにクエリプランフラグメントを受け取るべきかを決定する。ブロック４１０において、クエリコーディネータは、関連データを有するノードにクエリプランフラグメントを分散して、各ノードにとってローカルなデータに対してプランフラグメントの実行を開始する。
【００３２】
実行中、全てのノードは、ストリーミング方式で互いにやりとりすることができる。１つの実装では、判定ブロック４１２において、クエリが集約演算子又はブロッキング演算子を含まないと判定された場合、ブロック４１４において、クエリ実行要素（すなわち、クエリプランフラグメントを受け取ったノードのクエリ実行エンジン）からストリーミングされた結果がクエリコーディネータにより受け取られる。その後、ブロック４１６において、クライアントを介してユーザに結果がストリーミングされる。
【００３３】
或いは、判定ブロック４１２において、クエリ内に集約演算子又はブロッキング演算子が存在すると判定された場合、ブロック４１８において、クエリ実行要素間で中間結果がストリーミングされ、１又はそれ以上のノードに事前に集約される。ブロック４２０において、クエリコーディネータは、事前に集約した結果の集約又は結合を行って最終結果を決定し、ブロック４１６において、この最終結果がクライアントを介してユーザに送信される。
【００３４】
図５Ａ〜図５Ｆに、Ｈａｄｏｏｐ用の低レイテンシ（ＬＬ）クエリエンジンを使用したクエリ実行のフロー例を示す。
【００３５】
図５Ａを参照すると、低レイテンシ（ＬＬ）クエリエンジンを動作させるためのＨａｄｏｏｐ環境５００が、ＳＱＬアプリケーション５０２と、ＯＤＢＣクライアント、ＪＤＢＣクライアントなどのクライアント５０４とを含む共通ＨｉｖｅＳＱＬ及びインターフェイスを含む。この環境は、Ｈｉｖｅメタストア５０６などの統合メタデータ及びスケジューラエンティティ、ＹＡＲＮ５０８、ＨＤＦＳネームコード５１０及び／又は状態ストア５１２を含む。この例に示すように、Ｈａｄｏｏｐ環境は、３つのＨＤＦＳデータノード５２０ａ〜ｃのクラスタを含み、これらの各々は、上位で実行される低レイテンシ（ＬＬ）クエリエンジンデーモン５２６ａ〜ｃのインスタンスをそれぞれ有する。クライアントは、低レイテンシ（ＬＬ）クエリエンジンデーモンの１つのインスタンス（５２６ｂなど）のみに接続する。低レイテンシ（ＬＬ）クエリエンジンデーモンは、統合メタデータ及びスケジューラエンティティのうちの１つ又はそれ以上に接続し、又はこれと通信する。さらに、図示のように、低レイテンシ（ＬＬ）クエリエンジンデーモンは、分散された及び完全な超並列処理（ＭＰＰ）のために互いに接続する。なお、データノード５２０ａ〜ｃ上の低レイテンシ（ＬＬ）クエリエンジンデーモン５２６ａ〜ｃ及び状態ストア５１２は、Ｈａｄｏｏｐ内でリアルタイムなアドホッククエリ機能を提供する低レイテンシ（ＬＬ）クエリエンジンのコンポーネントである。低レイテンシ（ＬＬ）クエリエンジンは、既存の共通ＨｉｖｅＳＱＬ及びインターフェイス５０２及び５０４、Ｈｉｖｅメタストア５０６、ＹＡＲＮ５０８、ＨＤＦＳネームノード５１０、並びにＨＤＦＳデータノード５２０ａ〜ｃ及びＨＢａｓｅリージョンサーバ５２２ａ〜ｃを含む統合ストレージ層を利用する。
【００３６】
図５Ｂを参照して分かるように、ＳＱＬアプリケーション５０２を使用するユーザは、クライアント５０４を介してＳＱＬクエリ要求５２４を提出する。ＳＱＬクエリ要求は、ノード５２６ａ〜ｃのいずれかに進むことができる。１つの実装では、クライアント／アプリケーションを介して、ＳＱＬクエリ要求を送信すべきノードを指定することができる。或いは、負荷バランシングのために、ラウンドロビン又はその他のスケジューリング方法に基づいてノードを選択することもできる。ＨＤＦＳデータノード５２０ｂの低レイテンシ（ＬＬ）クエリエンジンデーモン５２６ｂのインスタンスをＳＱＬクエリ要求５２４の受け手として示している。ＳＱＬクエリ要求５２４は、低レイテンシ（ＬＬ）クエリエンジンデーモン５２６ｂのクエリプランナ５１４ｂと相互作用する。
【００３７】
図５Ｃを参照して分かるように、クエリ要求５２４を受け取ったクエリプランナ５１４ｂ及び／又はクエリコーディネータ５１６ｂは、統合メタデータ及びスケジューラエンティティの１つ又はそれ以上と通信して、このクエリ要求の計画の作成及び／又はクエリ要求の実行の調整を行うための情報を取得する。例えば、クエリプランナ及び／又はコーディネータは、どのデータノードが利用可能であるか、及びクエリに関連するデータブロックの位置を判断することができる。ＨＤＦＳでは、様々なデータノードにデータブロックの複製が記憶される。クエリプランナ及び／又はコーディネータは、ネームノード５１０と通信して各データブロックの複製の各々がどこに記憶されているかを判断するとともに、クエリを実行する複製の１つを選択することができる。一群のデータブロックの複製から１つの複製を選択する際には、ラウンドロビン又は別の方法を使用することができる。クエリプランナ５１４ｂは、クエリ要求を解析及び分析して、クラスタ内の低レイテンシ（ＬＬ）クエリエンジンデーモンに分散できるタスクを決定することができる。
【００３８】
図５Ｄを参照して分かるように、クエリコーディネータ５１６ｂは、クエリ要求に関連するデータを保持しているノードの各々のクエリ実行エンジン５１８ａ〜ｃにクエリプランナ５１４ｂからタスク又はプランフラグメントを受け渡す。３つのクエリ実行エンジンは、全てが並列に、及び分散方式で実行される。図５Ｅを参照して分かるように、クエリ実行エンジン５１８ａ〜ｃは、関連データを保持しているノード上でプランフラグメントをローカルに実行する。例えば、クエリ実行エンジン５１８ｃは、ＨＤＦＳデータノード５２０ｃに記憶されているＨＤＦＳデータのローカルダイレクトリードを実行する。同様に、クエリ実行エンジン５１８ａ及び５１８ｂは、ＨＤＦＳデータノード５２０ａ及びＨＢａｓｅ５２２ｂにそれぞれ記憶されているデータのローカルダイレクトリードを実行する。クエリ実行エンジン５１８ａ〜ｃは、プランフラグメント内に指定されている他のクエリ演算子を起動することもできる。
【００３９】
図５Ｆを参照して分かるように、クエリ実行エンジン５１８ａ〜ｃからの結果は、メモリ内転送を介してクエリコーディネータ５１６ｂに受け渡される。クエリがブロック演算（ＴｏｐＮ、アグリゲーションなど）を必要とする場合、事前集約のためにＲＴクエリエンジンデーモンノード間で中間結果がストリーミングされ、クエリコーディネータ５１６ｂにおいて最終結果が集約される。クエリ結果又は中間結果をメモリ内に保持することにより、転送がディスクスピードに制約されなくなるので性能が向上する。その後、クエリコーディネータ５１６ｂにより、クライアント５０４及びＳＱＬアプリケーション５０２を介してクエリ要求５２４に対する最終結果５２８がユーザに戻される。
【００４０】
図６は、Ｈａｄｏｏｐ用の低レイテンシ（ＬＬ）クエリエンジンによるクエリプラン例の実行を示すブロック図である。
【００４１】
クエリプラン６０２は以下に示すクエリ例に対応する。
2014194769.tif 000003
【００４２】
クエリプラン６０２は、ＨＤＦＳ走査及びＨＢａｓｅ走査、これら２つの走査から得られたデータの結合、及びグルーピング（ＴｏｐＮ）演算による集約の計算を含む。クエリプラン６０２は、別個のプランフラグメントを形成するように走査線に沿って分割される。例えば、１つのプランフラグメントはＨＢａｓｅデータ走査を含むことができ、もう１つのプランフラグメントはＨＤＦＳデータ走査を含むことができる。ＨＢａｓｅ走査は、ブロック６０８に示すように、クエリに関連するＨＢａｓｅデータを保持しているリージョンサーバにおいてローカルに実行される。ＨＤＦＳ走査は、ブロック６０６に示すように、関連するＨＤＦＳデータを保持しているデータノード上でローカルに実行される。
【００４３】
１つの実装では、実際のデータを生成するスキャナの近くで結合演算を実行した方が最適となり得る。ブロック６０６に示すように、データノードは、ＨＢａｓｅ走査からブロードキャストされたデータを受け取る交換ノード又は演算子を有する。データノードにおいては、ハッシュ結合演算によってメモリ内ハッシュテーブルが構築され、結合演算が行われ、その後に事前集約演算が行われる。次に、事前集約演算の出力が最終プランフラグメント６０４に送信される。最終プランフラグメントは、１回のみのインスタンスを有し、クエリを処理するクエリコーディネータ上で実行される。コーディネータにおいては、交換ノードが事前集約からのデータを受け取り、別のハッシュテーブル内で集約演算を実行する。その後、クライアントに提供する最終結果を生成するＴｏｐＮ演算を通じて集約演算の出力が実行される。図示のように、ＨＤＦＳ走査及びＨＢａｓｅ走査の両方を並列に行うことができる。同様に、結合及び集約演算も、関連データを保持しているデータノードにおいて並列に行うことができる。この並列実行と中間データのメモリ内転送により、クエリに対する低レイテンシ応答が可能になる。
【００４４】
図５Ｅ〜図５Ｆに示すＲＴクエリエンジンが図６のクエリを処理した場合について考察する。図５Ｅを参照すると、クエリ実行エンジン５１８ａ及び５１８ｃは、ＨＤＦＳデータノード５２０ａ及び５２０ｃのＨＤＦＳデータをそれぞれ走査する。クエリエンジン５１８ｂは、ＨＢａｓｅデータ５２２ｂを走査する。図５Ｆを参照すると、ＨＢａｓｅ走査を行うクエリ実行エンジン５１８ｂは、図示のように、ＨＤＦＳ走査を行う２つの実行エンジン５１８ａ及び５１８ｃに走査から得られたデータをブロードキャストする。次に、クエリ実行エンジン５１８ａ及び５１８ｃの各々は結合演算を実行し、事前集約結果を開始クエリコーディネータ５１６ｂに送信する。次に、開始クエリコーディネータは、結果を集約し、ＴｏｐＮ演算を実行して最終結果を取得し、この結果がＳＱＬ結果５２８としてクライアント５０４に提供される。集約の必要がない実装では、クエリ実行エンジンからクエリコーディネータにストリーミングされたデータを、非常に高速かつ効率的にクライアントにストリーミングすることができる。
【００４５】
図７は、Ｈｉｖｅ及び低レイテンシ（ＬＬ）クエリエンジンを使用してデータセットに対して行われるクエリの実行時間例を示すスクリーンショットである。Ｈｉｖｅ／ＭａｐＲｅｄｕｃｅ及び低レイテンシ（ＬＬ）クエリエンジンを使用して、例示的なデータセットを有する仮想マシンにクエリを実行してテーブル内のエントリ数を特定する。Ｈｉｖｅで実行されるクエリは、結果を得るために１又はそれ以上のＭａｐＲｅｄｕｃｅジョブを実行しなければならないので、Ｈｉｖｅが単一のＣＯＵＮＴクエリを実行するには約４０秒かかる。実際には、この４０秒の大半は、ＭａｐＲｅｄｕｃｅジョブの起動及び解体に使用される。低レイテンシ（ＬＬ）クエリエンジンを使用して同じＣＯＵＮＴクエリを同じデータセットに実行した場合、図示のように実行時間は約０．５秒にまで大幅に短縮される。このクエリ実行時間の大幅な短縮により、Ｈａｄｏｏｐクラスタとリアルタイムにやりとりしてクエリの合間に長時間待つ必要なく、分析、トランザクション、及び他のいずれかのクエリを実行する上での低レイテンシ（ＬＬ）クエリエンジンの利点が示される。
【００４６】
データ管理
１つの実施形態では、低レイテンシ（ＬＬ）クエリエンジンが、ユーザが大量のデータにクエリを行い、Ｈｉｖｅ及びＭａｐＲｅｄｕｃｅという既存のバッチ処理フレームワークを使用するよりも大幅に早く回答を得ることができるという低レイテンシの利点を提供する。さらなる実施形態では、ＲＴクエリエンジンが、大量のデータ内の隠れたインサイトを検索するために使用できるスキーマを定義する柔軟性を提供する。
【００４７】
リレーショナルデータベース管理システム（ＲＤＢＭＳ）では、最初にスキーマが定義される（すなわち、スキーマオンライトモデル）。入力データを記憶する前に、入力データのフォーマットがデータベースの専用フォーマットに変換される。スキーマオンライトモデルは、既知の質問への回答には上手く機能する。これまでに知られていない質問に回答する必要がある場合には、新たなデータを取り込む必要性が生じ得る。しかしながら、柔軟性に欠けるスキーマでは、データベースシステムが、スキーマに一致しない新たなデータの受理を開始することができない。これらの新たなデータに適合するには、スキーマを修正又は補正しなければならない。新たなデータを取り込むようにスキーマを修正又はアップグレードするには、通常、データアーキテクトが、例えば、新たなデータの正しい解析及びロード、新たなデータの読み取り又は認識などを行うように、データベースシステムに接続された全てのシステムを変更する必要がある。このスキーマをアップグレードして、データベースシステムに強固に結合された全てのシステムが共に確実に機能するようにする処理には長い時間がかかる場合がある。それまで、質問に回答するために新たなデータを取り込むことはできない。
【００４８】
低レイテンシ（ＬＬ）クエリエンジンでは、データの処理とデータの記憶が分離される。例えば、Ｈａｄｏｏｐ内の基本ストレージシステムは、元々のネイティブフォーマット（例えば、タブ区切りテキストファイル、ＣＳＶ、ＸＭＬ、ＪＳＯＮ、画像など）のファイルを受け入れることができる。低レイテンシ（ＬＬ）クエリエンジンは、スキーマオンリードモデルを使用して、あらゆるフォーマットで記憶されたデータを効率的なメモリ内フォーマット（タプルフォーマットなど）にオンザフライで変換する。例えば、低レイテンシ（ＬＬ）クエリエンジンは、テキストデータと相互作用する場合、一旦テキストデータを読み取って変換を行うことができ、全ての処理が完了するまで、変換からのデータを効率的なメモリ内フォーマットで処理することができる。
【００４９】
低レイテンシ（ＬＬ）クエリエンジンは、Ｈｉｖｅメタストア及び基本統合ストレージ（ＨＤＦＳ及びＨＢａｓｅ）などの既存のＨａｄｏｏｐコンポーネントを利用する。低レイテンシ（ＬＬ）クエリエンジンがクエリを行うデータは、同時にＭａｐＲｅｄｕｃｅでも利用することができる。例えば、クエリの実行中に、低レイテンシ（ＬＬ）クエリエンジンは、ファイル（あらゆるフォーマット）を解析し、実行時にメタストアから関連スキーマを抽出する。他のデータベースシステムでは、このことがデータのフォーマットとして不可能であり、ユーザがデータとどのように相互作用するかについての定義（すなわち、メタストア内のスキーマ）が強固に結合される。従って、Ｏｒａｃｌｅデータベースに記憶されたデータベースファイルは、Ｏｒａｃｌｅによって読み取ることはできるが、他のフレームワークによって読み取ることはできない。
【００５０】
図８は、ビジネスインテリジェンス環境におけるリアルタイムアドホッククエリのための低レイテンシ（ＬＬ）クエリエンジンを示すブロック図である。図示のように、Ｈａｄｏｏｐ８０４は、オリジナルデータ８１０をネイティブフォーマットで記憶する。オリジナルデータ８１０は、柔軟性に欠けるスキーマに適合するデータを収集する従来のリレーショナルデータベースとは異なり、いずれの柔軟性に欠けるスキーマにも従わず、実際には処理態様から分離される。Ｈａｄｏｏｐ内のデータノード上で実行される低レイテンシ（ＬＬ）クエリエンジン８０６は、クライアント（ＯＤＢＣ／ＪＤＢＣドライバなど）を介して、ビジネスインテリジェンス（ＢＩ）ツール８１６などのアプリケーションからのクエリ８０８を受け付けることができる。
【００５１】
クエリ８０８は、データ８０１から新たな値を抽出するように定義し、適合し、及び／又は再適合することができる柔軟なスキーマオンリードモデルを使用して作成することができ、これは柔軟性に欠けるスキーマでは不可能であったと思われる。低レイテンシ（ＬＬ）クエリエンジン８０６は、関連データを一旦読み取って解析し、変換を行い、変換済みのデータ８１２を最適化されたメモリ内フォーマットで記憶してクエリ８０８に対する高速応答を提供することができる。
【００５２】
図９は、本明細書で説明する方法のいずれか１つ又はそれ以上を機械に実行させる命令セットを実行できる例示的なコンピュータシステムの形の機械の図形表現である。
【００５３】
図９の例では、コンピュータシステム９００が、プロセッサ、メモリ、不揮発性メモリ、及びインターフェイス装置を含む。説明を簡単にするために、様々な共通コンポーネント（キャッシュメモリなど）は省略している。コンピュータシステム９００は、図１の例に示すコンポーネントのいずれか（及び本明細書で説明した他のいずれかのコンポーネント）を実装できるハードウェア装置を示すことを意図したものである。コンピュータシステム９００は、いずれの適用可能な既知の又は好都合なタイプであってもよい。コンピュータシステム９００のコンポーネントは、バスを介して、又は他の何らかの既知の又は好都合な装置を介して共に結合することができる。
【００５４】
プロセッサは、例えば、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）マイクロプロセッサ又はＭｏｔｏｒｏｌａパワーＰＣマイクロプロセッサなどの従来のマイクロプロセッサとすることができる。当業者であれば、「機械可読（記憶）媒体」又は「コンピュータ可読（記憶）媒体」という用語は、プロセッサがアクセス可能なあらゆる種類の装置を含むと認識するであろう。
【００５５】
メモリは、例えばバスによってプロセッサに結合される。メモリは、限定ではなく一例として、動的ＲＡＭ（ＤＲＡＭ）及び静的ＲＡＭ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）を含むことができる。メモリは、ローカルメモリであっても、遠隔メモリであっても、又は分散メモリであってもよい。
【００５６】
バスは、プロセッサを不揮発性メモリ及びドライブユニットにも接続する。多くの場合、不揮発性メモリは、磁気フロッピー（登録商標）又はハードディスク、磁気光学ディスク、光学ディスク、ＣＤ−ＲＯＭ、ＥＰＲＯＭ、又はＥＥＰＲＯＭなどのリードオンリメモリ（ＲＯＭ）、磁気又は光学カード、或いは大量データのための別の形の記憶装置である。多くの場合、このデータの一部は、コンピュータ８００内のソフトウェアの実行中に、直接メモリアクセス処理によってメモリに書き込まれる。不揮発性ストレージは、ローカルストレージであっても、遠隔ストレージであっても、又は分散ストレージであってもよい。全ての適用可能なデータをメモリ内で利用できる状態でシステムを構築できるので、不揮発性メモリは任意である。通常、典型的なコンピュータシステムは、少なくともプロセッサ、メモリ、及びメモリをプロセッサに結合する装置（バスなど）を含む。
【００５７】
通常、ソフトウェアは、不揮発性メモリ及び／又はドライブユニットに記憶される。実際には、大きなプログラムの場合、プログラム全体をメモリに記憶することが不可能なこともある。にもかかわらず、ソフトウェアは、必要時には実行のために処理に適したコンピュータ可読の場所に移動され、本明細書ではこの場所のことを例示的にメモリと呼ぶ。ソフトウェアを実行のためにメモリに移した場合でも、通常、プロセッサはハードウェアレジスタを利用して、ソフトウェアに関連する値、及び理想的には実行速度を上げるように機能するローカルキャッシュを記憶する。ソフトウェアプログラムが「コンピュータ可読媒体に実装される」と言う場合、本明細書で使用するソフトウェアプログラムは、（不揮発性記憶装置からハードウェアレジスタまでの）いずれかの既知の又は好都合な場所に記憶されることが想定されている。プログラムに関連する少なくとも１つの値がプロセッサ可読レジスタに記憶されている場合、プロセッサは、「そのプログラムを実行するように構成されている」と見なされる。
【００５８】
バスは、プロセッサをネットワークインターフェイス装置にも結合する。インターフェイスは、モデム又はネットワークインターフェイスの一方は両方を含むことができる。モデム又はネットワークインターフェイスは、コンピュータシステムの一部であると見なすこともできる。インターフェイスは、アナログモデム、ｉｓｄｎモデム、ケーブルモデム、トークンリングインターフェイス、衛星送信インターフェイス（「ダイレクトＰＣ」など）、又はコンピュータシステムを他のコンピュータシステムに結合するためのその他のインターフェイスを含むことができる。インターフェイスは、１又はそれ以上の入力及び／又は出力装置を含むことができる。Ｉ／Ｏ装置は、限定ではなく一例として、キーボード、マウス又はその他のポインティングデバイス、ディスクドライブ、プリンタ、スキャナ、及びディスプレイ装置を含むその他の入力及び／又は出力装置を含むことができる。ディスプレイ装置は、限定ではなく一例として、ブラウン管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、又は他の何らかの適用可能な既知の又は好都合なディスプレイ装置を含むことができる。説明を簡単にするために、インターフェイス内には、図８の例には示していないいずれかの装置のコントローラが存在すると想定される。
【００５９】
動作時には、コンピュータシステム８００を、ディスクオペレーティングシステムなどのファイル管理システムを含むオペレーティングシステムソフトウェアによって制御することができる。関連するファイル管理システムソフトウェアを含むオペレーティングシステムソフトウェアの一例として、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ社製のＷｉｎｄｏｗｓ（登録商標）として知られているオペレーティングシステムのファミリ、及びこれらの関連するファイル管理システムがある。この関連するファイル管理システムソフトウェアを含むオペレーティングシステムソフトウェアの別の例には、Ｌｉｎｕｘ（登録商標）オペレーティングシステム及びこの関連するファイル管理システムがある。通常、ファイル管理システムは、不揮発性メモリ及び／又はドライブユニットに記憶され、オペレーティングシステムが必要とする様々な行為をプロセッサに実行させてデータを入出力するとともに、ファイルを不揮発性メモリ及び／又はドライブユニットに記憶することを含めてデータをメモリに記憶する。
【００６０】
詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットにおける演算のアルゴリズム及び記号表現の観点から示すことができる。これらのアルゴリズムによる記述及び表現は、データ処理技術における当業者が自らの研究内容を他の当業者に最も効果的に伝えるために使用する手段である。ここでは、及び一般的に、アルゴリズムとは、望ましい結果をもたらす首尾一貫した一連の演算であると考えられる。これらの演算は、物理量の物理的操作を必要とするものである。必ずしもそうではないが、通常、これらの量は、記憶、転送、合成、比較、及び別様に操作できる電気又は磁気信号の形をとる。主に共通使用という理由で、時にはこれらの信号を、ビット、値、要素、記号、文字、用語、番号などと呼ぶことが便利であることが分かっている。
【００６１】
しかしながら、これらの及び同様の用語は、全て適当な物理量に関連付けられるべきものであり、またこれらの量に与えられた便利な表記に過ぎないことに留意されたい。以下の説明から明らかなように、特に別途述べていない限り、本発明全体を通じて「ｐｒｏｃｅｓｓｉｎｇ（処理する）」又は「ｃｏｍｐｕｔｉｎｇ（算出する）」又は「ｃａｌｃｕｌａｔｉｎｇ（計算する）」又は「ｄｅｔｅｒｍｉｎｉｎｇ（決定する）」又は「ｄｉｓｐｌａｙｉｎｇ（表示する）」などの用語を利用した説明は、コンピュータシステムのレジスタ及びメモリ内の物理（電子）量として表されるデータを操作し、コンピュータシステムのメモリ、レジスタ、又はその他のこのような情報記憶装置、送信又は表示装置内の物理量として同様に表される他のデータに変換するコンピュータシステム又は同様の電子コンピュータ装置の動作及び処理を意味するものである。
【００６２】
本明細書で示すアルゴリズム及び表示は、本質的にいずれかの特定のコンピュータ又はその他の装置に関連するものではない。本明細書の教示に従うプログラムとともに様々な汎用システムを使用することができ、或いはいくつかの実施形態の方法を実行するために、より特殊化した装置を構成することが便利であると証明することができる。以下の説明から様々なこれらのシステムに必要な構造が明らかになるであろう。また、いずれかの特定のプログラミング言語に関連して技術を説明しているわけではなく、従って様々なプログラミング言語を使用して様々な実施形態を実施することができる。
【００６３】
代替の実施形態では、機械が独立装置として動作することも、又は他の機械に接続する（例えば、ネットワーク化する）こともできる。ネットワーク化した展開では、この機械は、クライアント−サーバのネットワーク環境ではサーバ又はクライアントマシンとして、又はピアツーピア（又は分散型）ネットワーク環境ではピアマシンとして動作することができる。
【００６４】
この機械は、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、ラップトップコンピュータ、セットトップボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、携帯電話、ｉＰｈｏｎｅ、Ｂｌａｃｋｂｅｒｒｙ、プロセッサ、電話機、ウェブ機器、ネットワークルータ、スイッチ又はブリッジ、又はこの機械が取るべき行動を指定する（順次的な又はそれ以外の）命令セットを実行できるいずれの機械であってもよい。
【００６５】
例示的な実施形態では、機械可読媒体又は機械可読記憶媒体を単一の媒体として示しているが、「機械可読媒体」及び「機械可読記憶媒体」という用語は、１又はそれ以上の命令セットを記憶する単一の媒体又は複数の媒体（集中型又は分散型データベース及び／又は関連するキャッシュ及びサーバなど）を含むと理解されたい。また、この「機械可読媒体」及び「機械可読記憶媒体」という用語は、機械が実行するための命令セットを記憶し、コード化し、又は伝達することができ、本明細書で開示した技術及び技術革新の方法のいずれか１つ又はそれ以上を機械に実行させるいずれかの媒体を含むとも理解されたい。
【００６６】
一般に、本開示の実施形態を実施するために実行されるルーチンは、オペレーティングシステム又は特定のアプリケーション、コンポーネント、プログラム、オブジェクト、モジュール、又は「コンピュータプログラム」と呼ぶ一連の命令の一部として実現することができる。通常、コンピュータプログラムは、コンピュータ内の様々なメモリ及び記憶装置に様々な時点で設定され、コンピュータ内の１又はそれ以上の処理装置又はプロセッサに読み込まれて実行された場合に本開示の様々な態様に関する要素を実行するようにコンピュータを動作させる１又はそれ以上の命令を含む。
【００６７】
さらに、実施形態については、完全に機能するコンピュータ及びコンピュータシステムを背景として説明したが、当業者であれば、様々な実施形態を様々な形のプログラム製品として分散させることができ、また実際に分散を行うために、特定の種類の機械又はコンピュータ可読媒体に関係なく本開示が等しく適用されると認識するであろう。
【００６８】
機械可読記憶媒体、機械可読媒体、又はコンピュータ可読（記憶）媒体のさらなる例としては、以下に限定されるわけではないが、とりわけ揮発性及び不揮発性記憶装置、フロッピー及びその他のリムーバブルディスク、ハードディスクドライブ、（コンパクトディスク型リードオンリメモリ（ＣＤ―ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）などの）光ディスクなどの記録可能型媒体、及びデジタル及びアナログ通信リンクなどの送信型媒体が挙げられる。
【００６９】
文脈上明確に別の意味に解す場合を除き、説明及び特許請求の範囲を通じて、「備える（ｃｏｍｐｒｉｓｅ、ｃｏｍｐｒｉｓｉｎｇ）」という単語、及び同様の単語は、排他的又は網羅的な意味ではなく包括的な意味で、すなわち「含むけれども限定はされない」という意味で解釈すべきである。本明細書で使用する「接続された（ｃｏｎｎｅｃｔｅｄ）」、「結合された（ｃｏｕｐｌｅｄ）」という用語、又はこれらのあらゆる変形は、２又はそれ以上の要素間の直接的又は間接的な接続又は結合を意味し、要素間の接続の結合は、物理的なもの、論理的なもの、又はこれらの組み合わせとすることができる。また、「本明細書において（ｈｅｒｅｉｎ）」、「上記で（ａｂｏｖｅ）」、「以下で（ｂｅｌｏｗ）」という単語、及び同様の趣旨の単語は、本出願において使用する場合、総じて本出願のことを意味し、本出願のいずれかの特定の部分を意味するものではない。状況によっては、上記の詳細な説明において単数形又は複数形を使用した単語が、それぞれ複数又は単数を含むこともある。２又はそれ以上の項目のリストに関する「又は（ｏｒ）」という単語は、リスト内の項目のいずれか、リスト内の項目全て、及びリスト内の項目のいずれかの組み合わせという単語の解釈を全て含む。
【００７０】
上記の本開示の実施形態についての詳細な説明は網羅的なものではなく、又は本教示を上記で開示した形に限定するものでもない。上記では、例示を目的として本開示の特定の実施形態及び例について説明しているが、当業者であれば認識するように、本開示の範囲内で様々な同等の修正が可能である。例えば、処理又はブロックを所定の順序で示しているが、代替の実施形態では、ステップを有するルーチンを異なる順序で実施し、又は異なる順序のブロックを有するシステムを使用することができ、いくつかの処理又はブロックを削除、移動、追加、細分化、結合、及び／又は修正して代替例又は副結合を提供することができる。これらの処理又はブロックの各々は、様々な異なる方法で実施することができる。また、場合によって処理又はブロックが連続して実行されるように示しているが、代わりにこれらの処理又はブロックを並列に、又は異なる時点で実行することもできる。さらに、本明細書に示すあらゆる特定の数字は一例にすぎず、代替の実施構成では異なる値又は範囲を使用することができる。
【００７１】
本明細書で示した本開示の教示は、上述のシステムに限らず他のシステムにも適用することができる。上述した様々な実施形態の要素及び行為を組み合わせてさらなる実施形態を実現することもできる。
【００７２】
上述したあらゆる特許及び出願及びその他の引用文献は、添付の出願書類にリストできるあらゆるものを含め、引用により本明細書に組み入れられる。必要であれば、本開示の態様を、上述した様々な引用文献のシステム、機能及び概念を採用してさらに別の本開示の実施形態を提供するように修正することもできる。
【００７３】
本開示には、上記の詳細な説明に照らして、これらの及びその他の変更を行うことができる。上記の説明では本開示のいくつかの実施形態について説明し、また考えられる最良の形態について説明しているが、これらが本文中でいかに詳述されているように見えても、様々な方法で教示を実践することができる。システムの詳細は、その実装の詳細を大幅に変更することができるが、それでもなお本明細書で開示する主題に含まれる。上述したように、本開示のいくつかの特徴又は態様を説明する際に使用した特定の用語を、この用語が関連する本開示のいずれかの特定の特性、特徴又は態様に制約されるように本明細書で再定義されていることを意味すると理解すべきではない。一般に、以下の特許請求の範囲で使用する用語は、上記の詳細な説明で明確に定義していない限り、本開示を本明細書で開示する特定の実施形態に限定するものであると解釈すべきではない。従って、本開示の実際の範囲は、開示した実施形態のみならず、特許請求の範囲による開示を実践又は実施する全ての同等の方法も含むものである。
【００７４】
以下では、本開示のいくつかの態様をいくつかの請求項の形で示すが、本発明者らは、本開示の様々な態様をあらゆる数の請求項の形で企図する。例えば、米国特許法第１１２条第１３段に基づき、本開示の１つの態様のみを手段プラス機能の請求項として記載しているが、他の態様も同様に、手段プラス機能の請求項として、又はコンピュータ可読媒体内で具体化されるような他の形で具体化することができる。（米国特許法第１１２条第１３段に基づいて扱われると想定される請求項は、いずれも「〜のための手段（ｍｅａｎｓ  ｆｏｒ)」という単語で始まる。）従って、本出願人は、本願出願後に追加の請求項を加えて、このような本開示の他の態様のための追加の請求項形式を続行する権利を有するものである。
【図１】
2014194769.tif 000004
【図２】
2014194769.tif 000005
【図３Ａ】
2014194769.tif 000006
【図３Ｂ】
2014194769.tif 000007
【図４】
2014194769.tif 000008
【図５Ａ】
2014194769.tif 000009
【図５Ｂ】
2014194769.tif 000010
【図５Ｃ】
2014194769.tif 000011
【図５Ｄ】
2014194769.tif 000012
【図５Ｅ】
2014194769.tif 000013
【図５Ｆ】
2014194769.tif 000014
【図９】
2014194769.tif 000015
【図６】
2014194769.tif 000016
【図７】
2014194769.tif 000017
【図８】
2014194769.tif 000018
【外国語明細書】
2014194769000001.pdf