IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ライブランプ インコーポレーテッドの特許一覧

特許7717795フォルト・トレラントなビッグ・データ処理
<>
  • 特許-フォルト・トレラントなビッグ・データ処理 図1
  • 特許-フォルト・トレラントなビッグ・データ処理 図2
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-07-25
(45)【発行日】2025-08-04
(54)【発明の名称】フォルト・トレラントなビッグ・データ処理
(51)【国際特許分類】
   G06F 9/50 20060101AFI20250728BHJP
   G06F 11/14 20060101ALI20250728BHJP
【FI】
G06F9/50 150E
G06F11/14 612
【請求項の数】 9
(21)【出願番号】P 2023512342
(86)(22)【出願日】2021-08-02
(65)【公表番号】
(43)【公表日】2023-09-13
(86)【国際出願番号】 US2021044177
(87)【国際公開番号】W WO2022039917
(87)【国際公開日】2022-02-24
【審査請求日】2024-05-13
(31)【優先権主張番号】63/068,641
(32)【優先日】2020-08-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】519161872
【氏名又は名称】ライブランプ インコーポレーテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】ジマーマン、アダム
(72)【発明者】
【氏名】マルパリー、パヴァン
(72)【発明者】
【氏名】ダンカン、ジョセフ、シャノン
【審査官】真木 健彦
(56)【参考文献】
【文献】特開2012-160013(JP,A)
【文献】特開2019-204433(JP,A)
【文献】特開2010-092222(JP,A)
【文献】特開2014-123365(JP,A)
【文献】特表2013-541057(JP,A)
【文献】国際公開第2015/037205(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
G06F 11/14
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
分散並行コンピューティング環境において大きなデータ・セットを処理するための方法であって、
ンピューティング・クラスタで並行して動作する複数のマッパーあって、各マッパーがキー値のペアを生み出すために入力データ・セットのサブセットにフィルタリング及びソーティングすることを備えるマップ関数を実施するように構成された、複数のマッパーで、初期のマップされたデータ・セットを生み出すために、前記入力データ・セットの各サブセットに対して並行してマップ関数を実行するステップと、
特別なキーに属する全てのデータが前記分散並行コンピューティング環境における共通のワーカー・ノードに配置されるように前記キー値のペアに基づいて前記初期のマップされたデータ・セットを再分配することによって、シャッフルされたデータ・セットを生み出すために、前記初期のマップされたデータ・セットに対してシャッフル・フェーズを実行するステップと、
前記コンピューティング・クラスタで並行して動作する複数のリデューサーであって、各リデューサーが前記キー値のペアを最終キー値のペア・セットに変換するために前記シャッフルされたデータ・セットのキー値のペアに集計を適用するように構成された、複数のリデューサーで、前記最終キー値ペア・セットを備えるリデュースされたデータ・セットを生み出すために、前記シャッフルされたデータ・セットに対してリデュース関数を各リデューサーにおいて並行して実行するステップと、
複数の圧縮されたファイルを生み出すために、非ブロック圧縮アルゴリズムを使用して、前記リデュースされたデータ・セットを圧縮するステップと、
並行して複数の部分的な結果を生み出すために、前記複数の圧縮されたファイルのそれぞれを、単一のマップ・オンリー・リデューサー内で別々のマップ・オンリー・タスクに割り当てるステップと、
最終結果セットを生み出すために、前記複数の部分的な結果のそれぞれを集約するステップと
前記マップ・オンリー・タスクの1つに障害を検出することに応じて、すべてのマップ関数及びリデュース関数を再稼働することなく前記障害が生じたマップ・オンリー・タスクのみを再稼働して、それにより前記分散コンピューティング環境のフォルト・トレラントを改善するステップと
を含む方法。
【請求項2】
前記リデューサーが、前記シャッフル・フェーズから前記シャッフルされたデータ・セットを読み出し、前記マッパーが、前記シャッフル・フェーズに前記初期のマップされたデータ・セットを書き込む、請求項1に記載の方法。
【請求項3】
前記リデュース関数を実行するステップが、恒等関数を適用するステップを含む、請求項1に記載の方法。
【請求項4】
前記圧縮されたファイルのそれぞれがその全体において、唯一のマップ・オンリー・リデューサーに割り当てられる、請求項1に記載の方法。
【請求項5】
前記最終結果を生み出すために、前記部分的な結果のそれぞれを集約するステップに先立って、シャッフルを実施するステップを除く、請求項1に記載の方法。
【請求項6】
a.少なくとも1つのプロセッサを備える少なくとも1つのコンピューティング・クラスタと、
b.前記少なくとも1つのプロセッサに結合された少なくとも1つの不揮発性メモリとを備える、分散並行コンピューティング環境であって、
前記少なくとも1つの不揮発性メモリが、前記プロセッサによって実行される場合に、
並行して動作する複数のマッパーのそれぞれであって、各マッパーがキー値のペアを生み出すために入力データのサブセットにフィルタリング及びソーティングすることを備えるマップ関数を実施するように構成された、それぞれのマッパーで、初期のマップされたデータ・セットを生み出すために、前記入力データ・セットの各サブセットに対して並行してマップ関数を実行するステップと、
特別なキーに属する全てのデータが前記分散並行コンピューティング環境における共通のワーカー・ノードに配置されるように前記キー値のペアに基づいて前記初期のマップされたデータ・セットを再分配することによって、シャッフルされたデータ・セットを生み出すために、前記初期のマップされたデータ・セットに対してシャッフル・フェーズを実行するステップと、
並行して動作する複数のリデューサーであって、各リデューサーが前記キー値のペアを最終キー値のペア・セットに変換するために前記シャッフルされたデータ・セットのキー値のペアに集計を適用するように構成された、複数のリデューサーで、前記最終キー値ペア・セットを備える複数のマップ・ノードで複数のファイルを生み出すために、前記シャッフルされたデータ・セットに対してマップ関数を各リデューサーにおいて並行して実行するステップと、
複数の圧縮されたファイルを生み出すために、非ブロック圧縮アルゴリズムを使用して、前記複数のファイルのそれぞれを圧縮するステップと、
その他の別々のマップ・オンリー・ジョブのそれぞれと並行して部分的な結果を生み出すために、前記複数の圧縮されたファイルのそれぞれを、複数の別々のマップ・オンリー・ジョブの中から別々のマップ・オンリー・ジョブに割り当てるステップであって、前記複数の別々のマップ・オンリー・ジョブのそれぞれが、複数のリデュース・ノードのうちの1つに割り当てられる、ステップと、
最終結果を生み出すために、前記部分的な結果のそれぞれを集約するステップと
前記マップ・オンリー・ジョブの1つに障害を検出することに応じて、すべてのマップ関数及びリデュース関数を再稼働することなく前記障害が生じたマップ・オンリー・ジョブのみを再稼働して、それにより前記分散コンピューティング環境のフォルト・トレラントを改善するステップと
を含む動作を前記プロセッサに実施させる、前記不揮発性メモリにおいて具現化されたコンピュータ可読プログラム・コードを含む、
分散並行コンピューティング環境
【請求項7】
前記不揮発性メモリにおいて具現化された前記コンピュータ可読プログラム・コードが、前記プロセッサによって実行される場合に、恒等関数を適用することによってリデューサー関数を実行するステップを含む動作を前記プロセッサに更に実施させる、請求項に記載の分散並行コンピューティング環境
【請求項8】
前記不揮発性メモリにおいて具現化された前記コンピュータ可読プログラム・コードが、前記プロセッサによって実行される場合に、前記圧縮されたファイルのそれぞれをその全体において唯一のリデュース・ノードに割り当てるステップを含む動作を前記プロセッサに更に実施させる、請求項に記載の分散並行コンピューティング環境
【請求項9】
前記不揮発性メモリにおいて具現化された前記コンピュータ可読プログラム・コードが、前記プロセッサによって実行される場合に、前記最終結果を生み出すために、前記部分的な結果のそれぞれを集約するステップに先立って、シャッフルを実施するステップを除く動作を前記プロセッサに更に実施させる、請求項に記載の分散並行コンピューティング環境
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2020年8月21日に出願された米国仮特許出願第63/068,641号の優先権を主張するものである。そのような出願は、全文が本明細書に記載されているかのように参照により組み込まれる。
【背景技術】
【0002】
MapReduceシステムは、コンピューティング・クラスタ上で非常に大きなデータ(すなわち、「ビッグ・データ」)セットに実施されることになる並列化処理タスクのためのフレームワークを提供している。MapReduceフレームワークは、カスタマイズ可能なマップ関数及びリデュース関数をそれぞれ実行するマッパー及びリデューサーとしての機能を果たすための処理リソース(プロセッサ又はクラウド環境におけるプロセッサ・クラスタ)を割り当てる。マッパーは、マップ関数に従って入力データを処理するように並行して動作し、リデューサーは、リデュース関数に従ってマッパー出力を処理するように並行して動作して、MapReduceプログラムから出力データを生み出す。
【0003】
マップ関数は、フィルタリング及びソーティングを実施して、それによってキーと値のペアを生み出す。シャッフル・ステップは、1つのキーに属するすべてのデータが、リデュース関数について分散コンピューティング・クラスタにおける同じワーカー・ノードに配置されるように、キーに基づいてデータを再分配する。リデュース関数はその時、キーと値のペアに適用される集計手順であり、そのキーと値のペアのセットを、最終的なキーと値のペアのセットに変換する。MapReduceフレームワークは、並行して稼働する様々なタスクを組織化して、システムの様々な部分間でのデータ転送を管理する。MapReduceフレームワークは、削減プロセスの多数のインスタンスを稼働させる必要があるという意味においては非効率であるものの、その高度に並列化された構造が、従来通り設計されたフレームワーク上で処理するには単純に大き過ぎるデータ・セットへの操作を可能にすると見られてよい。このようにして、このフレームワークは、個々のプロセッサ上の計算効率を増加した並列化と引き替えにし、それにより多くのビッグ・データ・アプリケーションのための改善された合計スループットに導く。
【0004】
例証の目的のために与えられるあえて単純化した実例において、MapReduceプログラムは、ドキュメントのセットに発生する各ワードの出現の数をカウントすることができる。マップ関数は、それぞれの一意のワードをキーとして割り当て、1つ又は複数のドキュメントの一部(すなわち、サブセット)における各ワードの各出現を、ドキュメントのサブセットの中でカウントする。カウントは次いで、それぞれのキーと値のペアにおける値になる。それぞれのマッパーがドキュメント・セットのサブセットの中でワードの出現をカウントするように、入力データ・セットはスプリットに分けられ、マッパーは、分散方式で、データ・セット全体においてワードの出現をカウントするように並行して動作する。マップ関数をデータ・セットの特定のサブセットにそれぞれが適用する十分なプロセッサ又はプロセッサ・クラスタが存在するのであれば、テラバイト又はペタバイトのデータでさえ、この方式で処理され得ると理解されてよい。シャッフル段階は、キーと値のペアをマッパーからリデューサーへと送り出し、それぞれのリデューサーが、キーの特定のセット(すなわち、入力ドキュメント・セットにおいて発生した一意のワードの合計セットからのワードの特定のサブセット)を担う。リデューサーは、分散方式で、データ・セットにおけるすべてのワードの合計カウントを計算するように並行して動作する。リデュース関数は、特定のキーについてマッパーのすべてから受信した値を総計し、その総計を、入力ドキュメント・セットにおけるその特定のワードの出現の合計カウントとして出力する。キーによって体系づけられた、リデューサーのすべてからの出力データは、入力データ・セットにおけるそれぞれの一意のワードの出現の合計カウントをこのようにして収容する。
【0005】
通例のMapReduceフレームワークは、なんらかの最小レベルのフォルト・トレランスを含んでいる。例えば、マップ又はリデュースのワーカー・ノードに障害が起きた場合、入力データがなおも動作に利用可能である限り、ワークはリスケジュールされてよい。しかしながら、従来のMapReduceプロセスにおいて、単一のリデュース・ノードでの障害は、回復するために、すべてのマップ・ノードが再稼働され、再シャッフルされる必要があることを通常意味することになる。これらのビッグ・データ・セットを通常処理する非常に大きなクラウド・ベースのシステムを使用する莫大な費用を考えれば、このタイプの回復は、計算リソースの点で、及びそれらのリソースを利用しているパーティへの金銭的コストの点の両方で、非常に高くつく。そのような障害の後に処理ジョブを再稼働することはまた、データ・セットが極めて大量のデータに増大すると、単純に時間制約のために実際的でないことがある。このことは、あるデータ結果は時間に影響されやすく、必要とされた時間枠内に結果が送り出されない場合には、計算の結果の価値が削減され得る、又は完全に消失さえし得るという事実の結果である。これらは、フレームワーク内で処理するために必要とされる非常に大きな数のノードのために、実行中にまさにフォルトを最も体験しやすいデータ・セットである。したがって、これらの問題を回避するために、改善されたフォルト・トレランスを備えたMapReduceフレームワークにおいて極めて大きなデータ・セットを処理するためのシステム及び方法を開発することが望ましい。
【0006】
この技術背景の項において言及されたいかなる参照も、本発明に対する先行技術であることを認めるものではない。
【発明の概要】
【課題を解決するための手段】
【0007】
本発明は、MapReduceフレームワーク内で、極めて大きなデータ・セット(すなわち、ビッグ・データ・アプリケーション)を処理するコンピューティング・システムのフォルト・トレランスを改善するためのシステム及び方法を対象とする。一定の実装において、システムは、結果をシャッフル・プロセス及びリデュース・プロセスに出力するカスタム・マッパー・スクリプトを用いる。リデューサーは、その結果を、非ブロック圧縮アルゴリズムを使用して圧縮される多数のファイル(或いは、フラグメント又はパートとして知られる)に書き込む。結果として生じるファイルは次いで、単一のファイルの結果を単一の出力に集約及びリデュースするマップ・オンリー・リデュース・ジョブによって処理され、これがジョブの最終出力である。
【0008】
これらの実装においては、ファイルが多数のマッパーにわたって分割されるのを防ぐために、非ブロック圧縮が用いられる。これにより、ファイル全体が次のフェーズにおいて同じマッパーに送信されることが可能になる。各マッパーで扱うためのファイル全体(リデュース・ノードによって実施される)を有することによって、最終出力を生み出すためのデータを連結する前にシャッフルする必要がないので、シャッフル・ステップは完全にスキップされてもよい。このことは、これらの動作のためのMapReduceフレームワークの使用において、時間、及びひいては金銭を節約する。加えて、シャッフル・ステップが実施されないという事実は、単一のマッパーに障害が起きた場合に、それぞれのマップ・ノードが再稼働されるのを必要とすることなくジョブが回復することができることを意味し、したがって、全体的なシステムのフォルト・トレランスを大幅に改善する。
【0009】
これらの一定の実装によるシステム及び方法は、ビッグ・データ処理における在来型の考え方とは相容れないことが留意されてよい。通常の(例えば、Apache Software Foundationによって提供されるApache Hadoop(登録商標)環境を使用して実装され得るような)ビッグ・データ処理クラスタは、上の背景技術で説明されたように、従来のMapReduce機能性を使用して動作する。在来型の且つ一般的に推奨されるデータ処理の方法とは異なる、実際にはある意味でまさに反対のやり方で進行することによって、本発明は、極めて大きなデータ・セットを処理することにおいて、より高い安定性及び信頼性(すなわち、より大きなフォルト・トレランス)をもたらす。
【0010】
本発明のこれらの、並びに他の特徴、目的、及び利点は、図面及び添付の特許請求の範囲と併せて以下の好ましい実施例の詳細な説明を考察することからよりよく理解されるであろう。
【図面の簡単な説明】
【0011】
図1】本発明の実装についてのプロセスのフロー図である。
図2】本発明の実装についてのアーキテクチャ・フレームワークの図である。
【発明を実施するための形態】
【0012】
本発明が更に詳細に説明される前に、本発明の範囲は特許請求の範囲によってのみ限定されることになるので、本発明は説明される特定の実施例に限定されないこと、且つ特定の実施例を説明する際に使用される用語はそれらの特定の実施例を説明する目的のためのみであって限定するように意図されていないことが理解されるべきである。
【0013】
本発明の実装によるプロセスが図1を参照して説明されてよい。処理は、カスタム・マッパー・スクリプト10で始まる。このスクリプトは、MapReduceフレームワークにおける第1のリデュース関数12(図1において「純粋なリデュース」12関数として示されている)を駆動するために使用される。リデューサーは、その結果を、非ブロック圧縮されたフラグメント・ストレージ14で、多数のファイル(ファイル・フラグメント又はファイル・パートともまた呼ばれてよい)に書き込む。この第1のフェーズにおいて、リデューサーは、単純に恒等関数、すなわち、f(x)=xである。これらのファイルのそれぞれは次いで、非ブロック圧縮アルゴリズムを使用して圧縮される。本圧縮アルゴリズムは、ファイルが次のフェーズにおいて多くのマッパーにわたって分割できないことを、むしろ、第1のマッパー関数及びリデューサー関数から生じたファイル(又はフラグメント若しくはパート)のそれぞれが次のフェーズにおいて一緒にとどまることを保証するための、非ブロック圧縮である。第1のリデュース関数のそれぞれについての出力ファイル全体のこの使用は、次のフェーズにおけるリデュース動作の「シミュレーション」を考慮する。
【0014】
次のフェーズにおいて、結果として生じるファイルは、1つ又は複数のマップ・オンリー・リデュース・ジョブによって処理される。図1の実例において、3つのそのようなタスク、すなわち、マップ・オンリー・リデューサーA、マップ・オンリー・リデューサーB、及びマップ・オンリー・リデューサーCが存在し、これらは、参照番号16、18、及び20によってそれぞれ参照される。マップ・オンリー・リデューサーA(16)、マップ・オンリー・リデューサーB(18)、及びマップ・オンリー・リデューサーC(20)はすべて、同じマップ・オンリー・リデューサー・ジョブの下で稼働するが、これらはそのクラスタの中で分離され、パーティション分けされたロジカルなタスクであって、各タスクは、1つのみのパート/フラグメント・ファイルを引き受ける。明快にするために図1には3つのジョブが示されているが、本発明は、任意の数のそのようなジョブに等しく適用されることが理解されるであろう。このプロセスは、単一のファイルの結果を、より少ない行のデータで単一の出力に集約及びリデュースする。マップ・オンリー・リデュース・プロセスは、計算クラスタ環境において多数のカスタム・マップ・オンリー・リデューサーにわたって分割されるが、ファイルは分割されず、それぞれのファイルは、特定の単一のリデューサー・ノードに向けられる。最終結果はその時、単純にマップ・オンリー・リデューサー・プロセスのそれぞれの出力の集約である。図1に示されるように、マップ・オンリー・リデューサーAは、Out Aにマップし、マップ・オンリー・リデューサーBは、Out Bにマップし、マップ・オンリー・リデューサーCは、Out Cにマップする。図1において、Out A、Out B、及びOut Cは、参照番号22、24、及び26によってそれぞれ参照される。再度、この実例では3つの出力が存在しているが、本発明は、任意の数の出力に等しく適用されることが理解されてよい。
【0015】
説明したばかりのこのプロセスは、リデューサー・ノードのロジックを取っており、それを、MapReduceフレームワークにおけるマップ・ノードであるかのように似ているやり方で、マップ・オンリー・ジョブとして代わりに稼働していると理解されてよい。結果として、プロセスの最後でデータを連結するために、シャッフルは必要とされない。出力のOut A22、Out B24、及びOut C26は、単純に直接組み合わせられてよい。これは、著しい量の時間及び計算リソースを節約する。加えて、これは、単一のマッパー動作に障害が起きた場合、再稼働されなければならないのはそのマッパー動作だけなので、ジョブが回復することを可能にする。例えば、図1の実例において、マップ・オンリー・リデューサーB18に障害が起きた場合、そのマップ・オンリー・リデュース動作のみが再稼働される必要があり、一方で他の出力のOut A22及びOut C26は有効なままである。障害及び回復の後にOut B24を再作成するためにマップ・オンリー・リデューサーBが再稼働されると、先に触れたように、出力は組み合わせられてよい。
【0016】
本明細書で説明され図1に示されたプロセスを使用すると、プロセスは大きな数のキーによって集約及びグループ分けすることができるので、極めて大きなデータ・セットが、より効率的に処理されてよい。マップ・オンリー・リデューサー・フェーズの間に単一のノードが障害を体験した場合、単一のノードは、それ以前に至ったすべてが再稼働されるのを強制する(すなわち、それぞれのマップ・オンリー・リデューサーが再稼働するのを強制する)ことなく、プロセスのその部分を回復して再起動することができる。従来のMapReduceシステムにおいては、障害が起きた単一のリデューサー・ノード上で回復するために、すべてのマッパーが、再稼働され、シャッフルされる必要があることになる。データ・セットのサイズが極めて大きくなるとき、障害の可能性はますます高くなる。この理由により、本明細書で説明されるプロセスは、プロセスの合計サイズのために障害の可能性があまりにも大きくなり、何回かの試行後でさえ完了できそうにもない従来のMapReduceフレームワーク・クラスタ・システムにおいて、いくつかの極めて大きなデータ・セットが稼働するのを実際的にする。在来型の方法を使用すると、プロセスは、あまりにも障害を被りやすくなるために、ビジネスに妥当な計算上実行可能な時間枠内に完了しないことがある。本発明者らは、このアプローチが、150テラバイト又はそれ以上のデータのシャッフルがタイムリー且つ一貫した方式で実施されるのを可能にすることを見出し、本発明者らが見出したことは、従来のMapReduce環境においては可能ではない。
【0017】
1つの特定の実例において、データが15000ファイルにわたって分割されるときのケースを考えてみる。このようにして使用されている15000個のノードが存在し、従来のプロセスでは、破損していないデータを生み出すそれらのノードのうちのいずれか1つの障害は、再起動を強制することになり、他の14999個のノードの1つ残らずすべてが、再実行を必要とすることになる。本明細書で説明される本発明の実装においては、障害が発生した1つのノードのみが再稼働を必要とし、このことは、99%を超えるコスト及び損失時間の削減を意味する。これらの極めて大きな使用ケースにおけるシステムのフォルト・トレランスは、それによって劇的に増加し、データ・セットのサイズが増加するにつれて、そのリターンも増加する。本発明者らは、商用のMapReduceクラスタ上で極めて大きなデータ・セット(150テラバイト又はそれ以上)に対して実施されるジョブが、個々のノードの障害後の再試行が多過ぎるために、しばしば完全に失敗することになるのを見出した。これらのケースでは、本明細書で説明された本発明の実装を使用することによって、コスト削減が50又は60%ほど高くなってよい。
【0018】
図2は、本発明が実装されてよいMapReduceシステムの一般的なアーキテクチャ図を提供する。これは、本明細書で説明される実装のために必要とされる最小ハードウェア・トポロジである。図1からの、カスタム・マッパー10、純粋なリデュース12、並びにカスタム・マップ・オンリー・リデューサー16、18、及び20関数は、図2のHadoop(登録商標)クラスタのコンテキスト内で発生する。Apache Hadoop(登録商標)は、極めて大きなデータ・セットを処理するためによく使用されているソフトウェア・フレームワークであり、とりわけ分散処理のために設計されている。図1のOut A、B、及びC(参照番号22、24、及び26)は、図2の分散ストレージ36のコンテキスト内に存続する。一般的に言えば、Hadoop(登録商標)クラスタは、マスター・サーバと、ワーカー・サーバとを最小限必要とする。このケースでは、クラスタは、マスター30と、複数のワーカー32とを、ビッグ・データ処理計算クラスタ34のフレームワーク内にすべて含む。本発明は、Hadoop(登録商標)フレームワークにおける実装には限定されず、本発明の代替実装において、他のソフトウェア・パッケージが使用されてもよい。
【0019】
図1からのカスタマー・マッパー10関数(初期のマップ・プロセス)がスケーラブルであることは、本明細書で提供される説明から明らかであろう。図2に示される最小アーキテクチャは、理論的には、小さなデータ・セットに対するプロセスを完了するために使用されてもよい。しかしながら、大きなデータ・セットの場合、ワーカー・サーバの数は比例して増加することになり、それにより、それらのワーカーのために必要とされるハードウェア・コンポーネントの量もまた増加させることになる。150テラバイトのデータが処理されている特定の実例において、本発明者らは、52GBのメモリ及び512GBのディスク・ストレージ空間と共に、8個のCPUコアを備えたマスター・ノードを使用した。この同じ実例のために、ワーカー当たり32個のコアで、512個のワーカーが必要とされることがあり、したがって、ワーカー・サーバ用に、合計で16384個のCPUコアとなる。この実例におけるワーカーは、ワーカー・サーバ当たり120GBメモリを有することができ、合計で1200GBのストレージ空間が必要とされる。例えば、ワーカー・サーバ当たり、2×375GBのソリッド・ステート・ドライブ(SSD:solid state drive)ディスク・ストレージ、及び450GBの磁気ハード・ドライブ(HDD:hard drive)ストレージがあってよい。これは1つの特定の実例にすぎず、本明細書で説明される量は、特定のデータ・セット及び特定のデータ・セット・サイズに対応するように、必要に応じて引き下げられても、引き上げられてもよい。
【0020】
GoogleからのGoogle Cloud Platform(商標)(GCP)アーキテクチャを使用する1つの特定の実例において、図2に示されたApache Hadoop(登録商標)クラスタは、Google Cloud Dataproc Hadoop(登録商標)クラスタ上で実装されてもよい。Google Cloud Dataprocは、クラウド・コンピューティング・ユーザが、クラスタ・コンピューティング環境において、バッチ処理、クエリ、ストリーミング、及びマシン学習のための多様なデータ・ツールを活用するのを可能にする、管理されたHadoop(登録商標)サービスである。このサービスは、カスタム仮想マシンのビルディング、パフォーマンス要件を満たすためのオートスケーリングを提供し、不必要なリソースの電源を自動的に落とす。更にこのケースでは、分散ストレージ36が、Google Cloudストレージとして実装されてもよい。
【0021】
単純なワード・カウント実例の問題を使用して、本発明の実装のための、とりわけ、マッパー、純粋なリデューサー、及びマップ・オンリー・リデューサーのための3つのスクリプトが以下に与えられる。
【数1】




【0022】
上で説明された実装は、そのような実装において本発明を実装するために使用される特定のハードウェア及びソフトウェア・コンポーネントを提供しているが、本発明は、そのように限定はされない。Hadoop(登録商標)は、大量のデータを処理するために使用されているが、代替実装における本発明は、他のソフトウェア・フレームワークに適応されてもよい。Google Cloud Platformは、Hadoop(登録商標)クラスタを作成するために使用されているが、データ・セットに十分大きなサイズの任意のクラスタが使用され得るので、本発明は、同じくそのように限定はされない。
【0023】
本明細書で説明されるシステム及び方法は、ハードウェアとソフトウェアの任意の組合せによって様々な実施例において実装されてよい。例えば、一実施例において、システム及び方法は、コンピュータ・システム又はコンピュータ・システムの集まりによって実装されてよく、それらのそれぞれが、プロセッサに結合されたコンピュータ可読ストレージ媒体上に記憶されたプログラム命令を実行する1つ又は複数のプロセッサを含む。プログラム命令は、本明細書で説明される機能性を実装することができる。図面に例証され、本明細書で説明されるように、様々なシステム及びディスプレイが、例示的な実装を表している。いかなる方法の順序も変更されてよく、様々な要素が追加されても、修正されても、又は省略されてもよい。
【0024】
本明細書で説明されるコンピューティング・システム又はコンピューティング・デバイスは、クラウド・コンピューティング・システム又は非クラウド・コンピューティング・システムのハードウェア部分を、本発明の様々な実装のパーツを形成するものとして実装することができる。コンピュータ・システムは、コモディティ・サーバ、パーソナル・コンピュータ・システム、デスクトップ・コンピュータ、ラップトップ若しくはノートブック・コンピュータ、メインフレーム・コンピュータ・システム、ハンドヘルド・コンピュータ、ワークステーション、ネットワーク・コンピュータ、コンシューマ・デバイス、アプリケーション・サーバ、ストレージ・デバイス、電話、モバイル電話、他のモバイル・コンピューティング・デバイス、又は一般に任意のタイプのコンピューティング・ノード、計算ノード、計算デバイス、及び/若しくはコンピューティング・デバイスを含むが、これらに限定はされない様々なタイプのデバイスのうちのいずれかであってよい。コンピューティング・システムは、入力/出力(I/O:input/output)インターフェースを介してシステム・メモリに結合された1つ又は複数のプロセッサ(そのうちのいずれかは、シングル・スレッド又はマルチ・スレッドであってよい多数の処理コアを含むことができる)を含む。コンピュータ・システムは、I/Oインターフェースに結合されたネットワーク・インターフェースを更に含むことができる。
【0025】
様々な実施例において、コンピュータ・システムは、1つのプロセッサを含むシングル・プロセッサ・システムであっても、又は多数のプロセッサを含むマルチプロセッサ・システムであってもよい。プロセッサは、コンピューティング命令を実行する能力のある任意の好適なプロセッサであってよい。例えば、様々な実施例において、プロセッサは、多様な命令セット・アーキテクチャのうちのいずれかを実装する汎用又は埋め込み型プロセッサであってよい。マルチプロセッサ・システムにおいて、プロセッサのそれぞれは、必ずしもではないが、通常は同じ命令セットを実装することができる。コンピュータ・システムはまた、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、又はインターネットなどの通信ネットワーク上で他のシステム及び/又はコンポーネントと通信するための、1つ又は複数のネットワーク通信デバイス(例えば、ネットワーク・インターフェース)を含む。例えば、コンピューティング・デバイス上で実行されるクライアント・アプリケーションは、ネットワーク・インターフェースを使用して、様々なサブ・システムにおいて実装されるように、クラウド・コンピューティング又は非クラウド・コンピューティング環境において、本明細書で説明されたシステムのコンポーネントのうちの1つ若しくは複数を実装する単一のサーバ上又はサーバのクラスタ上で実行されるサーバ・アプリケーションと通信することができる。別の実例において、コンピュータ・システム上で実行されるサーバ・アプリケーションのインスタンスは、ネットワーク・インターフェースを使用して、他のコンピュータ・システム上で実装され得るアプリケーションの他のインスタンスと通信することができる。
【0026】
コンピューティング・デバイスはまた、1つ若しくは複数の永続的なストレージ・デバイス及び/又は1つ若しくは複数のI/Oデバイスを含む。様々な実施例において、永続的なストレージ・デバイスは、ディスク・ドライブ、テープ・ドライブ、ソリッド・ステート・メモリ、他のマス・ストレージ・デバイス、又は任意の他の永続的なストレージ・デバイスに相当してよい。コンピュータ・システム(又はその上で動作する分散アプリケーション若しくはオペレーティング・システム)は、所望に応じて、命令及び/又はデータを永続的なストレージ・デバイスに記憶することができ、必要に応じて、記憶された命令及び/又はデータを取り出すことができる。例えば、いくつかの実施例において、コンピュータ・システムは、制御プレーン又は制御システムの1つ若しくは複数のノードを実装することができ、永続的なストレージは、そのサーバ・ノードにアタッチされたSSDを含むことができる。多数のコンピュータ・システムが、同じ永続的なストレージ・デバイスを共有してもよいし、又は永続的なストレージ・デバイスのプールを共有し、プールにおいてデバイスが同じ若しくは異なるストレージ技術を表してもよい。
【0027】
コンピュータ・システムは、プロセッサによってアクセス可能なコード/命令及びデータを記憶することができる1つ又は複数のシステム・メモリを含む。システム・メモリは、例えば、アクセス速度に基づいてメモリ内で情報を交換するように設計されたシステムにおいて、多数のレベルのメモリ及びメモリ・キャッシュを含むことができる。インターリーブすること、及び交換することは、仮想メモリ実装において永続的なストレージにまで拡大することができる。メモリを実装するために使用される技術は、例として、静的ランダム・アクセス・メモリ(RAM:random-access memory)、動的RAM、読み出し専用メモリ(ROM:read-only memory)、不揮発性メモリ、又はフラッシュ・タイプ・メモリを含むことができる。永続的なストレージと同様に、多数のコンピュータ・システムは、同じシステム・メモリを共有することができる、又はシステム・メモリのプールを共有することができる。システム・メモリ又はメモリは、本明細書で説明されたルーチンを実装するようにプロセッサによって実行可能なプログラム命令を収容することができる。様々な実施例において、プログラム命令は、バイナリ、アセンブリ言語、Java(登録商標)などの任意のインタープリタ型言語、C/C++などのコンパイル型言語、又はそれらの任意の組合せで符号化されてよく、ここに挙げた特定の言語は例示のみである。いくつかの実施例において、プログラム命令は、多数の別々のクライアント、サーバ・ノード、及び/又は他のコンポーネントを実装することができる。
【0028】
いくつかの実装において、プログラム命令は、UNIX(登録商標)、LINUX、Solaris(商標)、MacOS(商標)、若しくはMicrosoft Windows(登録商標)(商標)、又はiOS(商標)などのモバイル・コンピューティング・デバイス・オペレーティング・システムなどの、様々なオペレーティング・システムのいずれかであってよいオペレーティング・システム(図示せず)を実装するように実行可能な命令を含むことができる。プログラム命令のいずれか又はすべては、命令を記憶している非一時的なコンピュータ可読ストレージ媒体を含むことができるコンピュータ・プログラム製品又はソフトウェアとして提供されてよく、命令は、コンピュータ・システム(又は他の電子デバイス)をプログラムするために使用されて、様々な実装に従ってプロセスを実施することができる。非一時的なコンピュータ可読ストレージ媒体は、マシン(例えば、コンピュータ)による可読形式(例えば、ソフトウェア、処理アプリケーション)で情報を記憶するための任意のメカニズムを含むことができる。一般的に言えば、非一時的なコンピュータ・アクセス可能な媒体は、磁気又は光学媒体、例えば、I/Oインターフェースを介してコンピュータ・システムに結合されたディスク又はDVD/CD-ROMなどのコンピュータ可読ストレージ媒体又はメモリ媒体を含むことができる。非一時的なコンピュータ可読ストレージ媒体はまた、コンピュータ・システムのいくつかの実施例に含まれてよいRAM又はROMなどの任意の揮発性又は不揮発性媒体を、システム・メモリ又は別のタイプのメモリとして含むことができる。他の実装において、プログラム命令は、ネットワーク・インターフェースを介して実装され得るようなネットワーク、及び/又はワイヤード若しくはワイヤレス・リンクなどの通信媒体を介して伝達される、光学、音響、又は他の形式の伝播信号(例えば、搬送波、赤外線信号、デジタル信号、その他)を使用して通信されてもよい。ネットワーク・インターフェースは、他のコンピュータ・システム又は任意のタイプの外付け電子デバイスを含むことができる他のデバイスと、インターフェースを取るために使用されてよい。一般に、ネットワークを通して他のデバイス上でアクセス可能なシステム・メモリ、永続的なストレージ、及び/又はリモート・ストレージは、データ・ブロック、データ・ブロックの複製、データ・ブロック及び/若しくはその状態に関連付けられたメタデータ、データベース設定情報、並びに/又は本明細書で説明されたルーチンの実装に使用可能な任意の他の情報を記憶することができる。
【0029】
一定の実装において、I/Oインターフェースは、ネットワーク・インターフェース又は他の周辺インターフェースの経由を含む、システムにおけるプロセッサ、システム・メモリ、及び任意の周辺デバイス間のI/Oトラフィックを調整することができる。いくつかの実施例において、I/Oインターフェースは、任意の必要なプロトコル、タイミング、又は他のデータ・トランスフォーメーションを実施して、1つのコンポーネント(例えば、システム・メモリ)からのデータ信号を、別のコンポーネント(例えば、プロセッサ)による使用に好適なフォーマットに変換することできる。いくつかの実施例において、I/Oインターフェースは、例えば、周辺コンポーネント相互接続(PCI:Peripheral Component Interconnect)バス標準、又はユニバーサル・シリアル・バス(USB:Universal Serial Bus)標準の変形などの様々なタイプの周辺バスを通してアタッチされたデバイスのためのサポートを含むことができる。また、いくつかの実施例において、システム・メモリへのインターフェースなどのI/Oインターフェースの機能性のいくつか又はすべては、プロセッサの中に直接組み込まれてもよい。
【0030】
ネットワーク・インターフェースは、コンピュータ・システムと、例えば、(1つ若しくは複数のストレージ・システム・サーバ・ノード、一次ノード、読み出し専用ノード、及び/又は本明細書で説明されたデータベース・システムのクライアントを実装することができる)他のコンピュータ・システムなどの、ネットワークにアタッチされた他のデバイスとの間で、データがやり取りされるのを可能にすることができる。加えて、I/Oインターフェースは、コンピュータ・システムと、様々なI/Oデバイス及び/又はリモート・ストレージとの間の通信を可能にすることができる。入力/出力デバイスは、いくつかの実施例において、1つ若しくは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、スキャニング・デバイス、音声若しくは光学認識デバイス、又は1つ若しくは複数のコンピュータ・システムによってデータを投入する、又は取り出すために好適な任意の他のデバイスを含むことができる。これらは、特定のコンピュータ・システムに直接接続してもよいし、又はクラウド・コンピューティング環境、グリッド・コンピューティング環境における多数のコンピュータ・システムに、若しくは多数のコンピュータ・システムを伴う他のシステムに広く接続してもよい。多数の入力/出力デバイスは、コンピュータ・システムと通信して存在してもよいし、コンピュータ・システムを含む分散システムの様々なノードの上に分散されてもよい。本明細書で説明されるユーザ・インターフェースは、CRTディスプレイ、LCDディスプレイ、LEDディスプレイ、及び他のディスプレイ技術を含むことができる様々なタイプのディスプレイ・スクリーンを使用してユーザに可視化されてよい。いくつかの実装において、入力は、タッチスクリーン技術を使用してディスプレイを通して受信されてよく、他の実装において、入力は、キーボード、マウス、タッチパッド、若しくは他の入力技術、又はこれらの技術の任意の組合せを通して受信されてもよい。
【0031】
いくつかの実施例において、同様の入力/出力デバイスは、コンピュータ・システムとは別々であってもよく、ネットワーク・インターフェースなどを介したワイヤード又はワイヤレス接続を通して、コンピュータ・システムを含む分散システムの1つ又は複数のノードと対話することができる。ネットワーク・インターフェースは通常、1つ又は複数のワイヤレス・ネットワーキング・プロトコル(例えば、Wi-Fi/IEEE802.11、又は別のワイヤレス・ネットワーキング標準)をサポートすることができる。ネットワーク・インターフェースは、例えば、他のタイプのイーサネット(登録商標)・ネットワークなどの、任意の好適なワイヤード又はワイヤレスの一般データ・ネットワークを介して通信をサポートすることができる。追加として、ネットワーク・インターフェースは、アナログ音声ネットワーク若しくはデジタル・ファイバ通信ネットワークなどの電気通信/電話通信ネットワークを介して、ファイバ・チャネルSANなどのストレージ・エリア・ネットワークを介して、又は任意の他の好適なタイプのネットワーク及び/若しくはプロトコルを介して、通信をサポートすることができる。
【0032】
本明細書で説明される分散システム実施例のいずれか、又はそれらのコンポーネントのいずれかは、クラウド・コンピューティング環境における1つ又は複数のネットワーク・ベースのサービスとして実装されてもよい。例えば、データベース・システムのデータベース階層内の読み書きノード及び/又は読み出し専用ノードが、本明細書で説明された分散ストレージ・システムを用いるデータベース・サービス及び/又は他のタイプのデータ・ストレージ・サービスを、ネットワーク・ベースのサービスとしてクライアントに提示することができる。いくつかの実施例において、ネットワーク・ベースのサービスは、ネットワーク上で相互動作可能なマシン・ツー・マシンの対話をサポートするように設計されたソフトウェア及び/又はハードウェア・システムによって実装されてもよい。ウェブ・サービスは、ウェブ・サービス記述言語(WSDL:Web Services Description Language)などのマシン処理可能なフォーマットで記述されたインターフェースを有することができる。他のシステムが、ネットワーク・ベースのサービスのインターフェースの記述によって規定されたやり方で、ネットワーク・ベースのサービスと対話してもよい。例えば、ネットワーク・ベースのサービスは、他のシステムが呼び出すことができる様々な動作を定義することができ、様々な動作を要求するときに他のシステムがそれに順応するように予期されてよい特定のアプリケーション・プログラミング・インターフェース(API:application programming interface)を定義することができる。
【0033】
様々な実施例において、ネットワーク・ベースのサービスは、ネットワーク・ベースのサービス要求に関連付けられたパラメータ及び/又はデータを含むメッセージの使用を通して要求されても、又は呼び出されてもよい。そのようなメッセージは、拡張可能なマークアップ言語(XML:Extensible Markup Language)などの特定のマークアップ言語に従ってフォーマットされてもよいし、及び/又はシンプル・オブジェクト・アクセス・プロトコル(SOAP:Simple Object Access Protocol)などのプロトコルを使用してカプセル化されてもよい。ネットワーク・ベースのサービス要求を実施するために、ネットワーク・ベースのサービスのクライアントは、要求を含むメッセージを組み立て、ハイパーテキスト転送プロトコル(HTTP:Hypertext Transfer Protocol)などのインターネット・ベースのアプリケーション・レイヤ転送プロトコルを使用して、ウェブ・サービスに対応するアドレス可能なエンドポイント(例えば、ユニフォーム・リソース・ロケータ(URL:Uniform Resource Locator))に、そのメッセージを伝達することができる。いくつかの実施例において、ネットワーク・ベースのサービスは、メッセージ・ベースの技法ではなく、表現可能な状態の転送(REST:Representational State Transfer)技法を使用して実装されてもよい。例えば、REST技法に従って実装されたネットワーク・ベースのサービスは、PUT、GET、又はDELETEなどのHTTP方法内に含まれるパラメータを通して呼び出されてよい。
【0034】
別段明記されない限り、本明細書で使用されるすべての技術的及び科学的用語は、本発明が属する技術分野の当業者によって通常理解されるのと同じ意味を有する。本明細書で説明されたものに類似した又は等価ないずれの方法及び材料もまた、本発明の実践又は実験に使用され得るものの、本明細書では限定された数の例示的な方法及び材料が説明されている。更に多くの修正例が本明細書における本発明の発想から逸脱することなく可能であることは、当業者には明らかであろう。
【0035】
本明細書で使用されたすべての用語は、コンテキストに一貫して最も広く考え得るやり方で解釈されるべきである。本明細書でグループ分けが使用されるとき、グループのすべての個々の部材、並びにグループの考え得るすべての組合せ及びサブ組合せは、本開示に個々に含まれるように意図される。本明細書に引用されるすべての参考文献は、本明細書の開示との矛盾が存在しない限りにおいて、参照により本明細書に組み込まれる。本明細書において範囲が使用されるとき、その範囲内のすべての点、及びその範囲内のすべてのサブ範囲は、本開示に含まれるように意図される。
【0036】
本発明が一定の好ましい、且つ代替的な実装を参照して説明されてきたが、実装は、例示のみであることが意図されており、本発明の全範囲に限定することは意図されていない。
図1
図2