第1の態様において、方法は、データの第1の部分をHDFSデータストレージに記憶する、Hadoopクラスタのノードで、Hadoopクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第1のインスタンスを実行すること、データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、データ処理エンジンの第1のインスタンスによってプログラムの少なくとも一部を実行すること、データ処理エンジンによって外部データソースからデータの第2の部分を受信すること、データの第2の部分をHDFSストレージ以外に記憶すること、ならびに、データ処理エンジンによって、少なくともデータの第1の部分およびデータの第2の部分を使用するプログラムによって識別されたデータ処理動作を行うことを含む。
第2の態様において、方法は、データの第1の部分を記憶し、並列で動作可能なデータの集約を記憶する、ノードのクラスタと共に動作するノードで、クラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第1のインスタンスを実行すること、データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、データ処理エンジンの第1のインスタンスによってプログラムの少なくとも一部を実行すること、データ処理エンジンによって外部データソースからデータの第2の部分を受信すること、データの第2の部分をノードの揮発性メモリに記憶すること、ならびに、データ処理エンジンによって、少なくともデータの第1の部分およびデータの第2の部分を使用するプログラムによって識別されたデータ処理動作を行うことを含む。
第1または第2の態様に従った第3の態様において、Hadoopクラスタはデータ処理エンジンのインスタンスを各々が実行するノードを含み、データ処理エンジンのインスタンスは、a)データの第1の部分を含むデータの第1の本体であり、Hadoopクラスタの他のノードによって処理されるデータの他の部分も含む、データの第1の本体上、および、b)データの第2の部分を含むデータの第2の本体であり、関係データベースシステムに固有の形式で記憶され、データの第2の本体はHadoopクラスタのノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第2の本体上で、共に並列でデータ処理動作を実行するために、同時に行う。
第1から第3までの態様のいずれかに従った第4の態様において、コンピュータプログラムはデータ処理エンジンのグラフ実行エンジンによって実行されるデータフローグラフであり、データフローグラフは、a)Hadoopクラスタを表す少なくとも1つのコンポーネント、b)データの第2の部分のソースを表す少なくとも1つのコンポーネント、およびc)少なくとも1つのデータソースから受信されたデータに対して行われるべき動作に関連付けられた少なくとも1つのデータフローを表す少なくとも1つのリンクを含む。
第4の態様に従った第5の態様において、データフローグラフの少なくとも1つのコンポーネントはHadoopクラスタからのデータフローを表すリンクに接続され、少なくとも1つのコンポーネントはデータの第2の部分のソースからのデータフローを表すリンクに接続される。
第1から第5までの態様のいずれかに従った第6の態様において、データ処理エンジンはMapReduceプログラミングモデルを実装していない。
第1から第6までの態様のいずれかに従った第7の態様において、データの第2の部分は揮発性メモリに記憶される。
第1から第7までの態様のいずれかに従った第8の態様において、方法は、データベースクエリを受信することを含み、データベースクエリはHadoopクラスタを含む少なくとも1つのデータソースから受信されたデータに対して行われるべき少なくとも1つの動作を含み、コンピュータプログラムはデータベースクエリに対応する動作を表すコンポーネントを含み、コンピュータプログラムは、少なくとも1つのデータソースを表す少なくとも1つのコンポーネントと、少なくとも1つのデータソースから受信されたデータに対して行われるべき動作に関連付けられた少なくとも1つのデータフローを表す少なくとも1つのリンクとを含む。
第1から第8までの態様のいずれかに従った第9の態様において、データの第2の部分はデータの第1の部分の特徴に基づいて選択された。
第1から第9までの態様のいずれかに従った第10の態様において、データの第2の部分は関係データベースの行のサブセットを含み、データの第2の部分は関係データベースの列のサブセットを含む。
第1から第10までの態様のいずれかに従った第11の態様において、データの第2の部分は、外部データソースからHadoopクラスタの第2のノードで受信されたデータの第3の部分とは別個である。
第1から第11までの態様のいずれかに従った第12の態様において、方法は、Hadoopクラスタの外側のデータ処理エンジンの第2のインスタンスによってプログラムの少なくとも一部を実行することを含む。
第1から第12までの態様のいずれかに従った第13の態様において、方法は、Hadoopクラスタの外側のデータ処理エンジンの第2のインスタンスによって実行されるプログラムの少なくとも一部と通信することを含む。
第14の態様において、方法は、Hadoopクラスタのノードのデータ処理エンジンで、データ処理エンジンによって実行されるコンピュータ実行可能プログラムによって識別されたデータ処理動作を行うことを含み、データ処理動作は、ノードのHDFSデータストレージに記憶されたデータの少なくとも第1の部分、およびHadoopクラスタ外部のデータソースから受信され、HDFSストレージ以外に記憶されたデータの少なくとも第2の部分を使用して行われる。
第15の態様において、方法は、Hadoopクラスタおよび関係データベースを含むデータソースを指定するSQLクエリを受信すること、SQLクエリに対応するコンピュータ実行可能プログラムを生成すること、Hadoopクラスタのノードのデータ処理エンジンでコンピュータ実行可能プログラムを実行すること、ならびに、少なくともHadoopクラスタのデータおよび関係データベースのデータを使用するコンピュータ実行可能プログラムによって識別されたデータ処理動作を、データ処理エンジンによって行うことを含む。
1つまたは複数の態様は、単独または組み合わせて、コンピュータシステムによって実行されたとき、態様の動作を実施する機械可読命令を含むコンピュータプログラム製品を記憶する、システムまたは装置として、あるいはコンピュータ可読ストレージデバイスとして、表すことができる。一例として、コンピュータ可読ストレージデバイスは、コンピュータシステムによって実行されたとき、第1から第15までの態様のいずれか1つに従って動作を実施する、機械可読命令を含む、コンピュータプログラム製品を記憶することができる。別の例として、1つまたは複数のプロセッサを含むコンピュータシステムは、1つまたは複数のプロセッサによって実行されたとき、第1から第15までの態様のいずれか1つに従って動作を実施する機械可読命令を含むコンピュータプログラム製品を記憶するコンピュータ可読ストレージデバイスを含むことができる。
上記態様のうちの1つまたは複数は、以下の利点を提供することができる。第1に、Hadoopノードは揮発性メモリに記憶したデータに対して動作可能であり、データに対して動作を行う前にデータをディスクに書き込む必要はない。第2に、Hadoopノードは複数タイプのデータソースからデータを受信するように構成可能である。第3に、Hadoopノードは汎用データ処理オペレーティングシステム、たとえばHadoopノードに特有でないデータ処理オペレーティングシステムに関連して動作するように構成可能である。第4に、Hadoopノードはデータ処理動作を実施するデータフローグラフで動作するように構成可能である。
本発明の他の特徴および利点は、以下の説明から、および特許請求の範囲から明らかとなろう。
図1は、1つのタイプのデータソース110から発信するデータ116a〜dおよび別のタイプのデータソース120から発信するデータ104が処理され、処理されたデータ106が1つまたは複数の出力150に提供される、データ処理システム100を示す。データに対して行われる動作が、データソース110、120のいずれのタイプから発信されたデータであるかに制限されないように、データを処理することができる。これを遂行する様式の1つによって、データソース110のうちの1つが他のデータソース120からデータ104を受信し、受信したデータ104をデータソース110に固有の技法を使用して処理することが可能となる。このように、データ処理の多くはデータソース110によって行われる。複数タイプのデータソースからのデータを処理するデータ処理システムは、連合データ処理システムと呼ばれることもある。
1つのタイプのデータソース110は、Hadoop分散ファイルシステム(時にはHDFSと呼ばれる)クラスタに記憶されるファイルの集合である。HDFSは、各々が技法に準拠した様式でデータを記憶する複数のコンピュータシステムにわたってデータを分散するために使用可能な、ファイルシステムを定義する技法である。単にHadoopクラスタとも呼ばれるHDFSクラスタは、データの一部に対して単一の動作を並列に(たとえばほぼ同時に)実施できるようにデータの一部を記憶している、コンピュータシステム(時にはノードと呼ばれる)の集合である。各ノードのデータは、HDFS技法によって定義されたファイルシステムを使用して記憶される。ファイルシステムはHDFSストレージと呼ばれるときもある。一般に、HDFSに従って動作するファイルシステムは、いずれの種類のデータファイルでも記憶することができる。時には、シーケンスファイルと呼ばれるHadoop固有のファイルタイプが、Hadoopノードに記憶されるデータのファイル形式として使用される。Hadoopクラスタは、何十何百もの(またはそれ以上の)ノードを有することができる。このようにHadoopクラスタは、それら何十何百ものノードにわたって単一のデータ処理動作を並列に実施することができ、各ノードはデータの一部に対して動作する。以下で説明するような技法を使用して、それ以外の方法で動作を行う異なるデータ処理システムではなく、Hadoopクラスタに対して、ほとんどまたはすべてのデータ処理動作を実施することができる。
著者らは一般に、Hadoopノードをデータの一部を記憶するコンピュータシステムとして説明するが、Hadoopノードは他の形を取ることができる。データの特定部分がコンピュータハードウェアの特定部分に関連付けられる任意の配置構成を、Hadoopノードとすることができる。たとえば単一のHadoopノード自体を、ノードを形成するために共に動作する2つまたはそれ以上のコンピュータシステム、ノードを形成するために共に動作するマルチプロセッサコンピュータシステムの2つのプロセッサ、あるいは何らかの他の配置構成であるかどうかにかかわらず、複数のコンピュータシステムで構成することが可能である。単一のコンピュータシステムがHDFS技法に従って動作する2つの別個のファイルシステムを有しており、各々が独自のデータ部分を備えている場合、単一のコンピュータシステムは複数のHadoopノードとしても動作可能である。さらに筆者らが、ノードが特定のアクションを行うとする場合、それはノードが、説明するアクションを機能コンポーネントがその上で実施するプラットフォームとして働くことを意味する。たとえばノード上で実行するコンピュータプログラムは、アクションを実施することができる。
さらに筆者らは本明細書でHadoop技法を参照するが、Hadoopの名前を持たない、および/またはHDFSデータストレージ形式を使用しない他の同様の技法を、本明細書で説明する技法と共に使用することができる。このように、これらの同じ技法を他のタイプのクラスタと共に使用することができる。たとえばこれらの技法を、(たとえば、データの集約を個々のノードによって動作される部分に分けることによって)データの集約に対してデータ処理動作を実施するために、互いに関連して動作するノードによって並列に動作可能なデータの集約を記憶する別の種類のクラスタと共に使用することができる。
Hadoopクラスタ内のデータを処理する1つの方法は、MapReduceプログラミングモデルを使用することである。一般にMapReduceプログラムは、フィルタリングおよび分類(大学生を名前によってキューに分類することなどであり、名前ごとに1つのキューがある)を行うMap手順、および集計動作(それぞれのキュー内の大学生の数を数え、名前の頻度を引き出すことなど)を行うReduce手順を含む。システムのユーザはMapおよびReduceの手順を指定するが、各手順(すなわちプロセス)のインスタンス(または呼び出し)の数、またはそれらを実行するノードは必ずしも決定しない。むしろ「MapReduceシステム」(「インフラストラクチャ」、「フレームワーク」とも呼ばれる)は、分散ノードのセットを整列させ、様々なタスク(たとえばMapおよびReduce手順および関連付けられた通信)を並列に実行し、システムの様々な部分間でのすべての通信およびデータ転送を管理し、冗長性および障害に備え、全プロセスを総括的に管理することによって、調整する。MapReduceシステムは、データ位置を認識することで、MapまたはReduce手順のインスタンスの実行をスケジューリングすることができる。
他方のデータソース120は、関係データベース(時には関係データベース管理システム、またはRDBMSと呼ばれる)、フラットファイル、ネットワークリソースからのデータのフィード、または、データ処理システムからの要求に応答してデータを提供できる任意の他のリソースなどの、データソースとすることができる。データ処理動作は、Hadoopクラスタ112に記憶されたデータと、他方のデータソース120から受信されたデータ104との組み合わせに対して行うことができる。データをHadoopクラスタ112から、および他方のデータソース120から抽出するために、独立した処理システムを使用するのではなく、Hadoopクラスタ112のデータ処理機能を使用して、Hadoopクラスタ112に記憶されたデータ116a〜dと、他方のデータソース120から受信したデータ104との組み合わせを処理することができる。たとえばこれは、Hadoopクラスタ112のデータ処理機能を利用することで実行できる。たとえば図1に示されるように、他方のデータソース120から受信したデータ104は、Hadoopクラスタ112に直接伝送される。ここで筆者らは、他方のデータソース120として関係データベース122の例を用いる。
データを処理するために組み合わせる方法の1つは、Hadoopクラスタ112のノード114a〜dに記憶されたデータ116a〜dを関係データベースにコピーすることである。次いで関係データベース122に、たとえば関係データベース122に固有のデータ処理動作(たとえば、SQLなどのクエリ言語に従って定義されたデータベース動作)を使用して、組み合わせたデータに対して動作するように命じる。しかしながらこの技法では、Hadoopクラスタ112の並列処理機能は失われる。データを処理するために組み合わせる方法の1つは、関係データベース122に記憶されたデータ124a〜cのほとんどまたはすべてをHadoopクラスタ112にコピーし、その後、Hadoopクラスタ112に固有の技法を使用して、たとえば前述のMapReduceプログラミングモデルを使用して、データを処理することである。
実装の様式に応じて、どちらの技法も、潜在的に大量のデータを一方のデータソースから他方のデータソースにコピーすることが必要な可能性があり、a)典型的には少なくともいくつかのデータをディスクに書き込むことが必要である、b)典型的には、動作を行うのに必要な処理時間に比べて、データをコピーするためにはかなり多くの処理時間が必要である、およびc)コピーされたデータは古くなるリスクがある、すなわち、動作が実施されている間はデータが変更されないことを保証するためのステップが行われない限り、コピーされたデータはそのソースに比べて旧式になる。これらの制限のすべてが、いずれの技法の性能および効率にも影響を与える。
別の技法では、ほとんどまたはすべてのデータをそれぞれの固有のデータソース110、120に記憶することが可能であるため、ごく少量のデータがデータソース間でコピーされることになる。言い換えればデータ処理動作は、1つのタイプのデータソースのみを利用する動作を実施するのではなく、両方のタイプのデータソース110、120のリソースを利用するための技法を使用するように実施される。実際の例として、Hadoopクラスタ112のノード114a〜dは、タスクを完了するために必要な何らかの動作(たとえば、データの一部に対して変換を行う動作)を行うことができ、関係データベース122は、同じくタスクを完了するために必要な何らかの他の動作(たとえば、データの別の部分に対して変換を行う動作)を実施することができる。
これらの技法の例として、Hadoopクラスタ112のノード114a〜dがデータ処理動作を行うとき、各ノード114a〜dは動作を実施することが必要なデータのみ、たとえばそれに対して動作が行われるデータのみにアクセスする。たとえばいくつかのデータを、列および行を有するデータベーステーブルに記憶することができる。ある列または行に特定の動作のみが適用される場合、それらの列または行のみがデータソース間で、たとえば関係データベース122からノード114a〜dのうちの1つにコピーされる。実際の例として、関係データベース122が電話会社の顧客を表すデータを記憶しており、データ処理システムが電話番号のリストを必要とする動作を行っている場合、ノード114a〜dは電話番号を記憶している関係データベース122の列のみにアクセスし、顧客の名前、住所、またはデータベースに記憶され得る他のデータを表す列にはアクセスする必要がない。関係データベース122は、特定の動作、たとえばHadoopクラスタのノード114a〜dによって実施される特定の動作に必要な、データベースの部分のみを戻すために必要な動作を行うことができる。
さらに、Hadoopクラスタ112の個々のノード114a〜dは、各々、Hadoopクラスタ112によって記憶される全データの一部のみを記憶することができる。各ノード114a〜dは、そのデータの部分に関して動作を実施するために必要などのような追加のデータでもそれのみにアクセス可能であり、それらの動作を実施するために必要でない他のデータにアクセスする必要はない。たとえばノード114aが、データのその部分と、異なるデータソースからの他のデータとの両方を使用する動作を行っている場合、ノードは、データのその部分に対して行われる動作に適用可能な他のデータのサブセットのみにアクセスする。
実際の例として、データ処理システムは、顧客のマスタリストおよび通話記録のデータベースを有する電話会社に代わって、データの本体を管理することができる。この例では、クラスタ112のノード114aは、米国内で発信または受信された通話のみを表すデータ116aを記憶し、他のノード114b〜dは、他のすべての国で発信または受信された通話を表すデータ116b〜dを記憶することができる。クラスタ112のノード114a〜dとは分離されている関係データベース122は、電話会社の顧客のリストを表すデータ124を記憶することができる。(通話のデータベースの現実世界での実装は何百何千というノードが必要な可能性があるため、これは例としてのみ使用される。)
この例では、データ処理動作は、Hadoopクラスタ112のノード114a〜dによって少なくとも部分的に行うことができる。たとえば動作は、特定の通話に関連付けられた顧客を識別する動作とすることができる。米国内で発信および受信された通話を表すデータを記憶するノード114aには、米国内で電話サービスを受けている顧客のみに関する顧客記録を表すデータ124aを提供し、任意の他の国で電話サービスを受けている顧客を表すいずれのデータ124b、124cも提供しないことができる。いくつかの例では、関係データベース122からのデータ124a〜cを、Hadoopクラスタ112のそれぞれのノード114a〜dに提供することができる。いくつかの例では、Hadoopクラスタのそれぞれのノード114a〜dは、関係データベース122にデータ124a〜cの一部を要求することができる。したがって、ノード114aがアクセスするデータの量は、顧客のデータベース全体、たとえば関係データベース122によって記憶されたデータ124a〜cのすべてに比べて少ない。いくつかの例では、ノード114a〜dによって受信されたデータ124a〜cを、(たとえばノード114a〜dによって)ノード114a〜dに記憶されたデータの形式に適合する形式に変換することができる。
各動作が行われるときに、比較的少量のデータのみがそれぞれのデータソースから受信されるため、動作は、ディスクなどの持続的な(不揮発性)ストレージとは対照的に、アクティブな(揮発性)メモリに記憶されたデータに対して行うことが可能である。多くのコンピューティング環境において、持続性ストレージはアクティブメモリよりも低速になる傾向があるため、これによってデータ処理動作がスピードアップすることになる。
いくつかの実装において、データ処理システム100はグラフベース処理システムとすることができる。グラフベース処理システムは、データフローグラフを使用してデータを処理する。データフローグラフは、データのフローを表すコンポーネント間の入力データおよびリンクに対して行われるべき動作を表すコンポーネントを含む、コンピュータプログラムである。(コンポーネントは時にはノードと言い表されるが、Hadoopクラスタのノードとの混同を防ぐために、ここではコンポーネントと呼ばれる。)コンポーネントによって表される動作は、入力データを処理することによって、入力データに基づき出力データを生成する。コンポーネントは、コンポーネントが他のコンポーネントにリンクされている場合、他のコンポーネントに入力データを提供し、他のコンポーネントから出力データを受信することが可能であり、2つのコンポーネント間の各リンクはコンポーネントのうちの1つから他方のコンポーネントへのデータフローを表す。データフローグラフがグラフベース処理システムによって実行されるとき、コンポーネントの各々が実行され、たとえばコンピュータプログラムまたはコンピュータプログラムの一部が実行され、コンポーネントによって表される動作を実施する。実行中、データフローグラフは、出力データを生成するために処理される(たとえば、データフローグラフのコンポーネントの動作によって動作される)入力データを受信する。グラフベースシステムの一例は、「Managing Parameters for Graph−Based Applications」という名称の米国公開第2007/0011668号に詳細に記載され、参照により本明細書に組み込まれる。グラフベースの計算を実行するためのシステムは、「Executing Computations Expressed as Graphs」という名称の米国特許第5,966,072号に記載され、参照により本明細書に組み込まれる。
グラフの実行は、時にはグラフオペレーティングシステムと呼ばれる、専用オペレーティングシステムによって容易となることがある。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎をなす動作を実行することができるコンピュータプログラムである。たとえば、データフローグラフのコンポーネントがデータベースシステムによって実施されるべき動作を表す場合、グラフオペレーティングシステムには、動作を実施するようにデータベースシステムに命じるタスクが与えられる。このため、グラフオペレーティングシステムは、時にはグラフベースデータ処理システムと対話するシステム上で実行する。図1に示された例では、グラフオペレーティングシステム130a〜dのインスタンスは、Hadoopクラスタ112のノード114a〜d上で実行可能である。Hadoopクラスタのノード上でグラフオペレーティングシステムを実行するための技法の例は、「Parallel Access to Data in a Distributed File System」という名称の米国出願第14/090,434号に記載されており、参照により本明細書に組み込まれる。
グラフオペレーティングシステム130a〜dまたは任意の他の汎用データ処理システムを使用して、Hadoopクラスタ112のノードが他のデータソースからデータを受信できるようにすることが可能である。たとえばグラフオペレーティングシステムは、関係データベース122からのデータの受信を可能にする場合がある。この例では、グラフオペレーティングシステムのインスタンスが関係データベース122からデータを受信し、これを、グラフオペレーティングシステムのインスタンスが実行しているHadoopノード114a〜dの適切な部分またはサブシステムに提供することができる。このように、Hadoopクラスタのノード114a〜dは、関係データベースなどの別の種類のデータソースからデータを受信するためにいずれのカスタム機能(たとえば特注コード)も必要としない。いくつかの例では、グラフオペレーティングシステム130a〜dは、特定のデータソースからいかにしてデータを受信および解析するかを記述した「プラグイン」を受信する機能を有する。Hadoopノード114aが関係データベース122からデータを受信する例では、Hadoopノード114a上で実行しているグラフオペレーティングシステム130aのインスタンスは、関係データベース122から受信したデータをいかにして解析するかを決定するために「プラグイン」にアクセスすることができる。
いくつかの実装において、Hadoopクラスタ112のノード114a〜d上で実行するグラフオペレーティングシステム130a〜dのインスタンスは、関係データベース122の機能と通信する。たとえば関係データベース122は、グラフオペレーティングシステムなどの外部エンティティが関係データベース122によって記憶されたデータにアクセスできるようにする関数(たとえばデータベースコマンド)をサポートすることができる。
いくつかの実装において、データ処理システム100には、データベースクエリ140を実施するタスクが与えられる。データベースクエリは、データベースコンテンツのサブセットおよびそのサブセット内のデータ上で行うアクションを記述する、命令のセットである。データベースクエリ140が、電話会社に関するデータを記憶している前述のシステムで使用されるデータベースクエリである場合、データベースクエリ140は、電話会社によって使用されるデータソースに記憶された通話のある記録に関する要求とすることができる。たとえば、いくつかのデータベースシステムは、構造化クエリ言語(SQL)などの専用データベースクエリ言語で作成されたデータベースクエリを行う。これらのデータベースシステムにおいて、SQLクエリはデータベースのコンテンツを操作するための主な手段である。
いくつかの実装において、データベースクエリ140はSQLクエリである。SQLクエリは、構造化クエリ言語によって定義されたコマンドおよび構文を使用する。関係データベース122は、1つまたは複数のデータベーステーブルの集合を含み、データベーステーブルは、a)各々が記録を表す行、およびb)各々が行に記録されたデータのカテゴリを表す列、に配置構成されたデータの集合である。たとえば「current_customers」と呼ばれるデータベーステーブルは、各々がビジネスの現在の顧客を表す行を有し得、顧客の名前、顧客の住所、顧客が最後に購入した製品などの、データのカテゴリを表す列を有し得る。
関係データベース122は典型的には、クエリを解釈し、クエリに応答してデータを戻すための機能を含む。クエリを解釈することとクエリに応答してデータを戻すことの組み合わせは、時にはクエリの実行と呼ばれる。たとえばいくつかの関係データベースの実装は、a)SQLクエリを解析し、b)構造化クエリ言語によって定義される動作を識別し、c)演算子のオペランドを識別し、d)オペランドに従って動作を実施する(たとえば実行する)、エンジンを含む。SQLクエリの例は、「SELECT last_name FROM current_customers」とすることができる。このSQLクエリは動作SELECTを含み、これはSELECT動作のオペランドに従ってデータを取り出すように関係データベースに命令する。SQLの構文において、オペランドは、関係データベースによって管理されるデータベーステーブルである「current_customers」と、データベーステーブルの列である「last_name」である。関係データベースがクエリを解釈し、クエリの動作を実行するとき、関係データベースはクエリに応答してlast_name列のデータ(last_name列に含まれるデータの各部分)を戻す。
データ処理システム100は、たとえデータベースクエリ140で識別されたデータソースが、データベースクエリ140の形のクエリを使用して動作するデータベースでない場合であっても、データベースクエリ140を実施することができる。たとえばHadoopクラスタ112は通常、SQLの形で指定された命令を受け入れない場合がある。データベースクエリ140がSQLクエリであり、Hadoopクラスタ112を参照する場合、グラフオペレーティングシステム130a〜dのインスタンスは、データベースクエリ140に取り込む仲介として共に動作することができ、各インスタンスはそれに応答してHadoopクラスタ112で行うべき動作を決定することができる。たとえばデータフローグラフのコンポーネントは、データベースクエリ140の命令の代用として使うことができる。この代用に従った技法は、「Managing Data Queries」という名称の米国公開第2012/0284255A1号により詳細に記載され、参照により本明細書に組み込まれる。いくつかの実装において、データフローグラフはデータベースクエリ140から作成可能である。
いくつかの実装において、グラフオペレーティングシステム130a〜dの各インスタンスはコンピュータプログラム134a〜dの対応する部分を実行する。たとえばコンピュータプログラムは、実行可能コンポーネントで構成することが可能であり、グラフオペレーティングシステム130a〜dの各インスタンスはコンピュータプログラムのコンポーネントのいくつかを実行することができる。グラフオペレーティングシステム130a〜dのインスタンスは、たとえば互いにデータを送受信することによって、コンピュータプログラムのそれぞれの部分を実行し、それによって共にコンピュータプログラムを実行するように、互いに調整可能である。いくつかの例では、グラフオペレーティングシステム130a〜dの複数のインスタンスが、コンピュータプログラムの同じコンポーネントのインスタンスを実行する。たとえばHadoopクラスタ112のノード114a〜d上で実行するコンピュータプログラム134a〜dのインスタンスは、その各々が異なるデータ(たとえばそれぞれのノード114a〜dによって記憶されたデータ116a〜d)上で動作する、同じデータ処理コンポーネントのインスタンスを各々実行することが可能である。いくつかの例では、コンピュータプログラムの一部が共にデータフローグラフを構成し得、コンピュータプログラムの一部はデータフローグラフのサブグラフ(たとえば1つまたは複数のリンクされたコンポーネント)とすることができる。いくつかの実装において、グラフオペレーティングシステム130a〜dのインスタンスは、コンピュータプログラム134a〜dを生成することができる。
このように、Hadoopクラスタは、動作を実施するために、関係データベースの機能、たとえば関係データベースのクエリ解釈機能に依拠しない技法を使用して、データベースクエリ140の動作を実施することができる(データベースクエリ140を実行するとも呼ばれる)。その代わりにクエリは、コンピュータプログラム134a〜dのインスタンスを実行することによって実施可能である。コンピュータプログラム134a〜dが生成されると、Hadoopクラスタのノード114a〜d上でデータベースクエリ140の動作を実施するために、関係データベースのクエリ解釈機能は使用されない。
いくつかの実装において、コンピュータプログラム(たとえばデータフローグラフ、または任意の他の種類のプログラム)をパラメータで構成することができる。たとえばパラメータは、プログラムの挙動を変更するために変更可能な値とすることができる。特定の例として、パラメータは「filename」であってよく、パラメータの値はファイルシステム内のファイルの位置とすることができる。異なるファイルにアクセスするようにプログラムを構成するために、パラメータの値を異なるファイルの位置に変更することができる。同じプログラムの2つのインスタンスを異なるパラメータ値で構成することが可能であり、これによって同じプログラムの2つのインスタンスの挙動が変更される。
図1のシステムは、1つまたは複数のネットワークを使用して互いに通信することができる。たとえばHadoopクラスタ112のノード114a〜dは、ローカルエリアネットワーク(LAN)などのネットワークを使用して互いに通信可能であるが、ワイドエリアネットワーク(WAN)、インターネット、または別の種類のネットワークを使用して互いに通信してもよい。さらにHadoopクラスタ112のノード114a〜dは、LAN、WAN、インターネット、または、コンピュータシステム間での通信をサポートする任意の他の種類の通信ネットワークを使用して、関係データベース122および処理システム100と通信することができる。
さらに、図1には単一のHadoopクラスタ112が示されているが、図に示されるシステムでは複数のHadoopクラスタが使用できる。たとえば1つのHadoopクラスタは関係データベース122から何らかのデータを受信し、別のHadoopクラスタは関係データベース122から他のデータを受信することができる。複数のHadoopクラスタを含む他の構成が可能である。
図2は、データフローグラフ200の例を示す。いくつかの例では、データフローグラフ200は、データフローグラフを閲覧、構成、および/または実行することができるユーザインターフェース内に表示可能である。このデータフローグラフ200は、図1に示されたHadoopクラスタ112およびデータ処理システム100によって行うことができるデータ処理動作を表す。この例では、データフローグラフは「結合」と呼ばれる動作を表すコンポーネント202を含み、結合コンポーネント202と呼ぶこともある。「結合」動作は2つのタイプのデータを組み合わせるものであり、たとえば1つのタイプのデータは1つのデータソースに格納され、別のタイプのデータは別のデータソースに格納されている。データフローグラフ200の他のコンポーネントは、Hadoopクラスタである1つのデータソースを含む、複数タイプのデータソースを使用して、データフローグラフ200が結合動作を実施できるようにする。さらにほとんどの処理は、Hadoopクラスタのノード上で実行される。
いくつかの例では、データフローグラフ200は、たとえば図1に示されたデータベースクエリ140などのデータベースクエリから作成され得る。たとえばデータフローグラフ200は、データベースクエリを入力として受け取り、データフローグラフを出力として作成するエンジン(たとえば図1に示されるグラフオペレーティングシステム130a〜dのインスタンス)を使用して生成可能である。このように、図2に示されるデータフローグラフ200などのデータフローグラフは、実行されたとき、対応するデータベースクエリ140(図1)の実行と同じ出力を作成することができる。このように、データベースクエリ140はSQLなどのデータベースクエリ言語を使用して作成可能である。しかしながら、対応するデータ処理動作を実施するシステム、たとえばHadoopクラスタ112は、データベースクエリ140を解析できる必要はない。たとえば、カスタム設計のデータベースクエリ解析機能をHadoopクラスタ112に提供する必要はない。代わりに、Hadoopノード114a〜d上で実行するグラフオペレーティングシステム130a〜dのインスタンス(図1)は、組み合わせて、データベースクエリ140の動作と等価である(たとえば、従来の関係データベースシステムにおいてデータベースクエリ140を実行することと同じ結果を達成する)動作を行うために、データフローグラフ200を実行することができる。たとえば、データフローグラフ200がグラフオペレーティングシステム130a〜dのインスタンスによって実行されるとき、データフローグラフ200の出力は、データベースクエリ140を実行するがデータフローグラフ200は実行しないシステム(Hadoopクラスタ112以外)の出力と等価である。このように、データフローグラフ200は、データベースクエリ140に対応するコンピュータプログラムの例である。
データフローグラフ200のコンポーネントは、データフローグラフ200が、Hadoopクラスタを表すデータソースを含む、複数タイプのデータソースからのデータを処理することができるように、配置構成される。1つのコンポーネント204はHadoopクラスタ112によって記憶されるデータを表し、別のコンポーネント206は関係データベース122によって記憶されるデータを表し、どちらも図1に示されている。Hadoopクラスタコンポーネント204は結合コンポーネント202にリンクされ、これはデータがHadoopクラスタコンポーネント204から結合コンポーネント202へと流れるため、Hadoopクラスタコンポーネント204の出力が入力として結合コンポーネント202に提供されることを意味する。さらに、Hadoopクラスタコンポーネント204は、Hadoopクラスタのノードによって並列に実施可能な動作を表す。たとえばデータがHadoopクラスタコンポーネント204から流れるとき、データの複数部分、たとえばノードによって処理されたデータが、Hadoopクラスタノードから同時に流れることができる。同様に、Hadoopクラスタコンポーネント204によって行われる動作は、各々がHadoopクラスタノード上で行われる複数の同時動作の形で行われることができる。この技法は、並列処理と呼ばれることがある。図に示されている番号「4」は、下にあるHadoopクラスタ内のノードの数、したがって、並列処理のために動作を分割できる数を示す。
データは、関係データベースコンポーネント206から、データがHadoopクラスタの個々のノードに直接提供できるように流れる。データは、関係データベースコンポーネント206からブロードキャストコンポーネント210へと流れる。次いでデータは、結合コンポーネント202へと流れる。この例では、結合コンポーネント202の動作は、Hadoopクラスタの並列処理機能を利用するために、Hadoopクラスタコンポーネント204によって表されるHadoopクラスタのノードによって記憶されたデータに対して実施される。
ブロードキャストコンポーネント210は、関係データベースによって記憶されたデータをHadoopクラスタコンポーネント204によって表された各々のノードに伝送できるようにする、動作を表す。この例は関係データベースを使用しているが、図2に示される他のコンポーネントと同様に、ブロードキャストコンポーネント210は他の種類のデータソースと共に使用することができる。いくつかの実装において、ブロードキャストコンポーネント210は、結合動作をHadoopクラスタの各ノード内でローカルに行えるようにするために、クラスタにわたるデータの各部分の狭められたハッシュテーブルをコピーする。このように、データが関係データベースコンポーネント204から結合コンポーネント202へと流れるとき、図1に示された関係データベース122に記憶された下にあるデータ124a〜cの一部を、Hadoopクラスタ112の特定のノード114a〜dに向けて送ることができる。このプロセスはファンアウト(fan-out)インジケータ212によって表され、これはデータが並列処理のために分割される(または「広がる」)ことを示す。いくつかの例では、それぞれのデータソース(たとえば関係データベース122およびHadoopクラスタ112)に記憶されたデータを分析して、データフローグラフ200内で処理されるときなどにデータを分割する最適な様式を決定することができる。いくつかの例では、Hadoopクラスタのノード114a〜d上で実行するグラフオペレーティングシステム130a〜dのインスタンスは、データフローグラフ200内で処理されるときなどにデータを分割する最適な様式を決定し、関係データベース122にデータの一部を要求することができる。一般にデータは、Hadoopノードが各々、それぞれのHadoopノードのアクティブメモリに記憶できる量のデータ(たとえば関係データベースのいくつかの行および/または列のみ)を受信するように分割される。
この例では、データは結合コンポーネント202からロールアップコンポーネント214へと流れる。ロールアップコンポーネントは、複数のソースからのデータを集約する。結合コンポーネント202はHadoopクラスタの複数のノードによって実施される動作を表すため、ロールアップコンポーネント214は複数のノードからの出力を集約する。ファンインインジケータ216は、データフローグラフ200内のこの時点で、複数の並列フローの形でグラフを通って流れるデータが単一のフローに統合されることを示す。ファンインインジケータ216の後に現れるコンポーネント218は、Hadoopクラスタのノード以外のエンティティ(たとえば、図5に示されるデータ処理サブシステム101)によって実施され得る動作を表す。
データフローグラフの各コンポーネントは、レイアウトインジケータでマーク付けされている。レイアウトは、コンポーネントによって表される動作を実施する特定のシステムを指す。図に示されるように、いくつかのコンポーネントはレイアウト1とマーク付けされ、いくつかのコンポーネントはレイアウト2とマーク付けされ、いくつかのコンポーネントはレイアウト3とマーク付けされている。ここで、レイアウト1、レイアウト2、およびレイアウト3とマーク付けされたコンポーネントは、Hadoopクラスタ112に関連付けられたグラフオペレーティングシステム130a〜dのインスタンスによって実施される動作を表す。いくつかの例では、レイアウト2とマーク付けされたコンポーネントは、関係データベース122または関係データベース122に関連付けられたグラフオペレーティングシステムによって実施される動作を表す。いくつかの例では、レイアウト3とマーク付けされたコンポーネントは、Hadoopクラスタ112または関係データベース122以外のシステム、たとえば図5に示されるデータ処理サブシステム101などのシステムによって実施される動作を表す。
したがって、データフローグラフ200が実行されるとき、データフローグラフ200の動作は、データ処理の多くがHadoopノードで生じるように、Hadoopクラスタに関連付けられたコンピュータシステムによって実施可能である。このように、Hadoopクラスタの並列処理機能が使用される。さらに、個々のHadoopノードにコピーされたデータ量はアクティブメモリ内に保持できるため、データをディスクにコピーする必要はなく、ディスクの読み/書きによって生じる性能の減速は緩和される。
図3は、データ処理システム100のシステムによって共に実施可能な別の一連の動作を表す、データフローグラフ300を示す。このデータフローグラフ300は、「付加」動作を実施するコンポーネント302を含む。「付加」動作は、1つのデータ量を別のデータ量に付加し、統合されたデータ量を形成する。このデータフローグラフ300は、ほとんどのデータ処理がHadoopノード上で生じる一連の処理動作の別の例を表す。
データフローグラフ300のコンポーネントは、Hadoopクラスタを表すデータソースを含む複数タイプのデータソースからのデータを、データフローグラフ300が処理できるように配置構成される。1つのコンポーネント304はHadoopクラスタ112によって記憶されるデータを表し、別のコンポーネント306は関係データベース122によって記憶されるデータを表し、どちらも図1に示されている。
Hadoopクラスタコンポーネント304はフィルタコンポーネント308にリンクされ、フィルタコンポーネント308は付加コンポーネント302にリンクされる。したがって、データはHadoopクラスタコンポーネント304から流れ、付加コンポーネント302によって処理される前にフィルタコンポーネント308によってフィルタリングされる。入力データは、入力データの特徴ならびに各Hadoopノード上に記憶されたデータの特徴に基づいてフィルタリング可能である。たとえば、動作が商取引を表すデータに対して行われるものであり、特定のHadoopノードが合計で10ドルを超える取引に関するデータのみを記憶する場合、フィルタコンポーネント308は、(たとえば、コンポーネントの動作を制御するようにパラメータを修正することによって)合計で10ドルを超える購買に関連する入力データを渡すように構成することができる。別の例として、動作が商取引を表すデータに対して行われるものであり、動作自体が合計で10ドルを超える購買にのみ関連している場合、フィルタコンポーネント308は、(たとえば、コンポーネントの動作を制御するようにパラメータを修正することによって)合計で10ドルを超える取引に関連する入力データを渡すように構成することができる。
このデータフローグラフ300において、関係データベースコンポーネント306から流れるデータは、Hadoopクラスタのノードでの処理のために分割される。関係データベースコンポーネント306は区分コンポーネント310にリンクされ、区分コンポーネントは関係データベースコンポーネント306から流れるデータを区分(たとえば分割)する。たとえば、区分コンポーネント310はラウンドロビンと呼ばれる技法を使用し、この技法では、区分コンポーネント310によって区分されたデータの各新規部分が、固定シーケンスでHadoopクラスタのノードに提供される。言い換えれば、ラウンドロビン技法では、データの一部がノードに順番に分配される。このように、Hadoopクラスタの各ノードは、ノードのアクティブメモリ内に保存可能であり、ディスクに書き込む必要のないデータの一部を受信する。
したがって付加コンポーネント302は、各ノードが関係データベースコンポーネント306から受信したデータを、Hadoopクラスタの個々のノードに記憶されたデータに付加するように、Hadoopクラスタのノードによって実施される動作を表す。これらのすべての付加動作の結果はロールアップコンポーネント312に並列に提供され、ロールアップコンポーネント312はこの結果をさらに処理するために集約する。たとえば集約された出力は、その先のコンポーネント314によって処理することができる。ここでも、Hadoopクラスタのノード上での動作がディスクを大量に使用する必要のないように、ほとんどのデータ処理動作はHadoopクラスタ上で生じる。
図4は、データを処理するための手順400を表すフローチャートを示す。手順400は、たとえば図1に示されたデータ処理システム100のコンポーネントによって実施可能である。
手順400は、HadoopクラスタのHadoopノードで、データ処理エンジンのインスタンスを実行する402。Hadoopノードはデータの第1の部分をHDFSデータストレージに記憶する。データ処理エンジンは、Hadoopクラスタ外部のデータソースからデータを受信することができる。たとえばノードは、図1に示されるHadoopクラスタ112のノード114a〜dのうちの1つとすることができる。たとえばデータ処理エンジンは、図1に示されたグラフオペレーティングシステム130a〜fとすることができる。
データ処理エンジンの他のインスタンスは、Hadoopクラスタの他のノード上で実行可能であり、その各々が手順400の動作のそれら自身のインスタンス(たとえば動作402〜412)を行う。いくつかの実装において、データ処理エンジンはMapReduceプログラミングモデルを実装しない。
手順400はプログラムを受信する404。ブログラムは、データ処理エンジンによって受信され得る。たとえばプログラムは、Hadoopクラスタを表す少なくとも1つのコンポーネント、受信したデータのソースを表す少なくとも1つのコンポーネント、および、少なくとも1つのデータソース(たとえばHadoopクラスタまたは別のデータソース)から受信したデータに対して行われるべき動作に関連付けられた少なくとも1つのデータフローを表す少なくとも1つのリンクを含む、データフローグラフとすることができる。グラフは、Hadoopクラスタからのデータフローを表すリンクに接続され、手順400で受信したデータのソースからのデータフローを表すリンクに接続された、少なくとも1つのコンポーネントを含むことができる。
いくつかの実装において、コンピュータプログラムは、データベースクエリ、たとえばSQLクエリに対応する動作を表すコンポーネントを含む。データベースクエリを表すコンピュータプログラムは、データベースクエリ(たとえばHadoopクラスタを参照するデータベースクエリ)内で参照されるデータのソースを表す少なくとも1つのコンポーネント、および、データに対して行われるべき動作に関連付けられた少なくとも1つのデータフローを表す少なくとも1つのリンクを含む。たとえば動作は、手順400内で行われるデータ処理動作とすることができる。
手順400は、コンピュータプログラムの少なくとも一部を実行する406。たとえばコンピュータプログラムの一部は、Hadoopクラスタ内のHadoopノード上で実行するデータ処理エンジンによって実行可能である。いくつかの例では、実行されるコンピュータプログラムの一部は、Hadoopクラスタを表す少なくとも1つのコンポーネント、およびデータ処理動作を表す少なくとも1つのコンポーネントを含む。たとえば実行される406コンピュータプログラムのコンポーネントは、コンピュータプログラムのレイアウトに含めることができる。いくつかの例では、ここで実行される406コンピュータプログラムの同じコンポーネントのインスタンスは、Hadoopクラスタの他のノード内で同時に実行される。いくつかの実装において、コンピュータプログラムは実行される前に構成される。たとえばコンピュータプログラムのコンポーネントは、変更可能な値を有するパラメータで構成可能である。いくつかの例では、コンピュータプログラムは別のプログラムにリンクされる。たとえば、コンピュータプログラムがグラフである場合、グラフを別のグラフ(たとえば、グラフオペレーティングシステム上で実行するかまたは使用可能なグラフ)にリンクすることができる。
手順400は、外部のデータソースからデータの第2の部分を受信する408。たとえば外部データソースは、Hadoopクラスタのノード以外のソース、たとえば図1に示されたデータソース120(たとえば、関係データベース122)とすることができる。受信されたデータは、Hadoopクラスタの他のノードで受信されたデータの他の部分(たとえば、データの他のソースから受信されたデータの他の部分)とは別個である。いくつかの例では、データの第2の部分は関係データベースの行のサブセットを含み、データの第2の部分は関係データベースの列のサブセットを含む。いくつかの例では、データの第2の部分は、外部データソースからHadoopクラスタの第2のノードで受信したデータの第3の部分とは別個である。言い換えればデータの第2の部分は、データの第3の部分とは異なるデータ、たとえば異なる行および/または列を含む。
手順400は、データの第2の部分をHDFSストレージ以外に記憶する410ため、これはデータの第2の部分がHDFSストレージ(たとえば、データの第1の部分を含むHDFSストレージ)に記憶されないことを意味する。たとえばデータの第2の部分は、Hadoopノードの揮発性メモリに記憶することができる。揮発性メモリは、ランダムアクセスメモリと呼ばれることがある。これに対して不揮発性メモリは、たとえばディスクドライブである。手順400によって受信される408データは、Hadoopクラスタのノードの揮発性メモリに収まるサイズを有し得る。
手順400は、少なくともデータの第1の部分およびデータの第2の部分を使用して、プログラムによって識別されたデータ処理動作を行う412。データ処理動作は、少なくとも部分的に、データ処理エンジンの他のインスタンスと協働するデータ処理エンジンのインスタンスによって実施可能である。データ処理エンジンのインスタンスは共に並列でデータ処理動作を行うため、これはデータの異なる部分に対して同じデータ処理動作を行うために、データ処理エンジンのインスタンスが同時に実行することを意味する。「同時に実行すること」は、データ処理エンジンの1インスタンスが(たとえば、コンピュータプログラムの一部において)動作の集合の実施を開始する時点が、データ処理エンジンの別のインスタンスが同じ動作の集合の実施を開始する時点に依存せず、データ処理エンジンの両方のインスタンスで、同じ動作の少なくともいくつかは同時に、または互いに数ミリ秒以内に実施され得ることを意味する。いくつかの例では、インスタンスは、Hadoopクラスタのノードによって記憶されたデータの本体およびデータの別の本体に対してデータ処理動作を共に行うことができる。いくつかの例では、データの他の本体は関係データベースシステムに固有の形式(たとえば、行および列を含むテーブルの形、または関係データベースシステムのデフォルト形式である別の形)で記憶することができる。
いくつかの例では、手順400は、Hadoopクラスタ外部のデータ処理エンジンの第2のインスタンスによって、プログラムの少なくとも一部を実行する。たとえばデータ処理エンジンは、図1に示された他方のデータソース120(たとえば、関係データベース122)上で実行するグラフオペレーティングシステム130fとすることができる。図には、Hadoopノード上で実行するグラフ処理エンジンのインスタンスと、Hadoopクラスタ外部で実行するデータ処理エンジンのインスタンスとの間の通信を表すものとして、両矢印が示されている。いくつかの実装において、Hadoopクラスタのノード、たとえば手順の動作402〜412を実施するノードは、Hadoopクラスタ外部のデータ処理エンジンの第2のインスタンス(たとえば、他方のデータソース120上で実行するデータ処理エンジンのインスタンス)によって実行されるプログラムの少なくとも一部と通信する。たとえば、プログラムの少なくとも一部(たとえば、プログラムの1つまたは複数のコンポーネント)は、Hadoopクラスタのノードとの間でデータを送受信することができる。
Hadoopクラスタのノードによって受信されるデータの一部は、ノード上に記憶されたデータの一部の特徴に基づいて選択することができる。たとえば、ノードによって受信されるデータの一部は、他のノードとは反対に、その特定のノード上でデータ処理動作を実施するために必要となるデータに基づいて選択することができる。ノードによって受信されるデータの一部が関係データベースからのものである場合、データの一部は、関係データベースからのいくつかの列のみおよび/またはいくつかの行のみを含む場合がある。いくつかの例では、関係データベースは、特定のノード上に記憶されたデータの部分を識別する情報に基づいて、特定ノードを宛先とする出力データをフィルタリングするフィルタリング動作を行うことができる。
図5は、1つまたは複数のデータソース110、120から発信されるデータ102、103が、データ処理サブシステム101によって処理される、データ処理システム100aの別のバージョンを示す。データ処理サブシステム101はデータに対して動作131を行い、処理されたデータ132を1つまたは複数の出力150に提供する。このデータ処理システム101は、複数タイプのデータソース110、120からのデータ102、103を処理し、データに対して行われる動作が、いずれのデータ102、103がいずれのタイプのデータソース110、120から着信したかによって制限されないように、データを処理することができる。これを遂行する様式の1つによって、データソース110のうちの1つ(たとえば、Hadoopクラスタ112)が他のデータソース120(たとえば、関係データベース122)からデータ104を受信し、受信したデータ104をデータソース110に固有の技法を使用して処理することが可能となる。このように、普通であればデータ処理システム101によって行われることになるデータ処理の多くは、代わりにデータソース110によって行われる。
Hadoopクラスタ112は、他のタイプのデータソースと共に、データ処理システム101への入力データソース110として指定され得る。他方のデータソース120は、関係データベース、フラットファイル、ネットワークリソースからのデータのフィード、または、データ処理システムからの要求に応答してデータを提供できる任意の他のリソースなどの、データソースとすることができる。次いでデータ処理サブシステム101は、Hadoopクラスタ112からのデータ102と別のデータソース120からのデータ103との組み合わせに対して動作を行うことができる。Hadoopクラスタ112または他のデータソース120からデータを抽出するのではなく、データ処理サブシステム101は、Hadoopクラスタ112のデータ処理機能に依拠することができる。これは、Hadoopクラスタ112のデータ処理機能を利用して行うことができる。このように、データ処理サブシステム101は、Hadoopクラスタ112に比べて少ない動作を、かなり少量のデータに対して実施することができる。たとえば図5に示されるように、他方のデータソース120から受信するデータ104のほとんどは、Hadoopクラスタ112に(たとえば図1に関して上記で説明した技法を使用して)直接伝送され、少量のデータ103のみ(場合によっては全くなし)がデータ処理サブシステム101に伝送される。
実際の例として、データ処理サブシステム101は、Hadoopクラスタ112のノード114a〜dに、タスクを完了するために必要な何らかの動作(たとえば、データの一部に対して変換を行う動作)を行うように命令すること、および、関係データベース122に、同じくタスクを完了するために必要な何らかの他の動作(たとえば、データの別の部分に対して変換を行う動作)を実施するように命令することができる。
これらの技法の例として、データ処理サブシステム101がデータ処理動作を行うとき、データ処理サブシステム101は動作を実施することが必要なデータのみ、たとえばそれに対して動作が行われるデータのみにアクセスする。他のデータ処理動作は、たとえばHadoopクラスタ112で実施することができる。
いくつかの実装において、データ処理サブシステム101は、データを処理するためにグラフを実行する、グラフベースのデータ処理システムである。たとえばデータ処理サブシステム101は、データ処理動作を含む1つまたは複数のコンピュータプログラム134eを実行する、グラフオペレーティングシステム130eのインスタンスを含むことができる。
いくつかの実装において、グラフオペレーティングシステム130fのさらなるインスタンスは、関係データベース122に関連して実行可能である。たとえばグラフオペレーティングシステム130fのさらなるインスタンスは、関係データベース122を実行している同じコンピュータシステム(またはシステムの組み合わせ)上で実行可能であるか、またはグラフオペレーティングシステム130fのさらなるインスタンスは、関係データベース122を実行しているコンピュータシステム(またはシステムの組み合わせ)と通信している別のコンピュータシステム123上で実行可能である。いくつかの実装において、グラフオペレーティングシステム130fのさらなるインスタンスは使用されない。グラフオペレーティングシステム130fのこのインスタンスは任意選択であるため、図1では破線で表されている。いくつかの実装において、Hadoopクラスタ112のノード114a〜d上で実行するグラフオペレーティングシステム130a〜dのインスタンスは、関係データベース122に関連して実行しているグラフオペレーティングシステム130fのさらなるインスタンスと通信する。
いくつかの実装において、グラフオペレーティングシステム130a〜fの各インスタンスは、コンピュータプログラム134a〜fの対応する部分を実行する。たとえばコンピュータプログラムは実行可能コンポーネントで構成され得、グラフオペレーティングシステム130a〜fの各インスタンスは、コンピュータプログラムのコンポーネントのいくつかを実行することができる。グラフオペレーティングシステム130a〜fのインスタンスは、たとえば、コンピュータプログラムのそれらそれぞれの部分を実行し、したがってコンピュータプログラムをまとめて実行するために、互いにデータを送受信することによって互いに調整することができる。いくつかの例では、グラフオペレーティングシステム130a〜fの複数のインスタンスは、コンピュータプログラムの同じコンポーネントのインスタンスを実行する。たとえば、Hadoopクラスタ112のノード114a〜d上で実行しているコンピュータプログラム130a〜dのインスタンスは、各々、それぞれが異なるデータ(たとえば、それぞれのノード114a〜dによって記憶されたデータ116a〜d)に対して動作する、同じデータ処理コンポーネントのインスタンスを実行することができる。いくつかの例では、コンピュータプログラムの一部が共にデータフローグラフを構成することができ、コンピュータプログラムの一部はデータフローグラフのサブグラフ(たとえば、1つまたは複数のリンクされたコンポーネント)とすることができる。いくつかの例では、グラフオペレーティングシステム130a〜fのインスタンスによって実行されるコンピュータプログラムまたはコンピュータプログラムの一部は、データ処理サブシステム101によって受信されるか、データ処理システム100aの別のコンポーネントによって受信される、データベースクエリ140から生成される。前述の手法は、好適なソフトウェアを実行しているコンピューティングシステムを使用して実装可能である。たとえばソフトウェアは、各々が、少なくとも1つのプロセッサ、少なくとも1つのデータストレージシステム(揮発性および/または不揮発性のメモリ、ならびに/あるいはストレージ要素を含む)、少なくとも1つのユーザインターフェース(少なくとも1つの入力デバイスまたはポートを使用して入力を受信するため、および、少なくとも1つの出力デバイスまたはポートを使用して出力を提供するため)を含む、1つまたは複数のプログラミングされたまたはプログラミング可能なコンピューティングシステム(分散型、クライアント/サーバ、またはグリッドなどの、様々なアーキテクチャであり得る)上で実行する、1つまたは複数のコンピュータプログラムに手順を含めることができる。ソフトウェアは、たとえばデータフローグラフの設計、構成、および実行に関するサービスを提供する、より大きなプログラムの1つまたは複数のモジュールを含むことができる。プログラムのモジュール(たとえば、データフローグラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造または他の組織的データとして実装可能である。
ソフトウェアは、CD−ROMまたは他のコンピュータ読み取り可能媒体(たとえば汎用または特定用途向けのコンピューティングシステムまたはデバイスによって読み取り可能)などの、有形の持続性媒体上に提供すること、または、それが実行されるコンピューティングシステムの有形の持続性媒体へネットワークの通信媒体を介して送達する(たとえば伝搬信号内に符号化する)ことができる。処理の一部またはすべては、特定用途向けコンピュータ上で、あるいは、コプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、または専用の特定用途向け集積回路(ASIC)などの、特定用途向けハードウェアを使用して、行うことができる。処理は、ソフトウェアによって指定された計算の異なる部分が異なるコンピューティング要素によって行われる分散様式で実装することができる。こうした各コンピュータプログラムは、好ましくは、本明細書で説明する手順を行うために、ストレージデバイスがコンピュータシステムによって読み取られたときに、コンピュータを構成および動作するために、汎用または特定用途向けプログラマブルコンピュータによって読み取り可能なストレージデバイス(たとえば、ソリッドステートメモリまたは媒体、あるいは磁気または光媒体などの、持続性ストレージデバイス)上に記憶されるか、またはダウンロードされる。本発明のシステムは、コンピュータプログラムで構成される有形の持続性媒体として実装されるものとみなすことも可能であり、媒体がそのように構成されることで、本明細書で説明する処理ステップのうちの1つまたは複数を行うための特有な事前に定義された様式でコンピュータを動作させる。
以上、本発明のいくつかの実施形態について説明してきた。ただし、前述の説明は例示的であり、以下の特許請求の範囲によって定義される本発明の範囲に限定されないことを理解されよう。したがって、他の実施形態も以下の特許請求の範囲内にある。たとえば、本発明の範囲を逸脱することなく、様々な修正が実行可能である。加えて、前述のステップのうちのいくつかは順序に依存しないものであり得るため、説明した順序とは異なる順序で行うことができる。
たとえば、上記の例は、Hadoopクラスタ112または関係データベース122とは別個のデータ処理システム100を示しているが、いくつかの実装において、データ処理システム100は実際には、たとえば、グラフオペレーティングシステム130a〜eのインスタンスとして、Hadoopクラスタ112および/または関係データベース122にわたって機能的に分散されることが可能である。
別の例として、図1〜4に示された例は、単一のHadoopクラスタおよび単一の関係データベースの例を使用しているが、本明細書で説明する技法は、1つのHadoopクラスタから受信したデータ、および別の離れたHadoopクラスタから受信したデータに対して動作させるために使用することもできる。