(57)【要約】【課題】複数ソースからのデータを処理するための方法及び装置が開示されている。【解決手段】第１の態様において、方法は、データの第１の部分をＨＤＦＳデータストレージに記憶する、Ｈａｄｏｏｐクラスタのノードで、Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、データ処理エンジンの第１のインスタンスによってプログラムの少なくとも一部を実行すること、データ処理エンジンによって外部データソースからデータの第２の部分を受信すること、データの第２の部分をＨＤＦＳストレージ以外に記憶すること、ならびに、データ処理エンジンによって、少なくともデータの第１の部分およびデータの第２の部分を使用するプログラムによって識別されたデータ処理動作を行うことを含む。【選択図】図１
2019200819.tif 000002
【特許請求の範囲】
【請求項１】
Ｈａｄｏｏｐクラスタのノードであって、データの第１の部分をＨＤＦＳデータストレージに記憶するノードで、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記プログラムの少なくとも一部を実行すること、
前記データ処理エンジンによって前記外部データソースからデータの第２の部分を受信すること、
前記データの第２の部分をＨＤＦＳストレージ以外に記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記データの第２の部分を使用する前記プログラムによって識別されたデータ処理動作を行うこと、を含む方法。
【請求項２】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの前記他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１に記載の方法。
【請求項３】
前記コンピュータプログラムは前記データ処理エンジンのグラフ実行エンジンによって実行されるデータフローグラフを含み、前記データフローグラフは、ａ）前記Ｈａｄｏｏｐクラスタを表す少なくとも１つのコンポーネントと、ｂ）前記データの第２の部分の前記ソースを表す少なくとも１つのコンポーネントと、ｃ）少なくとも１つのデータソースから受信された前記データに対して行われるべき前記動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む、請求項１に記載の方法。
【請求項４】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記ソースからのデータフローを表すリンクに接続される、請求項３に記載の方法。
【請求項５】
前記データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装していない、請求項１に記載の方法。
【請求項６】
前記データの第２の部分は揮発性メモリに記憶される、請求項１に記載の方法。
【請求項７】
データベースクエリを受信することを含み、前記データベースクエリは前記Ｈａｄｏｏｐクラスタを含む少なくとも１つのデータソースから受信されたデータに対して行われるべき少なくとも１つの動作を含み、
前記コンピュータプログラムは前記データベースクエリに対応する動作を表すコンポーネントを含み、前記コンピュータプログラムは、前記少なくとも１つのデータソースを表す少なくとも１つのコンポーネントと、少なくとも１つのデータソースから受信されたデータに対して行われるべき前記動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む、
請求項１に記載の方法。
【請求項８】
前記データの第２の部分は前記データの第１の部分の特徴に基づいて選択された、請求項１に記載の方法。
【請求項９】
前記データの第２の部分は関係データベースの行のサブセットを含み、前記データの第２の部分は前記関係データベースの列のサブセットを含む、請求項１に記載の方法。
【請求項１０】
前記データの第２の部分は、前記外部データソースから前記Ｈａｄｏｏｐクラスタの第２のノードで受信されたデータの第３の部分とは別個である、請求項１に記載の方法。
【請求項１１】
前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって実行される前記プログラムの少なくとも一部のインスタンスと通信することを含む、請求項１に記載の方法。
【請求項１２】
前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって前記プログラムの少なくとも一部を実行することを含む、請求項１に記載の方法。
【請求項１３】
データの第１の部分をＨＤＦＳデータストレージに記憶するＨａｄｏｏｐクラスタのノードに、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによってプログラムを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記プログラムの少なくとも一部を実行すること、
前記データ処理エンジンによって前記外部データソースからデータの第２の部分を受信すること、
前記データの第２の部分をＨＤＦＳストレージ以外に記憶すること、および、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記データの第２の部分を使用する前記プログラムによって識別されたデータ処理動作を行うこと、を含む動作を実施させるための命令を含む、コンピュータ可読ストレージデバイス。
【請求項１４】
データの第１の部分をＨＤＦＳストレージに記憶する、Ｈａｄｏｏｐクラスタのノードであって、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによってプログラムを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記プログラムの少なくとも一部を実行すること、
前記データ処理エンジンによって前記外部データソースからデータの第２の部分を受信すること、
前記データの第２の部分をＨＤＦＳストレージ以外に記憶すること、および、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記データの第２の部分を使用する前記プログラムによって識別されたデータ処理動作を行うこと、
を含む動作を実施するように構成されたコンピュータ処理デバイスを含む、
Ｈａｄｏｏｐクラスタのノード。
【請求項１５】
データの第１の部分をＨＤＦＳストレージに記憶する、Ｈａｄｏｏｐクラスタのノードであって、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行するための手段と、
前記データ処理エンジンによってプログラムを受信するための手段と、
前記データ処理エンジンの前記第１のインスタンスによって前記プログラムの少なくとも一部を実行するための手段と、
前記データ処理エンジンによって前記外部データソースからデータの第２の部分を受信するための手段と、
前記データの第２の部分をＨＤＦＳストレージ以外に記憶するための手段と、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記データの第２の部分を使用する前記プログラムによって識別されたデータ処理動作を行うための手段と、
を含む、Ｈａｄｏｏｐクラスタのノード。
【請求項１６】
データの第１の部分を記憶しノードのクラスタと共に動作するノードで、前記クラスタはデータの集約を記憶し、前記ノードは前記データの集約に対して並列に動作するように構成され、
前記クラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記プログラムの少なくとも一部を実行すること、
前記データ処理エンジンによって前記外部データソースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードの揮発性メモリに記憶すること、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記データの第２の部分を使用する前記プログラムによって識別されたデータ処理動作を行うこと、
を含む、方法。
【請求項１７】
Ｈａｄｏｏｐクラスタのノードのデータ処理エンジンで、前記データ処理エンジンによって実行されるコンピュータ実行可能プログラムによって識別されたデータ処理動作を行うことを含む方法であって、前記データ処理動作は、前記ノードのＨＤＦＳデータストレージに記憶されたデータの少なくとも第１の部分、および前記Ｈａｄｏｏｐクラスタ外部のデータソースから受信され、ＨＤＦＳストレージ以外に記憶されたデータの少なくとも第２の部分を使用して行われる、方法。
【請求項１８】
Ｈａｄｏｏｐクラスタおよび関係データベースを含むデータソースを指定するＳＱＬクエリを受信すること、
前記ＳＱＬクエリに対応するコンピュータ実行可能プログラムを生成すること、
前記Ｈａｄｏｏｐクラスタのノードのデータ処理エンジンで前記コンピュータ実行可能プログラムを実行すること、ならびに、
少なくとも前記Ｈａｄｏｏｐクラスタのデータおよび前記関係データベースのデータを使用する前記コンピュータ実行可能プログラムによって識別されたデータ処理動作を、前記データ処理エンジンによって行うこと、
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数ソースからのデータの処理に関する。
【背景技術】
【０００２】
データは、たとえばＨＤＦＳ（Ｈａｄｏｏｐ分散ファイルシステム）クラスタを含む、様々なソースに記憶することができる。データ処理システムは、ＨＤＦＳクラスタから受信したデータに対して、および他のタイプのソースから受信したデータに対しても動作を行うことができる。
【発明の概要】
【０００３】
第１の態様において、方法は、データの第１の部分をＨＤＦＳデータストレージに記憶する、Ｈａｄｏｏｐクラスタのノードで、Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、データ処理エンジンの第１のインスタンスによってプログラムの少なくとも一部を実行すること、データ処理エンジンによって外部データソースからデータの第２の部分を受信すること、データの第２の部分をＨＤＦＳストレージ以外に記憶すること、ならびに、データ処理エンジンによって、少なくともデータの第１の部分およびデータの第２の部分を使用するプログラムによって識別されたデータ処理動作を行うことを含む。
【０００４】
第２の態様において、方法は、データの第１の部分を記憶し、並列で動作可能なデータの集約を記憶する、ノードのクラスタと共に動作するノードで、クラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、データ処理エンジンによってコンピュータ実行可能プログラムを受信すること、データ処理エンジンの第１のインスタンスによってプログラムの少なくとも一部を実行すること、データ処理エンジンによって外部データソースからデータの第２の部分を受信すること、データの第２の部分をノードの揮発性メモリに記憶すること、ならびに、データ処理エンジンによって、少なくともデータの第１の部分およびデータの第２の部分を使用するプログラムによって識別されたデータ処理動作を行うことを含む。
【０００５】
第１または第２の態様に従った第３の態様において、Ｈａｄｏｏｐクラスタはデータ処理エンジンのインスタンスを各々が実行するノードを含み、データ処理エンジンのインスタンスは、ａ）データの第１の部分を含むデータの第１の本体であり、Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）データの第２の部分を含むデータの第２の本体であり、関係データベースシステムに固有の形式で記憶され、データの第２の本体はＨａｄｏｏｐクラスタのノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に行う。
【０００６】
第１から第３までの態様のいずれかに従った第４の態様において、コンピュータプログラムはデータ処理エンジンのグラフ実行エンジンによって実行されるデータフローグラフであり、データフローグラフは、ａ）Ｈａｄｏｏｐクラスタを表す少なくとも１つのコンポーネント、ｂ）データの第２の部分のソースを表す少なくとも１つのコンポーネント、およびｃ）少なくとも１つのデータソースから受信されたデータに対して行われるべき動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む。
【０００７】
第４の態様に従った第５の態様において、データフローグラフの少なくとも１つのコンポーネントはＨａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、少なくとも１つのコンポーネントはデータの第２の部分のソースからのデータフローを表すリンクに接続される。
【０００８】
第１から第５までの態様のいずれかに従った第６の態様において、データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装していない。
【０００９】
第１から第６までの態様のいずれかに従った第７の態様において、データの第２の部分は揮発性メモリに記憶される。
【００１０】
第１から第７までの態様のいずれかに従った第８の態様において、方法は、データベースクエリを受信することを含み、データベースクエリはＨａｄｏｏｐクラスタを含む少なくとも１つのデータソースから受信されたデータに対して行われるべき少なくとも１つの動作を含み、コンピュータプログラムはデータベースクエリに対応する動作を表すコンポーネントを含み、コンピュータプログラムは、少なくとも１つのデータソースを表す少なくとも１つのコンポーネントと、少なくとも１つのデータソースから受信されたデータに対して行われるべき動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む。
【００１１】
第１から第８までの態様のいずれかに従った第９の態様において、データの第２の部分はデータの第１の部分の特徴に基づいて選択された。
【００１２】
第１から第９までの態様のいずれかに従った第１０の態様において、データの第２の部分は関係データベースの行のサブセットを含み、データの第２の部分は関係データベースの列のサブセットを含む。
【００１３】
第１から第１０までの態様のいずれかに従った第１１の態様において、データの第２の部分は、外部データソースからＨａｄｏｏｐクラスタの第２のノードで受信されたデータの第３の部分とは別個である。
【００１４】
第１から第１１までの態様のいずれかに従った第１２の態様において、方法は、Ｈａｄｏｏｐクラスタの外側のデータ処理エンジンの第２のインスタンスによってプログラムの少なくとも一部を実行することを含む。
【００１５】
第１から第１２までの態様のいずれかに従った第１３の態様において、方法は、Ｈａｄｏｏｐクラスタの外側のデータ処理エンジンの第２のインスタンスによって実行されるプログラムの少なくとも一部と通信することを含む。
【００１６】
第１４の態様において、方法は、Ｈａｄｏｏｐクラスタのノードのデータ処理エンジンで、データ処理エンジンによって実行されるコンピュータ実行可能プログラムによって識別されたデータ処理動作を行うことを含み、データ処理動作は、ノードのＨＤＦＳデータストレージに記憶されたデータの少なくとも第１の部分、およびＨａｄｏｏｐクラスタ外部のデータソースから受信され、ＨＤＦＳストレージ以外に記憶されたデータの少なくとも第２の部分を使用して行われる。
【００１７】
第１５の態様において、方法は、Ｈａｄｏｏｐクラスタおよび関係データベースを含むデータソースを指定するＳＱＬクエリを受信すること、ＳＱＬクエリに対応するコンピュータ実行可能プログラムを生成すること、Ｈａｄｏｏｐクラスタのノードのデータ処理エンジンでコンピュータ実行可能プログラムを実行すること、ならびに、少なくともＨａｄｏｏｐクラスタのデータおよび関係データベースのデータを使用するコンピュータ実行可能プログラムによって識別されたデータ処理動作を、データ処理エンジンによって行うことを含む。
【００１８】
１つまたは複数の態様は、単独または組み合わせて、コンピュータシステムによって実行されたとき、態様の動作を実施する機械可読命令を含むコンピュータプログラム製品を記憶する、システムまたは装置として、あるいはコンピュータ可読ストレージデバイスとして、表すことができる。一例として、コンピュータ可読ストレージデバイスは、コンピュータシステムによって実行されたとき、第１から第１５までの態様のいずれか１つに従って動作を実施する、機械可読命令を含む、コンピュータプログラム製品を記憶することができる。別の例として、１つまたは複数のプロセッサを含むコンピュータシステムは、１つまたは複数のプロセッサによって実行されたとき、第１から第１５までの態様のいずれか１つに従って動作を実施する機械可読命令を含むコンピュータプログラム製品を記憶するコンピュータ可読ストレージデバイスを含むことができる。
【００１９】
上記態様のうちの１つまたは複数は、以下の利点を提供することができる。第１に、Ｈａｄｏｏｐノードは揮発性メモリに記憶したデータに対して動作可能であり、データに対して動作を行う前にデータをディスクに書き込む必要はない。第２に、Ｈａｄｏｏｐノードは複数タイプのデータソースからデータを受信するように構成可能である。第３に、Ｈａｄｏｏｐノードは汎用データ処理オペレーティングシステム、たとえばＨａｄｏｏｐノードに特有でないデータ処理オペレーティングシステムに関連して動作するように構成可能である。第４に、Ｈａｄｏｏｐノードはデータ処理動作を実施するデータフローグラフで動作するように構成可能である。
【００２０】
本発明の他の特徴および利点は、以下の説明から、および特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【００２１】
【図１】データ処理システムを示す図である。
【図２】データフローグラフを示す図である。
【図３】データフローグラフを示す図である。
【図４】データ処理手順を示すフローチャートである。
【図５】データ処理システムを示す図である。
【発明を実施するための形態】
【００２２】
図１は、１つのタイプのデータソース１１０から発信するデータ１１６ａ〜ｄおよび別のタイプのデータソース１２０から発信するデータ１０４が処理され、処理されたデータ１０６が１つまたは複数の出力１５０に提供される、データ処理システム１００を示す。データに対して行われる動作が、データソース１１０、１２０のいずれのタイプから発信されたデータであるかに制限されないように、データを処理することができる。これを遂行する様式の１つによって、データソース１１０のうちの１つが他のデータソース１２０からデータ１０４を受信し、受信したデータ１０４をデータソース１１０に固有の技法を使用して処理することが可能となる。このように、データ処理の多くはデータソース１１０によって行われる。複数タイプのデータソースからのデータを処理するデータ処理システムは、連合データ処理システムと呼ばれることもある。
【００２３】
１つのタイプのデータソース１１０は、Ｈａｄｏｏｐ分散ファイルシステム（時にはHDFSと呼ばれる）クラスタに記憶されるファイルの集合である。ＨＤＦＳは、各々が技法に準拠した様式でデータを記憶する複数のコンピュータシステムにわたってデータを分散するために使用可能な、ファイルシステムを定義する技法である。単にＨａｄｏｏｐクラスタとも呼ばれるＨＤＦＳクラスタは、データの一部に対して単一の動作を並列に（たとえばほぼ同時に）実施できるようにデータの一部を記憶している、コンピュータシステム（時にはノードと呼ばれる）の集合である。各ノードのデータは、ＨＤＦＳ技法によって定義されたファイルシステムを使用して記憶される。ファイルシステムはＨＤＦＳストレージと呼ばれるときもある。一般に、ＨＤＦＳに従って動作するファイルシステムは、いずれの種類のデータファイルでも記憶することができる。時には、シーケンスファイルと呼ばれるＨａｄｏｏｐ固有のファイルタイプが、Ｈａｄｏｏｐノードに記憶されるデータのファイル形式として使用される。Ｈａｄｏｏｐクラスタは、何十何百もの（またはそれ以上の）ノードを有することができる。このようにＨａｄｏｏｐクラスタは、それら何十何百ものノードにわたって単一のデータ処理動作を並列に実施することができ、各ノードはデータの一部に対して動作する。以下で説明するような技法を使用して、それ以外の方法で動作を行う異なるデータ処理システムではなく、Ｈａｄｏｏｐクラスタに対して、ほとんどまたはすべてのデータ処理動作を実施することができる。
【００２４】
著者らは一般に、Ｈａｄｏｏｐノードをデータの一部を記憶するコンピュータシステムとして説明するが、Ｈａｄｏｏｐノードは他の形を取ることができる。データの特定部分がコンピュータハードウェアの特定部分に関連付けられる任意の配置構成を、Ｈａｄｏｏｐノードとすることができる。たとえば単一のＨａｄｏｏｐノード自体を、ノードを形成するために共に動作する２つまたはそれ以上のコンピュータシステム、ノードを形成するために共に動作するマルチプロセッサコンピュータシステムの２つのプロセッサ、あるいは何らかの他の配置構成であるかどうかにかかわらず、複数のコンピュータシステムで構成することが可能である。単一のコンピュータシステムがＨＤＦＳ技法に従って動作する２つの別個のファイルシステムを有しており、各々が独自のデータ部分を備えている場合、単一のコンピュータシステムは複数のＨａｄｏｏｐノードとしても動作可能である。さらに筆者らが、ノードが特定のアクションを行うとする場合、それはノードが、説明するアクションを機能コンポーネントがその上で実施するプラットフォームとして働くことを意味する。たとえばノード上で実行するコンピュータプログラムは、アクションを実施することができる。
【００２５】
さらに筆者らは本明細書でＨａｄｏｏｐ技法を参照するが、Ｈａｄｏｏｐの名前を持たない、および／またはＨＤＦＳデータストレージ形式を使用しない他の同様の技法を、本明細書で説明する技法と共に使用することができる。このように、これらの同じ技法を他のタイプのクラスタと共に使用することができる。たとえばこれらの技法を、（たとえば、データの集約を個々のノードによって動作される部分に分けることによって）データの集約に対してデータ処理動作を実施するために、互いに関連して動作するノードによって並列に動作可能なデータの集約を記憶する別の種類のクラスタと共に使用することができる。
【００２６】
Ｈａｄｏｏｐクラスタ内のデータを処理する１つの方法は、ＭａｐＲｅｄｕｃｅプログラミングモデルを使用することである。一般にＭａｐＲｅｄｕｃｅプログラムは、フィルタリングおよび分類（大学生を名前によってキューに分類することなどであり、名前ごとに１つのキューがある）を行うＭａｐ手順、および集計動作（それぞれのキュー内の大学生の数を数え、名前の頻度を引き出すことなど）を行うＲｅｄｕｃｅ手順を含む。システムのユーザはＭａｐおよびＲｅｄｕｃｅの手順を指定するが、各手順（すなわちプロセス）のインスタンス（または呼び出し）の数、またはそれらを実行するノードは必ずしも決定しない。むしろ「ＭａｐＲｅｄｕｃｅシステム」（「インフラストラクチャ」、「フレームワーク」とも呼ばれる）は、分散ノードのセットを整列させ、様々なタスク（たとえばMapおよびReduce手順および関連付けられた通信）を並列に実行し、システムの様々な部分間でのすべての通信およびデータ転送を管理し、冗長性および障害に備え、全プロセスを総括的に管理することによって、調整する。ＭａｐＲｅｄｕｃｅシステムは、データ位置を認識することで、ＭａｐまたはＲｅｄｕｃｅ手順のインスタンスの実行をスケジューリングすることができる。
【００２７】
他方のデータソース１２０は、関係データベース（時には関係データベース管理システム、またはRDBMSと呼ばれる）、フラットファイル、ネットワークリソースからのデータのフィード、または、データ処理システムからの要求に応答してデータを提供できる任意の他のリソースなどの、データソースとすることができる。データ処理動作は、Ｈａｄｏｏｐクラスタ１１２に記憶されたデータと、他方のデータソース１２０から受信されたデータ１０４との組み合わせに対して行うことができる。データをＨａｄｏｏｐクラスタ１１２から、および他方のデータソース１２０から抽出するために、独立した処理システムを使用するのではなく、Ｈａｄｏｏｐクラスタ１１２のデータ処理機能を使用して、Ｈａｄｏｏｐクラスタ１１２に記憶されたデータ１１６ａ〜ｄと、他方のデータソース１２０から受信したデータ１０４との組み合わせを処理することができる。たとえばこれは、Ｈａｄｏｏｐクラスタ１１２のデータ処理機能を利用することで実行できる。たとえば図１に示されるように、他方のデータソース１２０から受信したデータ１０４は、Ｈａｄｏｏｐクラスタ１１２に直接伝送される。ここで筆者らは、他方のデータソース１２０として関係データベース１２２の例を用いる。
【００２８】
データを処理するために組み合わせる方法の１つは、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄに記憶されたデータ１１６ａ〜ｄを関係データベースにコピーすることである。次いで関係データベース１２２に、たとえば関係データベース１２２に固有のデータ処理動作（たとえば、SQLなどのクエリ言語に従って定義されたデータベース動作）を使用して、組み合わせたデータに対して動作するように命じる。しかしながらこの技法では、Ｈａｄｏｏｐクラスタ１１２の並列処理機能は失われる。データを処理するために組み合わせる方法の１つは、関係データベース１２２に記憶されたデータ１２４ａ〜ｃのほとんどまたはすべてをＨａｄｏｏｐクラスタ１１２にコピーし、その後、Ｈａｄｏｏｐクラスタ１１２に固有の技法を使用して、たとえば前述のＭａｐＲｅｄｕｃｅプログラミングモデルを使用して、データを処理することである。
【００２９】
実装の様式に応じて、どちらの技法も、潜在的に大量のデータを一方のデータソースから他方のデータソースにコピーすることが必要な可能性があり、ａ）典型的には少なくともいくつかのデータをディスクに書き込むことが必要である、ｂ）典型的には、動作を行うのに必要な処理時間に比べて、データをコピーするためにはかなり多くの処理時間が必要である、およびｃ）コピーされたデータは古くなるリスクがある、すなわち、動作が実施されている間はデータが変更されないことを保証するためのステップが行われない限り、コピーされたデータはそのソースに比べて旧式になる。これらの制限のすべてが、いずれの技法の性能および効率にも影響を与える。
【００３０】
別の技法では、ほとんどまたはすべてのデータをそれぞれの固有のデータソース１１０、１２０に記憶することが可能であるため、ごく少量のデータがデータソース間でコピーされることになる。言い換えればデータ処理動作は、１つのタイプのデータソースのみを利用する動作を実施するのではなく、両方のタイプのデータソース１１０、１２０のリソースを利用するための技法を使用するように実施される。実際の例として、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄは、タスクを完了するために必要な何らかの動作（たとえば、データの一部に対して変換を行う動作）を行うことができ、関係データベース１２２は、同じくタスクを完了するために必要な何らかの他の動作（たとえば、データの別の部分に対して変換を行う動作）を実施することができる。
【００３１】
これらの技法の例として、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄがデータ処理動作を行うとき、各ノード１１４ａ〜ｄは動作を実施することが必要なデータのみ、たとえばそれに対して動作が行われるデータのみにアクセスする。たとえばいくつかのデータを、列および行を有するデータベーステーブルに記憶することができる。ある列または行に特定の動作のみが適用される場合、それらの列または行のみがデータソース間で、たとえば関係データベース１２２からノード１１４ａ〜ｄのうちの１つにコピーされる。実際の例として、関係データベース１２２が電話会社の顧客を表すデータを記憶しており、データ処理システムが電話番号のリストを必要とする動作を行っている場合、ノード１１４ａ〜ｄは電話番号を記憶している関係データベース１２２の列のみにアクセスし、顧客の名前、住所、またはデータベースに記憶され得る他のデータを表す列にはアクセスする必要がない。関係データベース１２２は、特定の動作、たとえばＨａｄｏｏｐクラスタのノード１１４ａ〜ｄによって実施される特定の動作に必要な、データベースの部分のみを戻すために必要な動作を行うことができる。
【００３２】
さらに、Ｈａｄｏｏｐクラスタ１１２の個々のノード１１４ａ〜ｄは、各々、Ｈａｄｏｏｐクラスタ１１２によって記憶される全データの一部のみを記憶することができる。各ノード１１４ａ〜ｄは、そのデータの部分に関して動作を実施するために必要などのような追加のデータでもそれのみにアクセス可能であり、それらの動作を実施するために必要でない他のデータにアクセスする必要はない。たとえばノード１１４ａが、データのその部分と、異なるデータソースからの他のデータとの両方を使用する動作を行っている場合、ノードは、データのその部分に対して行われる動作に適用可能な他のデータのサブセットのみにアクセスする。
【００３３】
実際の例として、データ処理システムは、顧客のマスタリストおよび通話記録のデータベースを有する電話会社に代わって、データの本体を管理することができる。この例では、クラスタ１１２のノード１１４ａは、米国内で発信または受信された通話のみを表すデータ１１６ａを記憶し、他のノード１１４ｂ〜ｄは、他のすべての国で発信または受信された通話を表すデータ１１６ｂ〜ｄを記憶することができる。クラスタ１１２のノード１１４ａ〜ｄとは分離されている関係データベース１２２は、電話会社の顧客のリストを表すデータ１２４を記憶することができる。（通話のデータベースの現実世界での実装は何百何千というノードが必要な可能性があるため、これは例としてのみ使用される。）
【００３４】
この例では、データ処理動作は、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄによって少なくとも部分的に行うことができる。たとえば動作は、特定の通話に関連付けられた顧客を識別する動作とすることができる。米国内で発信および受信された通話を表すデータを記憶するノード１１４ａには、米国内で電話サービスを受けている顧客のみに関する顧客記録を表すデータ１２４ａを提供し、任意の他の国で電話サービスを受けている顧客を表すいずれのデータ１２４ｂ、１２４ｃも提供しないことができる。いくつかの例では、関係データベース１２２からのデータ１２４ａ〜ｃを、Ｈａｄｏｏｐクラスタ１１２のそれぞれのノード１１４ａ〜ｄに提供することができる。いくつかの例では、Ｈａｄｏｏｐクラスタのそれぞれのノード１１４ａ〜ｄは、関係データベース１２２にデータ１２４ａ〜ｃの一部を要求することができる。したがって、ノード１１４ａがアクセスするデータの量は、顧客のデータベース全体、たとえば関係データベース１２２によって記憶されたデータ１２４ａ〜ｃのすべてに比べて少ない。いくつかの例では、ノード１１４ａ〜ｄによって受信されたデータ１２４ａ〜ｃを、（たとえばノード１１４ａ〜ｄによって）ノード１１４ａ〜ｄに記憶されたデータの形式に適合する形式に変換することができる。
【００３５】
各動作が行われるときに、比較的少量のデータのみがそれぞれのデータソースから受信されるため、動作は、ディスクなどの持続的な（不揮発性）ストレージとは対照的に、アクティブな（揮発性）メモリに記憶されたデータに対して行うことが可能である。多くのコンピューティング環境において、持続性ストレージはアクティブメモリよりも低速になる傾向があるため、これによってデータ処理動作がスピードアップすることになる。
【００３６】
いくつかの実装において、データ処理システム１００はグラフベース処理システムとすることができる。グラフベース処理システムは、データフローグラフを使用してデータを処理する。データフローグラフは、データのフローを表すコンポーネント間の入力データおよびリンクに対して行われるべき動作を表すコンポーネントを含む、コンピュータプログラムである。（コンポーネントは時にはノードと言い表されるが、Hadoopクラスタのノードとの混同を防ぐために、ここではコンポーネントと呼ばれる。）コンポーネントによって表される動作は、入力データを処理することによって、入力データに基づき出力データを生成する。コンポーネントは、コンポーネントが他のコンポーネントにリンクされている場合、他のコンポーネントに入力データを提供し、他のコンポーネントから出力データを受信することが可能であり、２つのコンポーネント間の各リンクはコンポーネントのうちの１つから他方のコンポーネントへのデータフローを表す。データフローグラフがグラフベース処理システムによって実行されるとき、コンポーネントの各々が実行され、たとえばコンピュータプログラムまたはコンピュータプログラムの一部が実行され、コンポーネントによって表される動作を実施する。実行中、データフローグラフは、出力データを生成するために処理される（たとえば、データフローグラフのコンポーネントの動作によって動作される）入力データを受信する。グラフベースシステムの一例は、「Ｍａｎａｇｉｎｇ  Ｐａｒａｍｅｔｅｒｓ  ｆｏｒ  Ｇｒａｐｈ−Ｂａｓｅｄ  Ａｐｐｌｉｃａｔｉｏｎｓ」という名称の米国公開第２００７／００１１６６８号に詳細に記載され、参照により本明細書に組み込まれる。グラフベースの計算を実行するためのシステムは、「Ｅｘｅｃｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎｓ  Ｅｘｐｒｅｓｓｅｄ  ａｓ  Ｇｒａｐｈｓ」という名称の米国特許第５，９６６，０７２号に記載され、参照により本明細書に組み込まれる。
【００３７】
グラフの実行は、時にはグラフオペレーティングシステムと呼ばれる、専用オペレーティングシステムによって容易となることがある。グラフオペレーティングシステムは、データフローグラフの個々のコンポーネントの基礎をなす動作を実行することができるコンピュータプログラムである。たとえば、データフローグラフのコンポーネントがデータベースシステムによって実施されるべき動作を表す場合、グラフオペレーティングシステムには、動作を実施するようにデータベースシステムに命じるタスクが与えられる。このため、グラフオペレーティングシステムは、時にはグラフベースデータ処理システムと対話するシステム上で実行する。図１に示された例では、グラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄ上で実行可能である。Ｈａｄｏｏｐクラスタのノード上でグラフオペレーティングシステムを実行するための技法の例は、「Ｐａｒａｌｌｅｌ  Ａｃｃｅｓｓ  ｔｏ  Ｄａｔａ  ｉｎ  ａ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ」という名称の米国出願第１４／０９０，４３４号に記載されており、参照により本明細書に組み込まれる。
【００３８】
グラフオペレーティングシステム１３０ａ〜ｄまたは任意の他の汎用データ処理システムを使用して、Ｈａｄｏｏｐクラスタ１１２のノードが他のデータソースからデータを受信できるようにすることが可能である。たとえばグラフオペレーティングシステムは、関係データベース１２２からのデータの受信を可能にする場合がある。この例では、グラフオペレーティングシステムのインスタンスが関係データベース１２２からデータを受信し、これを、グラフオペレーティングシステムのインスタンスが実行しているＨａｄｏｏｐノード１１４ａ〜ｄの適切な部分またはサブシステムに提供することができる。このように、Ｈａｄｏｏｐクラスタのノード１１４ａ〜ｄは、関係データベースなどの別の種類のデータソースからデータを受信するためにいずれのカスタム機能（たとえば特注コード）も必要としない。いくつかの例では、グラフオペレーティングシステム１３０ａ〜ｄは、特定のデータソースからいかにしてデータを受信および解析するかを記述した「プラグイン」を受信する機能を有する。Ｈａｄｏｏｐノード１１４ａが関係データベース１２２からデータを受信する例では、Ｈａｄｏｏｐノード１１４ａ上で実行しているグラフオペレーティングシステム１３０ａのインスタンスは、関係データベース１２２から受信したデータをいかにして解析するかを決定するために「プラグイン」にアクセスすることができる。
【００３９】
いくつかの実装において、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄ上で実行するグラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、関係データベース１２２の機能と通信する。たとえば関係データベース１２２は、グラフオペレーティングシステムなどの外部エンティティが関係データベース１２２によって記憶されたデータにアクセスできるようにする関数（たとえばデータベースコマンド）をサポートすることができる。
【００４０】
いくつかの実装において、データ処理システム１００には、データベースクエリ１４０を実施するタスクが与えられる。データベースクエリは、データベースコンテンツのサブセットおよびそのサブセット内のデータ上で行うアクションを記述する、命令のセットである。データベースクエリ１４０が、電話会社に関するデータを記憶している前述のシステムで使用されるデータベースクエリである場合、データベースクエリ１４０は、電話会社によって使用されるデータソースに記憶された通話のある記録に関する要求とすることができる。たとえば、いくつかのデータベースシステムは、構造化クエリ言語（SQL）などの専用データベースクエリ言語で作成されたデータベースクエリを行う。これらのデータベースシステムにおいて、ＳＱＬクエリはデータベースのコンテンツを操作するための主な手段である。
【００４１】
いくつかの実装において、データベースクエリ１４０はＳＱＬクエリである。ＳＱＬクエリは、構造化クエリ言語によって定義されたコマンドおよび構文を使用する。関係データベース１２２は、１つまたは複数のデータベーステーブルの集合を含み、データベーステーブルは、ａ）各々が記録を表す行、およびｂ）各々が行に記録されたデータのカテゴリを表す列、に配置構成されたデータの集合である。たとえば「ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」と呼ばれるデータベーステーブルは、各々がビジネスの現在の顧客を表す行を有し得、顧客の名前、顧客の住所、顧客が最後に購入した製品などの、データのカテゴリを表す列を有し得る。
【００４２】
関係データベース１２２は典型的には、クエリを解釈し、クエリに応答してデータを戻すための機能を含む。クエリを解釈することとクエリに応答してデータを戻すことの組み合わせは、時にはクエリの実行と呼ばれる。たとえばいくつかの関係データベースの実装は、ａ）ＳＱＬクエリを解析し、ｂ）構造化クエリ言語によって定義される動作を識別し、ｃ）演算子のオペランドを識別し、ｄ）オペランドに従って動作を実施する（たとえば実行する）、エンジンを含む。ＳＱＬクエリの例は、「ＳＥＬＥＣＴ  ｌａｓｔ＿ｎａｍｅ  ＦＲＯＭ  ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」とすることができる。このＳＱＬクエリは動作ＳＥＬＥＣＴを含み、これはＳＥＬＥＣＴ動作のオペランドに従ってデータを取り出すように関係データベースに命令する。ＳＱＬの構文において、オペランドは、関係データベースによって管理されるデータベーステーブルである「ｃｕｒｒｅｎｔ＿ｃｕｓｔｏｍｅｒｓ」と、データベーステーブルの列である「ｌａｓｔ＿ｎａｍｅ」である。関係データベースがクエリを解釈し、クエリの動作を実行するとき、関係データベースはクエリに応答してｌａｓｔ＿ｎａｍｅ列のデータ（ｌａｓｔ＿ｎａｍｅ列に含まれるデータの各部分）を戻す。
【００４３】
データ処理システム１００は、たとえデータベースクエリ１４０で識別されたデータソースが、データベースクエリ１４０の形のクエリを使用して動作するデータベースでない場合であっても、データベースクエリ１４０を実施することができる。たとえばＨａｄｏｏｐクラスタ１１２は通常、ＳＱＬの形で指定された命令を受け入れない場合がある。データベースクエリ１４０がＳＱＬクエリであり、Ｈａｄｏｏｐクラスタ１１２を参照する場合、グラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、データベースクエリ１４０に取り込む仲介として共に動作することができ、各インスタンスはそれに応答してＨａｄｏｏｐクラスタ１１２で行うべき動作を決定することができる。たとえばデータフローグラフのコンポーネントは、データベースクエリ１４０の命令の代用として使うことができる。この代用に従った技法は、「Ｍａｎａｇｉｎｇ  Ｄａｔａ  Ｑｕｅｒｉｅｓ」という名称の米国公開第２０１２／０２８４２５５Ａ１号により詳細に記載され、参照により本明細書に組み込まれる。いくつかの実装において、データフローグラフはデータベースクエリ１４０から作成可能である。
【００４４】
いくつかの実装において、グラフオペレーティングシステム１３０ａ〜ｄの各インスタンスはコンピュータプログラム１３４ａ〜ｄの対応する部分を実行する。たとえばコンピュータプログラムは、実行可能コンポーネントで構成することが可能であり、グラフオペレーティングシステム１３０ａ〜ｄの各インスタンスはコンピュータプログラムのコンポーネントのいくつかを実行することができる。グラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、たとえば互いにデータを送受信することによって、コンピュータプログラムのそれぞれの部分を実行し、それによって共にコンピュータプログラムを実行するように、互いに調整可能である。いくつかの例では、グラフオペレーティングシステム１３０ａ〜ｄの複数のインスタンスが、コンピュータプログラムの同じコンポーネントのインスタンスを実行する。たとえばＨａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄ上で実行するコンピュータプログラム１３４ａ〜ｄのインスタンスは、その各々が異なるデータ（たとえばそれぞれのノード１１４ａ〜ｄによって記憶されたデータ１１６ａ〜ｄ）上で動作する、同じデータ処理コンポーネントのインスタンスを各々実行することが可能である。いくつかの例では、コンピュータプログラムの一部が共にデータフローグラフを構成し得、コンピュータプログラムの一部はデータフローグラフのサブグラフ（たとえば１つまたは複数のリンクされたコンポーネント）とすることができる。いくつかの実装において、グラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、コンピュータプログラム１３４ａ〜ｄを生成することができる。
【００４５】
このように、Ｈａｄｏｏｐクラスタは、動作を実施するために、関係データベースの機能、たとえば関係データベースのクエリ解釈機能に依拠しない技法を使用して、データベースクエリ１４０の動作を実施することができる（データベースクエリ１４０を実行するとも呼ばれる）。その代わりにクエリは、コンピュータプログラム１３４ａ〜ｄのインスタンスを実行することによって実施可能である。コンピュータプログラム１３４ａ〜ｄが生成されると、Ｈａｄｏｏｐクラスタのノード１１４ａ〜ｄ上でデータベースクエリ１４０の動作を実施するために、関係データベースのクエリ解釈機能は使用されない。
【００４６】
いくつかの実装において、コンピュータプログラム（たとえばデータフローグラフ、または任意の他の種類のプログラム）をパラメータで構成することができる。たとえばパラメータは、プログラムの挙動を変更するために変更可能な値とすることができる。特定の例として、パラメータは「ｆｉｌｅｎａｍｅ」であってよく、パラメータの値はファイルシステム内のファイルの位置とすることができる。異なるファイルにアクセスするようにプログラムを構成するために、パラメータの値を異なるファイルの位置に変更することができる。同じプログラムの２つのインスタンスを異なるパラメータ値で構成することが可能であり、これによって同じプログラムの２つのインスタンスの挙動が変更される。
【００４７】
図１のシステムは、１つまたは複数のネットワークを使用して互いに通信することができる。たとえばＨａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄは、ローカルエリアネットワーク（LAN）などのネットワークを使用して互いに通信可能であるが、ワイドエリアネットワーク（WAN）、インターネット、または別の種類のネットワークを使用して互いに通信してもよい。さらにＨａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄは、ＬＡＮ、ＷＡＮ、インターネット、または、コンピュータシステム間での通信をサポートする任意の他の種類の通信ネットワークを使用して、関係データベース１２２および処理システム１００と通信することができる。
【００４８】
さらに、図１には単一のＨａｄｏｏｐクラスタ１１２が示されているが、図に示されるシステムでは複数のＨａｄｏｏｐクラスタが使用できる。たとえば１つのＨａｄｏｏｐクラスタは関係データベース１２２から何らかのデータを受信し、別のＨａｄｏｏｐクラスタは関係データベース１２２から他のデータを受信することができる。複数のＨａｄｏｏｐクラスタを含む他の構成が可能である。
【００４９】
図２は、データフローグラフ２００の例を示す。いくつかの例では、データフローグラフ２００は、データフローグラフを閲覧、構成、および／または実行することができるユーザインターフェース内に表示可能である。このデータフローグラフ２００は、図１に示されたＨａｄｏｏｐクラスタ１１２およびデータ処理システム１００によって行うことができるデータ処理動作を表す。この例では、データフローグラフは「結合」と呼ばれる動作を表すコンポーネント２０２を含み、結合コンポーネント２０２と呼ぶこともある。「結合」動作は２つのタイプのデータを組み合わせるものであり、たとえば１つのタイプのデータは１つのデータソースに格納され、別のタイプのデータは別のデータソースに格納されている。データフローグラフ２００の他のコンポーネントは、Ｈａｄｏｏｐクラスタである１つのデータソースを含む、複数タイプのデータソースを使用して、データフローグラフ２００が結合動作を実施できるようにする。さらにほとんどの処理は、Ｈａｄｏｏｐクラスタのノード上で実行される。
【００５０】
いくつかの例では、データフローグラフ２００は、たとえば図１に示されたデータベースクエリ１４０などのデータベースクエリから作成され得る。たとえばデータフローグラフ２００は、データベースクエリを入力として受け取り、データフローグラフを出力として作成するエンジン（たとえば図１に示されるグラフオペレーティングシステム１３０ａ〜ｄのインスタンス）を使用して生成可能である。このように、図２に示されるデータフローグラフ２００などのデータフローグラフは、実行されたとき、対応するデータベースクエリ１４０（図１）の実行と同じ出力を作成することができる。このように、データベースクエリ１４０はＳＱＬなどのデータベースクエリ言語を使用して作成可能である。しかしながら、対応するデータ処理動作を実施するシステム、たとえばＨａｄｏｏｐクラスタ１１２は、データベースクエリ１４０を解析できる必要はない。たとえば、カスタム設計のデータベースクエリ解析機能をＨａｄｏｏｐクラスタ１１２に提供する必要はない。代わりに、Ｈａｄｏｏｐノード１１４ａ〜ｄ上で実行するグラフオペレーティングシステム１３０ａ〜ｄのインスタンス（図１）は、組み合わせて、データベースクエリ１４０の動作と等価である（たとえば、従来の関係データベースシステムにおいてデータベースクエリ１４０を実行することと同じ結果を達成する）動作を行うために、データフローグラフ２００を実行することができる。たとえば、データフローグラフ２００がグラフオペレーティングシステム１３０ａ〜ｄのインスタンスによって実行されるとき、データフローグラフ２００の出力は、データベースクエリ１４０を実行するがデータフローグラフ２００は実行しないシステム（Ｈａｄｏｏｐクラスタ１１２以外）の出力と等価である。このように、データフローグラフ２００は、データベースクエリ１４０に対応するコンピュータプログラムの例である。
【００５１】
データフローグラフ２００のコンポーネントは、データフローグラフ２００が、Ｈａｄｏｏｐクラスタを表すデータソースを含む、複数タイプのデータソースからのデータを処理することができるように、配置構成される。１つのコンポーネント２０４はＨａｄｏｏｐクラスタ１１２によって記憶されるデータを表し、別のコンポーネント２０６は関係データベース１２２によって記憶されるデータを表し、どちらも図１に示されている。Ｈａｄｏｏｐクラスタコンポーネント２０４は結合コンポーネント２０２にリンクされ、これはデータがＨａｄｏｏｐクラスタコンポーネント２０４から結合コンポーネント２０２へと流れるため、Ｈａｄｏｏｐクラスタコンポーネント２０４の出力が入力として結合コンポーネント２０２に提供されることを意味する。さらに、Ｈａｄｏｏｐクラスタコンポーネント２０４は、Ｈａｄｏｏｐクラスタのノードによって並列に実施可能な動作を表す。たとえばデータがＨａｄｏｏｐクラスタコンポーネント２０４から流れるとき、データの複数部分、たとえばノードによって処理されたデータが、Ｈａｄｏｏｐクラスタノードから同時に流れることができる。同様に、Ｈａｄｏｏｐクラスタコンポーネント２０４によって行われる動作は、各々がＨａｄｏｏｐクラスタノード上で行われる複数の同時動作の形で行われることができる。この技法は、並列処理と呼ばれることがある。図に示されている番号「４」は、下にあるＨａｄｏｏｐクラスタ内のノードの数、したがって、並列処理のために動作を分割できる数を示す。
【００５２】
データは、関係データベースコンポーネント２０６から、データがＨａｄｏｏｐクラスタの個々のノードに直接提供できるように流れる。データは、関係データベースコンポーネント２０６からブロードキャストコンポーネント２１０へと流れる。次いでデータは、結合コンポーネント２０２へと流れる。この例では、結合コンポーネント２０２の動作は、Ｈａｄｏｏｐクラスタの並列処理機能を利用するために、Ｈａｄｏｏｐクラスタコンポーネント２０４によって表されるＨａｄｏｏｐクラスタのノードによって記憶されたデータに対して実施される。
【００５３】
ブロードキャストコンポーネント２１０は、関係データベースによって記憶されたデータをＨａｄｏｏｐクラスタコンポーネント２０４によって表された各々のノードに伝送できるようにする、動作を表す。この例は関係データベースを使用しているが、図２に示される他のコンポーネントと同様に、ブロードキャストコンポーネント２１０は他の種類のデータソースと共に使用することができる。いくつかの実装において、ブロードキャストコンポーネント２１０は、結合動作をＨａｄｏｏｐクラスタの各ノード内でローカルに行えるようにするために、クラスタにわたるデータの各部分の狭められたハッシュテーブルをコピーする。このように、データが関係データベースコンポーネント２０４から結合コンポーネント２０２へと流れるとき、図１に示された関係データベース１２２に記憶された下にあるデータ１２４ａ〜ｃの一部を、Ｈａｄｏｏｐクラスタ１１２の特定のノード１１４ａ〜ｄに向けて送ることができる。このプロセスはファンアウト（fan-out）インジケータ２１２によって表され、これはデータが並列処理のために分割される（または「広がる」）ことを示す。いくつかの例では、それぞれのデータソース（たとえば関係データベース１２２およびＨａｄｏｏｐクラスタ１１２）に記憶されたデータを分析して、データフローグラフ２００内で処理されるときなどにデータを分割する最適な様式を決定することができる。いくつかの例では、Ｈａｄｏｏｐクラスタのノード１１４ａ〜ｄ上で実行するグラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、データフローグラフ２００内で処理されるときなどにデータを分割する最適な様式を決定し、関係データベース１２２にデータの一部を要求することができる。一般にデータは、Ｈａｄｏｏｐノードが各々、それぞれのＨａｄｏｏｐノードのアクティブメモリに記憶できる量のデータ（たとえば関係データベースのいくつかの行および／または列のみ）を受信するように分割される。
【００５４】
この例では、データは結合コンポーネント２０２からロールアップコンポーネント２１４へと流れる。ロールアップコンポーネントは、複数のソースからのデータを集約する。結合コンポーネント２０２はＨａｄｏｏｐクラスタの複数のノードによって実施される動作を表すため、ロールアップコンポーネント２１４は複数のノードからの出力を集約する。ファンインインジケータ２１６は、データフローグラフ２００内のこの時点で、複数の並列フローの形でグラフを通って流れるデータが単一のフローに統合されることを示す。ファンインインジケータ２１６の後に現れるコンポーネント２１８は、Ｈａｄｏｏｐクラスタのノード以外のエンティティ（たとえば、図５に示されるデータ処理サブシステム１０１）によって実施され得る動作を表す。
【００５５】
データフローグラフの各コンポーネントは、レイアウトインジケータでマーク付けされている。レイアウトは、コンポーネントによって表される動作を実施する特定のシステムを指す。図に示されるように、いくつかのコンポーネントはレイアウト１とマーク付けされ、いくつかのコンポーネントはレイアウト２とマーク付けされ、いくつかのコンポーネントはレイアウト３とマーク付けされている。ここで、レイアウト１、レイアウト２、およびレイアウト３とマーク付けされたコンポーネントは、Ｈａｄｏｏｐクラスタ１１２に関連付けられたグラフオペレーティングシステム１３０ａ〜ｄのインスタンスによって実施される動作を表す。いくつかの例では、レイアウト２とマーク付けされたコンポーネントは、関係データベース１２２または関係データベース１２２に関連付けられたグラフオペレーティングシステムによって実施される動作を表す。いくつかの例では、レイアウト３とマーク付けされたコンポーネントは、Ｈａｄｏｏｐクラスタ１１２または関係データベース１２２以外のシステム、たとえば図５に示されるデータ処理サブシステム１０１などのシステムによって実施される動作を表す。
【００５６】
したがって、データフローグラフ２００が実行されるとき、データフローグラフ２００の動作は、データ処理の多くがＨａｄｏｏｐノードで生じるように、Ｈａｄｏｏｐクラスタに関連付けられたコンピュータシステムによって実施可能である。このように、Ｈａｄｏｏｐクラスタの並列処理機能が使用される。さらに、個々のＨａｄｏｏｐノードにコピーされたデータ量はアクティブメモリ内に保持できるため、データをディスクにコピーする必要はなく、ディスクの読み／書きによって生じる性能の減速は緩和される。
【００５７】
図３は、データ処理システム１００のシステムによって共に実施可能な別の一連の動作を表す、データフローグラフ３００を示す。このデータフローグラフ３００は、「付加」動作を実施するコンポーネント３０２を含む。「付加」動作は、１つのデータ量を別のデータ量に付加し、統合されたデータ量を形成する。このデータフローグラフ３００は、ほとんどのデータ処理がＨａｄｏｏｐノード上で生じる一連の処理動作の別の例を表す。
【００５８】
データフローグラフ３００のコンポーネントは、Ｈａｄｏｏｐクラスタを表すデータソースを含む複数タイプのデータソースからのデータを、データフローグラフ３００が処理できるように配置構成される。１つのコンポーネント３０４はＨａｄｏｏｐクラスタ１１２によって記憶されるデータを表し、別のコンポーネント３０６は関係データベース１２２によって記憶されるデータを表し、どちらも図１に示されている。
【００５９】
Ｈａｄｏｏｐクラスタコンポーネント３０４はフィルタコンポーネント３０８にリンクされ、フィルタコンポーネント３０８は付加コンポーネント３０２にリンクされる。したがって、データはＨａｄｏｏｐクラスタコンポーネント３０４から流れ、付加コンポーネント３０２によって処理される前にフィルタコンポーネント３０８によってフィルタリングされる。入力データは、入力データの特徴ならびに各Ｈａｄｏｏｐノード上に記憶されたデータの特徴に基づいてフィルタリング可能である。たとえば、動作が商取引を表すデータに対して行われるものであり、特定のＨａｄｏｏｐノードが合計で１０ドルを超える取引に関するデータのみを記憶する場合、フィルタコンポーネント３０８は、（たとえば、コンポーネントの動作を制御するようにパラメータを修正することによって）合計で１０ドルを超える購買に関連する入力データを渡すように構成することができる。別の例として、動作が商取引を表すデータに対して行われるものであり、動作自体が合計で１０ドルを超える購買にのみ関連している場合、フィルタコンポーネント３０８は、（たとえば、コンポーネントの動作を制御するようにパラメータを修正することによって）合計で１０ドルを超える取引に関連する入力データを渡すように構成することができる。
【００６０】
このデータフローグラフ３００において、関係データベースコンポーネント３０６から流れるデータは、Ｈａｄｏｏｐクラスタのノードでの処理のために分割される。関係データベースコンポーネント３０６は区分コンポーネント３１０にリンクされ、区分コンポーネントは関係データベースコンポーネント３０６から流れるデータを区分（たとえば分割）する。たとえば、区分コンポーネント３１０はラウンドロビンと呼ばれる技法を使用し、この技法では、区分コンポーネント３１０によって区分されたデータの各新規部分が、固定シーケンスでＨａｄｏｏｐクラスタのノードに提供される。言い換えれば、ラウンドロビン技法では、データの一部がノードに順番に分配される。このように、Ｈａｄｏｏｐクラスタの各ノードは、ノードのアクティブメモリ内に保存可能であり、ディスクに書き込む必要のないデータの一部を受信する。
【００６１】
したがって付加コンポーネント３０２は、各ノードが関係データベースコンポーネント３０６から受信したデータを、Ｈａｄｏｏｐクラスタの個々のノードに記憶されたデータに付加するように、Ｈａｄｏｏｐクラスタのノードによって実施される動作を表す。これらのすべての付加動作の結果はロールアップコンポーネント３１２に並列に提供され、ロールアップコンポーネント３１２はこの結果をさらに処理するために集約する。たとえば集約された出力は、その先のコンポーネント３１４によって処理することができる。ここでも、Ｈａｄｏｏｐクラスタのノード上での動作がディスクを大量に使用する必要のないように、ほとんどのデータ処理動作はＨａｄｏｏｐクラスタ上で生じる。
【００６２】
図４は、データを処理するための手順４００を表すフローチャートを示す。手順４００は、たとえば図１に示されたデータ処理システム１００のコンポーネントによって実施可能である。
【００６３】
手順４００は、ＨａｄｏｏｐクラスタのＨａｄｏｏｐノードで、データ処理エンジンのインスタンスを実行する４０２。Ｈａｄｏｏｐノードはデータの第１の部分をＨＤＦＳデータストレージに記憶する。データ処理エンジンは、Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することができる。たとえばノードは、図１に示されるＨａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄのうちの１つとすることができる。たとえばデータ処理エンジンは、図１に示されたグラフオペレーティングシステム１３０ａ〜ｆとすることができる。
【００６４】
データ処理エンジンの他のインスタンスは、Ｈａｄｏｏｐクラスタの他のノード上で実行可能であり、その各々が手順４００の動作のそれら自身のインスタンス（たとえば動作４０２〜４１２）を行う。いくつかの実装において、データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装しない。
【００６５】
手順４００はプログラムを受信する４０４。ブログラムは、データ処理エンジンによって受信され得る。たとえばプログラムは、Ｈａｄｏｏｐクラスタを表す少なくとも１つのコンポーネント、受信したデータのソースを表す少なくとも１つのコンポーネント、および、少なくとも１つのデータソース（たとえばＨａｄｏｏｐクラスタまたは別のデータソース）から受信したデータに対して行われるべき動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む、データフローグラフとすることができる。グラフは、Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、手順４００で受信したデータのソースからのデータフローを表すリンクに接続された、少なくとも１つのコンポーネントを含むことができる。
【００６６】
いくつかの実装において、コンピュータプログラムは、データベースクエリ、たとえばＳＱＬクエリに対応する動作を表すコンポーネントを含む。データベースクエリを表すコンピュータプログラムは、データベースクエリ（たとえばＨａｄｏｏｐクラスタを参照するデータベースクエリ）内で参照されるデータのソースを表す少なくとも１つのコンポーネント、および、データに対して行われるべき動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクを含む。たとえば動作は、手順４００内で行われるデータ処理動作とすることができる。
【００６７】
手順４００は、コンピュータプログラムの少なくとも一部を実行する４０６。たとえばコンピュータプログラムの一部は、Ｈａｄｏｏｐクラスタ内のＨａｄｏｏｐノード上で実行するデータ処理エンジンによって実行可能である。いくつかの例では、実行されるコンピュータプログラムの一部は、Ｈａｄｏｏｐクラスタを表す少なくとも１つのコンポーネント、およびデータ処理動作を表す少なくとも１つのコンポーネントを含む。たとえば実行される４０６コンピュータプログラムのコンポーネントは、コンピュータプログラムのレイアウトに含めることができる。いくつかの例では、ここで実行される４０６コンピュータプログラムの同じコンポーネントのインスタンスは、Ｈａｄｏｏｐクラスタの他のノード内で同時に実行される。いくつかの実装において、コンピュータプログラムは実行される前に構成される。たとえばコンピュータプログラムのコンポーネントは、変更可能な値を有するパラメータで構成可能である。いくつかの例では、コンピュータプログラムは別のプログラムにリンクされる。たとえば、コンピュータプログラムがグラフである場合、グラフを別のグラフ（たとえば、グラフオペレーティングシステム上で実行するかまたは使用可能なグラフ）にリンクすることができる。
【００６８】
手順４００は、外部のデータソースからデータの第２の部分を受信する４０８。たとえば外部データソースは、Ｈａｄｏｏｐクラスタのノード以外のソース、たとえば図１に示されたデータソース１２０（たとえば、関係データベース１２２）とすることができる。受信されたデータは、Ｈａｄｏｏｐクラスタの他のノードで受信されたデータの他の部分（たとえば、データの他のソースから受信されたデータの他の部分）とは別個である。いくつかの例では、データの第２の部分は関係データベースの行のサブセットを含み、データの第２の部分は関係データベースの列のサブセットを含む。いくつかの例では、データの第２の部分は、外部データソースからＨａｄｏｏｐクラスタの第２のノードで受信したデータの第３の部分とは別個である。言い換えればデータの第２の部分は、データの第３の部分とは異なるデータ、たとえば異なる行および／または列を含む。
【００６９】
手順４００は、データの第２の部分をＨＤＦＳストレージ以外に記憶する４１０ため、これはデータの第２の部分がＨＤＦＳストレージ（たとえば、データの第１の部分を含むＨＤＦＳストレージ）に記憶されないことを意味する。たとえばデータの第２の部分は、Ｈａｄｏｏｐノードの揮発性メモリに記憶することができる。揮発性メモリは、ランダムアクセスメモリと呼ばれることがある。これに対して不揮発性メモリは、たとえばディスクドライブである。手順４００によって受信される４０８データは、Ｈａｄｏｏｐクラスタのノードの揮発性メモリに収まるサイズを有し得る。
【００７０】
手順４００は、少なくともデータの第１の部分およびデータの第２の部分を使用して、プログラムによって識別されたデータ処理動作を行う４１２。データ処理動作は、少なくとも部分的に、データ処理エンジンの他のインスタンスと協働するデータ処理エンジンのインスタンスによって実施可能である。データ処理エンジンのインスタンスは共に並列でデータ処理動作を行うため、これはデータの異なる部分に対して同じデータ処理動作を行うために、データ処理エンジンのインスタンスが同時に実行することを意味する。「同時に実行すること」は、データ処理エンジンの１インスタンスが（たとえば、コンピュータプログラムの一部において）動作の集合の実施を開始する時点が、データ処理エンジンの別のインスタンスが同じ動作の集合の実施を開始する時点に依存せず、データ処理エンジンの両方のインスタンスで、同じ動作の少なくともいくつかは同時に、または互いに数ミリ秒以内に実施され得ることを意味する。いくつかの例では、インスタンスは、Ｈａｄｏｏｐクラスタのノードによって記憶されたデータの本体およびデータの別の本体に対してデータ処理動作を共に行うことができる。いくつかの例では、データの他の本体は関係データベースシステムに固有の形式（たとえば、行および列を含むテーブルの形、または関係データベースシステムのデフォルト形式である別の形）で記憶することができる。
【００７１】
いくつかの例では、手順４００は、Ｈａｄｏｏｐクラスタ外部のデータ処理エンジンの第２のインスタンスによって、プログラムの少なくとも一部を実行する。たとえばデータ処理エンジンは、図１に示された他方のデータソース１２０（たとえば、関係データベース１２２）上で実行するグラフオペレーティングシステム１３０ｆとすることができる。図には、Ｈａｄｏｏｐノード上で実行するグラフ処理エンジンのインスタンスと、Ｈａｄｏｏｐクラスタ外部で実行するデータ処理エンジンのインスタンスとの間の通信を表すものとして、両矢印が示されている。いくつかの実装において、Ｈａｄｏｏｐクラスタのノード、たとえば手順の動作４０２〜４１２を実施するノードは、Ｈａｄｏｏｐクラスタ外部のデータ処理エンジンの第２のインスタンス（たとえば、他方のデータソース１２０上で実行するデータ処理エンジンのインスタンス）によって実行されるプログラムの少なくとも一部と通信する。たとえば、プログラムの少なくとも一部（たとえば、プログラムの１つまたは複数のコンポーネント）は、Ｈａｄｏｏｐクラスタのノードとの間でデータを送受信することができる。
【００７２】
Ｈａｄｏｏｐクラスタのノードによって受信されるデータの一部は、ノード上に記憶されたデータの一部の特徴に基づいて選択することができる。たとえば、ノードによって受信されるデータの一部は、他のノードとは反対に、その特定のノード上でデータ処理動作を実施するために必要となるデータに基づいて選択することができる。ノードによって受信されるデータの一部が関係データベースからのものである場合、データの一部は、関係データベースからのいくつかの列のみおよび／またはいくつかの行のみを含む場合がある。いくつかの例では、関係データベースは、特定のノード上に記憶されたデータの部分を識別する情報に基づいて、特定ノードを宛先とする出力データをフィルタリングするフィルタリング動作を行うことができる。
【００７３】
図５は、１つまたは複数のデータソース１１０、１２０から発信されるデータ１０２、１０３が、データ処理サブシステム１０１によって処理される、データ処理システム１００ａの別のバージョンを示す。データ処理サブシステム１０１はデータに対して動作１３１を行い、処理されたデータ１３２を１つまたは複数の出力１５０に提供する。このデータ処理システム１０１は、複数タイプのデータソース１１０、１２０からのデータ１０２、１０３を処理し、データに対して行われる動作が、いずれのデータ１０２、１０３がいずれのタイプのデータソース１１０、１２０から着信したかによって制限されないように、データを処理することができる。これを遂行する様式の１つによって、データソース１１０のうちの１つ（たとえば、Ｈａｄｏｏｐクラスタ１１２）が他のデータソース１２０（たとえば、関係データベース１２２）からデータ１０４を受信し、受信したデータ１０４をデータソース１１０に固有の技法を使用して処理することが可能となる。このように、普通であればデータ処理システム１０１によって行われることになるデータ処理の多くは、代わりにデータソース１１０によって行われる。
【００７４】
Ｈａｄｏｏｐクラスタ１１２は、他のタイプのデータソースと共に、データ処理システム１０１への入力データソース１１０として指定され得る。他方のデータソース１２０は、関係データベース、フラットファイル、ネットワークリソースからのデータのフィード、または、データ処理システムからの要求に応答してデータを提供できる任意の他のリソースなどの、データソースとすることができる。次いでデータ処理サブシステム１０１は、Ｈａｄｏｏｐクラスタ１１２からのデータ１０２と別のデータソース１２０からのデータ１０３との組み合わせに対して動作を行うことができる。Ｈａｄｏｏｐクラスタ１１２または他のデータソース１２０からデータを抽出するのではなく、データ処理サブシステム１０１は、Ｈａｄｏｏｐクラスタ１１２のデータ処理機能に依拠することができる。これは、Ｈａｄｏｏｐクラスタ１１２のデータ処理機能を利用して行うことができる。このように、データ処理サブシステム１０１は、Ｈａｄｏｏｐクラスタ１１２に比べて少ない動作を、かなり少量のデータに対して実施することができる。たとえば図５に示されるように、他方のデータソース１２０から受信するデータ１０４のほとんどは、Ｈａｄｏｏｐクラスタ１１２に（たとえば図１に関して上記で説明した技法を使用して）直接伝送され、少量のデータ１０３のみ（場合によっては全くなし）がデータ処理サブシステム１０１に伝送される。
【００７５】
実際の例として、データ処理サブシステム１０１は、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄに、タスクを完了するために必要な何らかの動作（たとえば、データの一部に対して変換を行う動作）を行うように命令すること、および、関係データベース１２２に、同じくタスクを完了するために必要な何らかの他の動作（たとえば、データの別の部分に対して変換を行う動作）を実施するように命令することができる。
【００７６】
これらの技法の例として、データ処理サブシステム１０１がデータ処理動作を行うとき、データ処理サブシステム１０１は動作を実施することが必要なデータのみ、たとえばそれに対して動作が行われるデータのみにアクセスする。他のデータ処理動作は、たとえばＨａｄｏｏｐクラスタ１１２で実施することができる。
【００７７】
いくつかの実装において、データ処理サブシステム１０１は、データを処理するためにグラフを実行する、グラフベースのデータ処理システムである。たとえばデータ処理サブシステム１０１は、データ処理動作を含む１つまたは複数のコンピュータプログラム１３４ｅを実行する、グラフオペレーティングシステム１３０ｅのインスタンスを含むことができる。
【００７８】
いくつかの実装において、グラフオペレーティングシステム１３０ｆのさらなるインスタンスは、関係データベース１２２に関連して実行可能である。たとえばグラフオペレーティングシステム１３０ｆのさらなるインスタンスは、関係データベース１２２を実行している同じコンピュータシステム（またはシステムの組み合わせ）上で実行可能であるか、またはグラフオペレーティングシステム１３０ｆのさらなるインスタンスは、関係データベース１２２を実行しているコンピュータシステム（またはシステムの組み合わせ）と通信している別のコンピュータシステム１２３上で実行可能である。いくつかの実装において、グラフオペレーティングシステム１３０ｆのさらなるインスタンスは使用されない。グラフオペレーティングシステム１３０ｆのこのインスタンスは任意選択であるため、図１では破線で表されている。いくつかの実装において、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄ上で実行するグラフオペレーティングシステム１３０ａ〜ｄのインスタンスは、関係データベース１２２に関連して実行しているグラフオペレーティングシステム１３０ｆのさらなるインスタンスと通信する。
【００７９】
いくつかの実装において、グラフオペレーティングシステム１３０ａ〜ｆの各インスタンスは、コンピュータプログラム１３４ａ〜ｆの対応する部分を実行する。たとえばコンピュータプログラムは実行可能コンポーネントで構成され得、グラフオペレーティングシステム１３０ａ〜ｆの各インスタンスは、コンピュータプログラムのコンポーネントのいくつかを実行することができる。グラフオペレーティングシステム１３０ａ〜ｆのインスタンスは、たとえば、コンピュータプログラムのそれらそれぞれの部分を実行し、したがってコンピュータプログラムをまとめて実行するために、互いにデータを送受信することによって互いに調整することができる。いくつかの例では、グラフオペレーティングシステム１３０ａ〜ｆの複数のインスタンスは、コンピュータプログラムの同じコンポーネントのインスタンスを実行する。たとえば、Ｈａｄｏｏｐクラスタ１１２のノード１１４ａ〜ｄ上で実行しているコンピュータプログラム１３０ａ〜ｄのインスタンスは、各々、それぞれが異なるデータ（たとえば、それぞれのノード１１４ａ〜ｄによって記憶されたデータ１１６ａ〜ｄ）に対して動作する、同じデータ処理コンポーネントのインスタンスを実行することができる。いくつかの例では、コンピュータプログラムの一部が共にデータフローグラフを構成することができ、コンピュータプログラムの一部はデータフローグラフのサブグラフ（たとえば、１つまたは複数のリンクされたコンポーネント）とすることができる。いくつかの例では、グラフオペレーティングシステム１３０ａ〜ｆのインスタンスによって実行されるコンピュータプログラムまたはコンピュータプログラムの一部は、データ処理サブシステム１０１によって受信されるか、データ処理システム１００ａの別のコンポーネントによって受信される、データベースクエリ１４０から生成される。前述の手法は、好適なソフトウェアを実行しているコンピューティングシステムを使用して実装可能である。たとえばソフトウェアは、各々が、少なくとも１つのプロセッサ、少なくとも１つのデータストレージシステム（揮発性および／または不揮発性のメモリ、ならびに／あるいはストレージ要素を含む）、少なくとも１つのユーザインターフェース（少なくとも１つの入力デバイスまたはポートを使用して入力を受信するため、および、少なくとも１つの出力デバイスまたはポートを使用して出力を提供するため）を含む、１つまたは複数のプログラミングされたまたはプログラミング可能なコンピューティングシステム（分散型、クライアント／サーバ、またはグリッドなどの、様々なアーキテクチャであり得る）上で実行する、１つまたは複数のコンピュータプログラムに手順を含めることができる。ソフトウェアは、たとえばデータフローグラフの設計、構成、および実行に関するサービスを提供する、より大きなプログラムの１つまたは複数のモジュールを含むことができる。プログラムのモジュール（たとえば、データフローグラフの要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造または他の組織的データとして実装可能である。
【００８０】
ソフトウェアは、ＣＤ−ＲＯＭまたは他のコンピュータ読み取り可能媒体（たとえば汎用または特定用途向けのコンピューティングシステムまたはデバイスによって読み取り可能）などの、有形の持続性媒体上に提供すること、または、それが実行されるコンピューティングシステムの有形の持続性媒体へネットワークの通信媒体を介して送達する（たとえば伝搬信号内に符号化する）ことができる。処理の一部またはすべては、特定用途向けコンピュータ上で、あるいは、コプロセッサ、フィールドプログラマブルゲートアレイ（FPGA）、または専用の特定用途向け集積回路（ASIC）などの、特定用途向けハードウェアを使用して、行うことができる。処理は、ソフトウェアによって指定された計算の異なる部分が異なるコンピューティング要素によって行われる分散様式で実装することができる。こうした各コンピュータプログラムは、好ましくは、本明細書で説明する手順を行うために、ストレージデバイスがコンピュータシステムによって読み取られたときに、コンピュータを構成および動作するために、汎用または特定用途向けプログラマブルコンピュータによって読み取り可能なストレージデバイス（たとえば、ソリッドステートメモリまたは媒体、あるいは磁気または光媒体などの、持続性ストレージデバイス）上に記憶されるか、またはダウンロードされる。本発明のシステムは、コンピュータプログラムで構成される有形の持続性媒体として実装されるものとみなすことも可能であり、媒体がそのように構成されることで、本明細書で説明する処理ステップのうちの１つまたは複数を行うための特有な事前に定義された様式でコンピュータを動作させる。
【００８１】
以上、本発明のいくつかの実施形態について説明してきた。ただし、前述の説明は例示的であり、以下の特許請求の範囲によって定義される本発明の範囲に限定されないことを理解されよう。したがって、他の実施形態も以下の特許請求の範囲内にある。たとえば、本発明の範囲を逸脱することなく、様々な修正が実行可能である。加えて、前述のステップのうちのいくつかは順序に依存しないものであり得るため、説明した順序とは異なる順序で行うことができる。
【００８２】
たとえば、上記の例は、Ｈａｄｏｏｐクラスタ１１２または関係データベース１２２とは別個のデータ処理システム１００を示しているが、いくつかの実装において、データ処理システム１００は実際には、たとえば、グラフオペレーティングシステム１３０ａ〜ｅのインスタンスとして、Ｈａｄｏｏｐクラスタ１１２および／または関係データベース１２２にわたって機能的に分散されることが可能である。
【００８３】
別の例として、図１〜４に示された例は、単一のＨａｄｏｏｐクラスタおよび単一の関係データベースの例を使用しているが、本明細書で説明する技法は、１つのＨａｄｏｏｐクラスタから受信したデータ、および別の離れたＨａｄｏｏｐクラスタから受信したデータに対して動作させるために使用することもできる。
【図１】
2019200819.tif 000003
【図２】
2019200819.tif 000004
【図３】
2019200819.tif 000005
【図４】
2019200819.tif 000006
【図５】
2019200819.tif 000007
【手続補正書】
【提出日】令和1年9月26日(2019.9.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
Ｈａｄｏｏｐクラスタのノードであって、データの第１の部分をＨＤＦＳデータストレージに記憶するノードで、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによって、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することであって、
前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、
前記Ｈａｄｏｏｐクラスタ外部の前記データソースと通信すること、を含む実行すること、
前記データ処理エンジンによって、前記Ｈａｄｏｏｐクラスタ外部の前記データソースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードのメモリに記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記メモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行うこと、を含む方法。
【請求項２】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１に記載の方法。
【請求項３】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記ソースからのデータフローを表すリンクに接続される、請求項１に記載の方法。
【請求項４】
前記データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装していない、請求項１に記載の方法。
【請求項５】
前記データの第２の部分は揮発性メモリに記憶される、請求項１に記載の方法。
【請求項６】
データベースクエリを受信することを含み、前記データベースクエリは前記Ｈａｄｏｏｐクラスタを含む少なくとも１つのデータソースから受信されたデータに対して行われるべき少なくとも１つの動作を含み、
前記データフローグラフは前記データベースクエリに対応する動作を表すコンポーネントを含み、前記データフローグラフは、前記少なくとも１つのデータソースを表す少なくとも１つのコンポーネントと、少なくとも１つのデータソースから受信されたデータに対して行われるべき前記動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む、
請求項１に記載の方法。
【請求項７】
前記データの第２の部分は前記データの第１の部分の特徴に基づいて選択された、請求項１に記載の方法。
【請求項８】
前記データの第２の部分は関係データベースの行のサブセットを含み、前記データの第２の部分は前記関係データベースの列のサブセットを含む、請求項１に記載の方法。
【請求項９】
前記データの第２の部分は、前記外部データソースから前記Ｈａｄｏｏｐクラスタの第２のノードで受信されたデータの第３の部分とは別個である、請求項１に記載の方法。
【請求項１０】
前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって実行される前記データフローグラフの少なくとも一部のインスタンスと通信することを含む、請求項１に記載の方法。
【請求項１１】
前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって前記データフローグラフの少なくとも一部を実行することを含む、請求項１に記載の方法。
【請求項１２】
データの第１の部分をＨＤＦＳデータストレージに記憶するＨａｄｏｏｐクラスタのノードに、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによって、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することであって、
前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、
前記Ｈａｄｏｏｐクラスタ外部の前記データソースと通信すること、を含む実行すること、
前記データ処理エンジンによって、前記Ｈａｄｏｏｐクラスタ外部の前記データソースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードのメモリに記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記メモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行うこと、を含む動作を実施させるための命令を含む、コンピュータ可読ストレージデバイス。
【請求項１３】
データの第１の部分をＨＤＦＳストレージに記憶する、Ｈａｄｏｏｐクラスタのノードであって、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによって、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することであって、
前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、
前記Ｈａｄｏｏｐクラスタ外部の前記データソースと通信すること、を含む実行すること、
前記データ処理エンジンによって、前記Ｈａｄｏｏｐクラスタ外部の前記データソースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードのメモリに記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記メモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行うこと、
を含む動作を実施するように構成されたコンピュータ処理デバイスを含む、
Ｈａｄｏｏｐクラスタのノード。
【請求項１４】
データの第１の部分をＨＤＦＳストレージに記憶する、Ｈａｄｏｏｐクラスタのノードであって、
前記Ｈａｄｏｏｐクラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行する手段と、
前記データ処理エンジンによって、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを受信する手段と、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行する手段であって、
前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、
前記Ｈａｄｏｏｐクラスタ外部の前記データソースと通信すること、を含む実行する手段と、
前記データ処理エンジンによって、前記Ｈａｄｏｏｐクラスタ外部の前記データソースからデータの第２の部分を受信する手段と、
前記データの第２の部分を前記ノードのメモリに記憶する手段と、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記メモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行う手段と、
を含む、Ｈａｄｏｏｐクラスタのノード。
【請求項１５】
ノードのクラスタのノードで、前記ノードはデータの第１の部分を記憶し、前記ノードのクラスタと共に１つまたは複数のデータ処理動作を実行するように構成され、前記クラスタは前記ノード全体からのデータの集合を記憶し、前記ノードは前記データの集合に対して並列に動作するように構成され、前記データの集合は複数の部分に分割され、各部分に対して前記クラスタのそれぞれのノードが動作し、
前記クラスタ外部のデータソースからデータを受信することが可能なデータ処理エンジンの第１のインスタンスを実行すること、
前記データ処理エンジンによって、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを受信すること、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することであって、
前記クラスタのデータにアクセスすること、
前記クラスタ外部の前記データソースと通信すること、を含む実行すること、
前記データ処理エンジンによって、前記クラスタ外部の前記データソースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードのランダムアクセスメモリに記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記ランダムアクセスメモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行うこと、
を含む、方法。
【請求項１６】
Ｈａｄｏｏｐクラスタのノードのデータ処理エンジンで、前記データ処理エンジンによって実行されるデータフローグラフによって識別されたデータ処理動作を行うことを含む方法であって、前記データフローグラフは、１つまたは複数の実行可能コンポーネントと、前記データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含み、前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することは、前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、および、前記Ｈａｄｏｏｐクラスタ外部の前記データソースと通信すること、を含み、前記データ処理動作は、前記ノードのＨＤＦＳデータストレージに記憶されたデータの少なくとも第１の部分、および前記Ｈａｄｏｏｐクラスタ外部の前記データソースから受信されたデータの少なくとも第２の部分を使用して行われる、方法。
【請求項１７】
Ｈａｄｏｏｐクラスタおよび関係データベースを含むデータソースを指定するＳＱＬクエリを受信すること、
前記ＳＱＬクエリに対応する、１つまたは複数の実行可能コンポーネントと、データ処理動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含むデータフローグラフを生成すること、
前記データ処理エンジンの前記第１のインスタンスによって前記実行可能コンポーネントの少なくともいくつかを実行することであって、
前記Ｈａｄｏｏｐクラスタのデータにアクセスすること、
前記関係データベースと通信すること、を含む実行すること、
前記データ処理エンジンによって、前記関係データベースからデータの第２の部分を受信すること、
前記データの第２の部分を前記ノードのメモリに記憶すること、ならびに、
前記データ処理エンジンによって、少なくとも前記データの第１の部分および前記ノードの前記メモリに記憶された前記データの第２の部分を使用する前記データ処理動作を行うこと、
を含む、方法。
【請求項１８】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項１９】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記外部データソースからのデータフローを表すリンクに接続される、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２０】
前記データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装していない、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２１】
前記データの第２の部分は揮発性メモリに記憶される、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２２】
前記動作は、
データベースクエリを受信することを含み、前記データベースクエリは前記Ｈａｄｏｏｐクラスタを含む少なくとも１つのデータソースから受信されたデータに対して行われるべき少なくとも１つの動作を含み、
前記データフローグラフは前記データベースクエリに対応する動作を表すコンポーネントを含み、前記データフローグラフは、前記少なくとも１つのデータソースを表す少なくとも１つのコンポーネントと、少なくとも１つのデータソースから受信されたデータに対して行われるべき前記動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む、
請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２３】
前記データの第２の部分は前記データの第１の部分の特徴に基づいて選択された、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２４】
前記データの第２の部分は関係データベースの行のサブセットを含み、前記データの第２の部分は前記関係データベースの列のサブセットを含む、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２５】
前記データの第２の部分は、前記外部データソースから前記Ｈａｄｏｏｐクラスタの第２のノードで受信されたデータの第３の部分とは別個である、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２６】
前記動作は、前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって実行される前記データフローグラフの少なくとも一部のインスタンスと通信することを含む、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２７】
前記動作は、前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって前記データフローグラフの少なくとも一部を実行することを含む、請求項１２に記載の持続性コンピュータ可読ストレージデバイス。
【請求項２８】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１３に記載のノード。
【請求項２９】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記外部データソースからのデータフローを表すリンクに接続される、請求項１３に記載のノード。
【請求項３０】
前記データ処理エンジンはＭａｐＲｅｄｕｃｅプログラミングモデルを実装していない、請求項１３に記載のノード。
【請求項３１】
前記データの第２の部分は揮発性メモリに記憶される、請求項１３に記載のノード。
【請求項３２】
前記動作は、
データベースクエリを受信することを含み、前記データベースクエリは前記Ｈａｄｏｏｐクラスタを含む少なくとも１つのデータソースから受信されたデータに対して行われるべき少なくとも１つの動作を含み、
前記データフローグラフは前記データベースクエリに対応する動作を表すコンポーネントを含み、前記データフローグラフは、前記少なくとも１つのデータソースを表す少なくとも１つのコンポーネントと、少なくとも１つのデータソースから受信されたデータに対して行われるべき前記動作に関連付けられた少なくとも１つのデータフローを表す少なくとも１つのリンクとを含む、
請求項１３に記載のノード。
【請求項３３】
前記データの第２の部分は前記データの第１の部分の特徴に基づいて選択された、請求項１３に記載のノード。
【請求項３４】
前記データの第２の部分は関係データベースの行のサブセットを含み、前記データの第２の部分は前記関係データベースの列のサブセットを含む、請求項１３に記載のノード。
【請求項３５】
前記データの第２の部分は、前記外部データソースから前記Ｈａｄｏｏｐクラスタの第２のノードで受信されたデータの第３の部分とは別個である、請求項１３に記載のノード。
【請求項３６】
前記動作は、前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって実行される前記データフローグラフの少なくとも一部のインスタンスと通信することを含む、請求項１３に記載のノード。
【請求項３７】
前記動作は、前記Ｈａｄｏｏｐクラスタの外側の前記データ処理エンジンの第２のインスタンスによって前記データフローグラフの少なくとも一部を実行することを含む、請求項１３に記載のノード。
【請求項３８】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１５に記載の方法。
【請求項３９】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記外部データソースからのデータフローを表すリンクに接続される、請求項１５に記載の方法。
【請求項４０】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、関係データベースシステムに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１６に記載の方法。
【請求項４１】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記データの第２の部分の前記外部データソースからのデータフローを表すリンクに接続される、請求項１６に記載の方法。
【請求項４２】
前記Ｈａｄｏｏｐクラスタは各々が前記データ処理エンジンのインスタンスを実行するノードを含み、前記データ処理エンジンの前記インスタンスは、ａ）前記データの第１の部分を含むデータの第１の本体であって、前記Ｈａｄｏｏｐクラスタの他のノードによって処理されるデータの他の部分も含む、データの第１の本体上、および、ｂ）前記データの第２の部分を含むデータの第２の本体であって、前記関係データベースに固有の形式で記憶され、前記Ｈａｄｏｏｐクラスタの前記ノードの揮発性メモリに各々が記憶可能な部分に分割される、データの第２の本体上で、共に並列でデータ処理動作を実行するために、同時に動く、請求項１７に記載の方法。
【請求項４３】
前記データフローグラフの少なくとも１つのコンポーネントは前記Ｈａｄｏｏｐクラスタからのデータフローを表すリンクに接続され、前記少なくとも１つのコンポーネントは前記関係データベースからのデータフローを表すリンクに接続される、請求項１７に記載の方法。
【外国語明細書】
2019200819000001.pdf