(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-13
(54)【発明の名称】計算リソースの動的な割り当て
(51)【国際特許分類】
G06F 9/50 20060101AFI20240606BHJP
G06F 9/46 20060101ALI20240606BHJP
【FI】
G06F9/50 120A
G06F9/46 420A
G06F9/50 150A
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023574416
(86)(22)【出願日】2022-06-03
(85)【翻訳文提出日】2024-01-17
(86)【国際出願番号】 US2022032139
(87)【国際公開番号】W WO2022256638
(87)【国際公開日】2022-12-08
(32)【優先日】2021-06-04
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】509123208
【氏名又は名称】アビニシオ テクノロジー エルエルシー
(74)【代理人】
【識別番号】100107984
【氏名又は名称】廣田 雅紀
(74)【代理人】
【識別番号】100182305
【氏名又は名称】廣田 鉄平
(74)【代理人】
【識別番号】100096482
【氏名又は名称】東海 裕作
(74)【代理人】
【識別番号】100131093
【氏名又は名称】堀内 真
(74)【代理人】
【識別番号】100150902
【氏名又は名称】山内 正子
(74)【代理人】
【識別番号】100141391
【氏名又は名称】園元 修一
(74)【代理人】
【識別番号】100221958
【氏名又は名称】篠田 真希恵
(74)【代理人】
【識別番号】100192441
【氏名又は名称】渡辺 仁
(72)【発明者】
【氏名】シュミット ステーブン ジェイ.
(72)【発明者】
【氏名】リカルド デービッド
(72)【発明者】
【氏名】スタンフィル クレイグ ダブリュー.
(72)【発明者】
【氏名】チュ ジャッキー チューク キー
(72)【発明者】
【氏名】ビシュニアク エフライム メリウェザー
(57)【要約】
計算リソースマネージャを使用して動的に割り当てられた計算リソースを使用して、コンピューティングシステム上で分散された計算を実行するための方法が、プログラムのいくつかのプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するステップであって、プログラム部分が、データの連続的な変換を実行し、そのプログラム部分に関連する計算がコンピューティングシステムにおいて実行されることを可能にする計算リソースマネージャによって付与された計算リソースを各プログラム部分が使用する、記憶するステップと、いくつかのプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを計算リソースマネージャに要求するステップと、要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを計算リソースマネージャから受け取るステップと、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップと、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行している間に、計算リソースマネージャから追加の量の計算リソースを受け取るステップと、第2の量の計算リソースを使用して第1の部分に関連する計算を実行しながら、追加の量の計算リソースを使用してプログラムの第1の部分に関連する追加の計算を実行するステップとを含む。
【特許請求の範囲】
【請求項1】
計算リソースマネージャを使用して動的に割り当てられた計算リソースを使用して、コンピューティングシステム上で分散された計算を実行するための方法であって、
プログラムの複数のプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するステップであって、前記プログラム部分が、データの連続的な変換を実行し、前記プログラム部分が前記コンピューティングシステムにおいて実行されることを可能にする前記計算リソースマネージャによって付与された計算リソースを各プログラム部分が使用する、前記記憶するステップと、
前記複数のプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを前記計算リソースマネージャに要求するステップと、
要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを前記計算リソースマネージャから受け取るステップと、
前記第2の量の計算リソースを使用して前記プログラムの第1の部分に関連する計算を実行するステップと、
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行している間に、前記計算リソースマネージャから追加の量の計算リソースを受け取るステップと、
前記第2の量の計算リソースを使用して前記第1の部分に関連する計算を実行しながら、前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する追加の計算を実行するステップと
を含む、前記方法。
【請求項2】
前記プログラムの複数のプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報が、前記複数のプログラム部分の前記それぞれのプログラム部分に関連する1又は2以上のプログラムコンポーネントの特性を含む、請求項1に記載の方法。
【請求項3】
前記特性が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる計算リソースの量とを含む、請求項2に記載の方法。
【請求項4】
前記複数のプログラム部分のうちのプログラム部分に関連する計算リソースの量が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる前記計算リソースの量とに少なくとも部分的に基づいて決定される、請求項3に記載の方法。
【請求項5】
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、受け取られた第2の量の計算リソースに応じて前記第1のプログラム部分を複数の下位部分に区分することを含む、請求項1~4のいずれかに記載の方法。
【請求項6】
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、好ましくは、前記複数の下位部分のうちの第1の下位部分が、前記複数の下位部分のうちで、実行のために前記第2の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であるように、前記複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、前記第2の量の計算リソースを使用して前記第1の下位部分に関する計算を実行することを含む、請求項5に記載の方法。
【請求項7】
前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、前記受け取られた第2の量の計算リソース及び受け取られた追加の量の計算リソースに応じて前記第1のプログラム部分を更新された複数の下位部分に再区分することを含む、請求項5又は6に記載の方法。
【請求項8】
前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、好ましくは、前記更新された複数の下位部分のうちの第1の下位部分が、前記更新された複数の下位部分のうちで、計算を実行するために前記追加の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であるように、前記更新された複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、前記追加の量の計算リソースを使用して前記更新された複数の下位部分のうちの前記第1の下位部分に関連する計算を実行することを含む、請求項7に記載の方法。
【請求項9】
前記追加の量の計算リソースを使用して前記プログラムの前記第1のプログラム部分に関連する計算を実行するステップが、前記第2の量の計算リソースを使用して前記複数の下位部分のうちの第1の下位部分に関連する計算を実行することと、前記追加の量の計算リソースを使用して前記第1の部分のさらなる部分に関連する計算を実行することとを含む、請求項7又は8に記載の方法。
【請求項10】
前記更新された複数の下位部分のうちの第1の下位部分が、前記更新された複数の下位部分のうちの前記第1の下位部分を取得するために、前記複数の下位部分のうちのその他の1又は2以上の下位部分からの前記第1のプログラム部分の1又は2以上のプログラムコンポーネントの1又は2以上のインスタンスを前記複数の下位部分のうちの前記第1の下位部分に追加することによって形成された、前記複数の下位部分のうちの前記第1の下位部分の拡張されたバージョンである、請求項7~9のいずれかに記載の方法。
【請求項11】
前記第1のプログラム部分を複数の下位部分に区分することが、前記第1のプログラム部分に関連するプログラムコンポーネントのうちの1又は2以上の特性に応じて前記第1のプログラム部分を区分することを含む、請求項5~10のいずれかに記載の方法。
【請求項12】
前記複数のプログラム部分の前記特性が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる計算リソースの量とを含む、請求項11に記載の方法。
【請求項13】
第1のプログラムコンポーネントの第1の1又は2以上のインスタンスが、第1の下位部分に区分され、前記第1のプログラムコンポーネントの第2の1又は2以上のインスタンスが、第2の下位部分に区分される、請求項12に記載の方法。
【請求項14】
前記第1のプログラム部分の実行が完了すると、前記第2の量の計算リソース及び前記追加の量の計算リソースを放棄するステップをさらに含む、請求項1~13のいずれかに記載の方法。
【請求項15】
前記第1のプログラム部分の実行が完了すると、前記第2の量の計算リソース及び前記追加の量の計算リソースの少なくとも一部を保持するステップをさらに含む、請求項1~14のいずれかに記載の方法。
【請求項16】
保持された計算リソースの少なくとも一部を使用して、前記プログラムの第2の部分に関連する計算を実行するステップをさらに含む、請求項15に記載の方法。
【請求項17】
前記第1のプログラム部分に関連する計算の実行中に、第3の量の受け取られた計算リソースが利用不可能になる、請求項1~16のいずれかに記載の方法であって、
前記計算リソースマネージャに前記第3の量の計算リソースを要求するステップと、
前記計算リソースマネージャから前記第3の量の計算リソースを受け取るステップと、
受け取られた第3の量の計算リソースを使用して、前記第1のプログラム部分に関連する計算を実行し続けるステップとをさらに含む、前記方法。
【請求項18】
前記計算リソースマネージャが、前記コンピューティングシステムのために利用可能な計算リソースの量に関して不明瞭である、請求項1~17のいずれかに記載の方法。
【請求項19】
前記第1のプログラム部分からの出力データを記憶し、記憶された出力データを読み取り、処理することを含む、前記複数のプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップをさらに含む、請求項1~18のいずれかに記載の方法。
【請求項20】
前記第1のプログラム部分からの出力データのストリームを受け取り、処理することを含む、前記複数のプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップをさらに含む、請求項1~19のいずれかに記載の方法。
【請求項21】
計算リソースマネージャを使用して動的に割り当てられたコンピューティングシステムの計算リソースを使用して分散された計算を実行するためのシステムであって、プロセッサと、前記プロセッサによって実行されるときに請求項1~20のいずれかに記載の方法をシステムに実行させる命令を記憶するストレージ媒体とを含む、前記システム。
【請求項22】
コンピューティングシステムに請求項1~20のいずれかに記載の方法を実行させるための命令を記憶する非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、2021年6月4日に出願した米国特許仮出願第63/196,757号の利益を主張するものであり、この仮出願の内容全体は、本明細書に組み込まれる。
【0002】
この説明は、コンピューティングシステムにおけるリソースの動的な割り当てに関する。
【背景技術】
【0003】
コンピューティングシステム上で実行されるアプリケーションは、その実行のためにコンピューティングシステムの計算リソースの一部を必要とする。したがって、コンピューティングシステムは、コンピューティングシステム上で実行されるアプリケーションへのそのコンピューティングシステムのリソースの割り当てを管理しなければならない。アプリケーションに割り当てられるリソースの一部の例は、コンピューティングシステムのメモリの一部へのアクセス、ファイルデータへのアクセス、及び必要とされる処理能力へのアクセスを含む。
【0004】
分散コンピューティングシステムにおいては、(データストレージ及び処理リソースを含む)計算リソースが、データ処理アプリケーションを実行するために協働する、1又は2以上のクラスタに含まれる多数のサーバに分散される。一部の例において、分散コンピューティングシステムは、コンピューティングシステム上でのアプリケーションの実行をスケジューリングし、かつコンピューティングシステムの分散されたリソースのアプリケーションへの割り当てを管理する集中型のリソースマネージャを使用する。リソースマネージャの例は、「Hadoop YARN」及び「Kubernetes」を含む。
【発明の概要】
【課題を解決するための手段】
【0005】
一般的な態様においては、計算リソースマネージャを使用して動的に割り当てられた計算リソースを使用してコンピューティングシステム上で分散された計算を実行するための方法が、プログラムのいくつかのプログラム部分(program portion)のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するステップであって、プログラム部分が、データの連続的な変換を実行し、各プログラム部分が、そのプログラム部分に関連する計算がコンピューティングシステムにおいて実行されることを可能にする計算リソースマネージャによって付与された計算リソースを使用する、ステップと、いくつかのプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを計算リソースマネージャに要求するステップと、要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを計算リソースマネージャから受け取るステップと、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップと、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行している間に、計算リソースマネージャから追加の量の計算リソースを受け取るステップと、第2の量の計算リソースを使用して第1の部分に関連する計算を実行しながら、追加の量の計算リソースを使用してプログラムの第1の部分に関連する追加の計算を実行するステップとを含む。
【0006】
態様は、以下の特徴のうちの1又は2以上を含む場合がある。
【0007】
プログラムのいくつかのプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報は、いくつかのプログラム部分のそれぞれのプログラム部分に関連する1又は2以上のプログラムコンポーネントの特性を含んでよい。特性は、1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、1又は2以上のプログラムコンポーネントの各々に関連する計算を実行するために必要とされる計算リソースの量とを含んでよい。いくつかのプログラム部分のうちのプログラム部分に関連する計算リソースの量は、1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、1又は2以上のプログラムコンポーネントの各々に関連する計算を実行するために必要とされる計算リソースの量とに少なくとも部分的に基づいて決定されてよい。
【0008】
第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップは、受け取られた第2の量の計算リソースに応じて第1のプログラム部分をいくつかの下位部分に区分することを含んでよい。プログラムの第1の部分に関連する計算を実行するステップは、いくつかの下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、いくつかの下位部分の第1の下位部分を実行することを含んでよい。
【0009】
プログラムの一部の区分は、プログラムコンポーネントの少なくとも一部の実行の順序を維持する方法で実行され得る。プログラム部分の一部の区分は、プログラムコンポーネントの少なくとも一部の実行の順序を維持しながら、受け取られた計算リソースの使用を最大化する方法で実行され得る。受け取られた計算リソースの使用の最大化は、受け取られた計算リソースを使用して、プログラム部分の第1の部分のプログラムコンポーネントのすべてではなく一部の必要とされるインスタンスに関する計算を実行することと、プログラムコンポーネントの残りのインスタンスを、後で実行するためにプログラム部分の別の部分に関連付けることとを含み得る。
【0010】
第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップは、複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、第2の量の計算リソースを使用して複数の下位部分のうちの第1の下位部分に関する計算を実行することを含んでよい。第1の下位部分は、複数の下位部分のうちで、実行のために第2の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であってよい。
【0011】
追加の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップは、受け取られた第2の量の計算リソース及び受け取られた追加の量の計算リソースに応じて第1のプログラム部分を更新されたいくつかの下位部分に再区分することを含んでよい。
【0012】
追加の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するステップは、更新された複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、追加の量の計算リソースを使用して更新された複数の下位部分のうちの第1の下位部分に関連する計算を実行することを含んでよい。
【0013】
更新された複数の下位部分のうちの第1の下位部分は、更新された複数の下位部分のうちで、計算を実行するために追加の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であってよい。
【0014】
第1のプログラム部分をいくつかの下位部分に区分することは、第1のプログラム部分に関連するプログラムコンポーネントのうちの1又は2以上の特性に応じて第1のプログラム部分を区分することを含んでよい。いくつかのプログラム部分の特性は、1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、1又は2以上のプログラムコンポーネントの各々に関連する計算を実行するために必要とされる計算リソースの量とを含んでよい。第1のプログラムコンポーネントの第1の1又は2以上のインスタンスが、第1の下位部分に区分されてよく、第1のプログラムコンポーネントの第2の1又は2以上のインスタンスが、第2の下位部分に区分されてよい。
【0015】
方法は、第1のプログラム部分に関連する計算が完了すると、第2の量の計算リソース及び追加の量の計算リソースを放棄するステップを含んでよい。方法は、第1のプログラム部分に関連する計算が完了すると、第2の量の計算リソース及び追加の量の計算リソースの少なくとも一部を保持するステップを含んでよい。方法は、保持された計算リソースの少なくとも一部を使用して、プログラムの第2の部分に関連する計算を実行するステップを含んでよい。
【0016】
第3の量の受け取られた計算リソースが、第1のプログラム部分に関連する計算中に利用不可能になる場合があり、方法は、計算リソースマネージャに第3の量の計算リソースを要求するステップと、計算リソースマネージャから第3の量の計算リソースを受け取るステップと、受け取られた第3の量の計算リソースを使用して、第1のプログラム部分に関連する計算を実行し続けるステップとをさらに含んでよい。
【0017】
計算リソースマネージャは、コンピューティングシステムのために利用可能な計算リソースの量に関して不明瞭(opaque)である場合がある。方法は、第1のプログラム部分からの出力データを記憶し、記憶された出力データを読み取り、処理することを含む、いくつかのプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップを含んでよい。方法は、第1のプログラム部分からの出力データのストリームを受け取り、処理することを含む、いくつかのプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップを含んでよい。
【0018】
別の全般的な態様においては、計算リソースマネージャを使用して動的に割り当てられたコンピューティングシステムの計算リソースを使用して分散された計算を実行するためのシステムが、プログラムのいくつかのプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するためのストレージデバイスであって、プログラム部分が、データの連続的な変換を実行し、各プログラム部分が、そのプログラム部分がコンピューティングシステムにおいて実行されることを可能にする計算リソースマネージャによって付与された計算リソースを使用する、ストレージデバイスと、いくつかのプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを計算リソースマネージャに要求し、要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを計算リソースマネージャから受け取り、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行し、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行している間に、計算リソースマネージャから追加の量の計算リソースを受け取り、第2の量の計算リソースを使用して第1の部分に関連する計算を実行しながら、追加の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するように構成された少なくとも1つのプロセッサとを含む。
【0019】
別の全般的な態様においては、計算リソースマネージャを使用して動的に割り当てられたコンピューティングシステムの計算リソースを使用して分散された計算を実行するためのシステムが、プログラムのいくつかのプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するための手段であって、プログラム部分が、データの連続的な変換を実行し、各プログラム部分が、コンピューティングシステムにおけるそのプログラム部分に関連する計算の実行を可能にする計算リソースマネージャによって付与された計算リソースを使用する、手段と、いくつかのプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを計算リソースマネージャに要求し、要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを計算リソースマネージャから受け取り、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行し、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行している間に、計算リソースマネージャから追加の量の計算リソースを受け取り、第2の量の計算リソースを使用して第1の部分に関連する計算を実行しながら、追加の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行するように構成された処理のための手段とを含む。
【0020】
別の全般的な態様においては、計算リソースマネージャを使用して動的に割り当てられたコンピューティングシステムの計算リソースを使用して分散された計算を実行するための、コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアが、コンピューティングシステムに、プログラムのいくつかのプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶することであって、プログラム部分が、データの連続的な変換を実行し、各プログラム部分が、コンピューティングシステムにおけるそのプログラム部分に関する計算の実行を可能にする計算リソースマネージャによって付与された計算リソースを使用する、記憶すること、いくつかのプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを計算リソースマネージャに要求すること、要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを計算リソースマネージャから受け取ること、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行すること、第2の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行している間に、計算リソースマネージャから追加の量の計算リソースを受け取ること、第2の量の計算リソースを使用して第1の部分に関連する計算を実行しながら、追加の量の計算リソースを使用してプログラムの第1の部分に関連する計算を実行することを行わせる命令を含む。
【0021】
プログラム又はプログラム部分に関連する計算を実行することは、プログラム又はプログラム部分を実行することとも称される。
【0022】
プログラムは、データフローグラフとして規定されることが可能であり、プログラム部分は、データフローグラフのコンポーネントとして規定されることが可能である。
【0023】
プログラムは、手続き型プログラム仕様として規定されることが可能であり、プログラム部分は、サブルーチンとして規定されることが可能である。
【0024】
態様は、以下の利点のうちの1又は2以上を含む場合がある。
【0025】
利点の中でもとりわけ、態様は、プログラム部分が利用可能なリソースの量が経時的に変化する、リソースを制約された計算環境において、コンピュータプログラム(例えば、データ処理グラフ(data processing graph))の一部(例えば、コンポーネント)に計算リソースを動的に割り当てる。プログラムの一部(「フェーズ」と呼ばれることもある)は、すべてよりも少ないそれらの必要とされる計算リソースで計算を部分的に実行することを可能にされ、計算を完了するためなどに追加の計算リソースが利用可能になるとき、計算を実行しながら追加の計算リソースを組み込むことを可能にされる。有利なことに、プログラム部分は、すべてのそれらの必要とされるリソースが付与されるのを待っている間引き留められる可能性がより低い。有利なことに、プログラム部分は、障害が起きたリソースを置き換えるために新しいリソースを動的に割り当てることによって、コンピューティングシステム内のリソース(例えば、ノード)の障害から回復することができる。
【0026】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【0027】
【
図1】分散された計算リソースの動的な割り当てのためのシステムのブロック図である。
【
図2a】分散された計算リソースの動的な割り当てのためのシステムの詳細なブロック図である。
【
図3】計算リソースの動的な割り当てプロセスを示すフローチャートである。
【
図4】リソース要求モジュールが
図2bのデータ処理グラフの第1のフェーズのための計算リソースを要求し、受け取るところを示す図である。
【
図5】
図2bのデータ処理グラフの第1のフェーズが実行モジュールの計算リソースを使用して実行されるところを示す図である。
【
図6】
図2bのデータ処理グラフの第1のフェーズの実行が完了するところを示す図である。
【
図7】リソース要求モジュールが
図2bのデータ処理グラフの第2のフェーズのための計算リソースを要求し、要求された量よりも少ない計算リソースを受け取るところを示す図である。
【
図8】
図2bのデータ処理グラフの第2のフェーズが区分されるところを示す図である。
【
図9】第2のフェーズの一部が実行されている間に追加の計算リソースが利用可能になるところを示す図である。
【
図10】追加の計算リソースが利用可能になることに基づいて
図2bのデータ処理グラフの第2のフェーズが再区分されるところを示す図である。
【
図11】
図2bのデータ処理グラフの第2のフェーズの第1の部分が完了するところを示す図である。
【
図12】
図2bのデータ処理グラフの第2のフェーズの第2の部分が前に受け取られた計算リソース上で実行されるところを示す図である。
【
図13】
図2bのデータ処理グラフの第2のフェーズの第2の部分が完了するところを示す図である。
【
図14】
図2bのデータ処理グラフの第3のフェーズの第1の部分が前に受け取られた計算リソース上で実行され、追加の計算リソースが要求され、受け取られるところを示す図である。
【
図15】
図2bのデータ処理グラフの第3のフェーズの第2の部分が実行されるところを示す図である。
【
図16】実行モジュールの第2のホストが故障するところを示す図である。
【
図17】
図2bのデータ処理グラフの第3のフェーズの第2の部分のための計算リソースが実行モジュールの新しいホスト上で要求され、受け取られるところを示す図である。
【
図18】
図2bのデータ処理グラフの第3のフェーズの第2の部分が実行されるところを示す図である。
【
図19】
図2bのデータ処理グラフの第3のフェーズが実行を完了するところを示す図である。
【発明を実施するための形態】
【0028】
1 システム概要
図1は、リソース割り当て技術が使用されるデータ処理システム100の例を示す。システム100は、ストレージデバイス、又はオンラインデータストリームへの接続などのデータの1又は2以上のソースを含む場合があるデータソース102を含み、それらの1又は2以上のソースの各々は、様々なフォーマット(例えば、データベーステーブル、スプレッドシートファイル、フラットテキストファイル、又はメインフレームによって使用されるネイティブフォーマット)のいずれかでデータを記憶又は提供してよい。実行環境104は、実行モジュール112、リソースマネージャ120、及びリソース要求モジュール122を含む。実行環境104は、例えば、UNIX(登録商標)オペレーティングシステムのバージョンなどの好適なオペレーティングシステムの制御下の1又は2以上の多目的コンピュータにホストされてよい。また、例えば、実行環境104は、ローカルの(例えば、対称型マルチプロセッシング(SMP,symmetric multi-processing)コンピュータなどのマルチプロセッサシステム)又はローカルに分散された(例えば、クラスタ若しくは超並列処理(MPP,massively parallel processing)システムとして接続された複数のプロセッサ)か、或いは遠隔の又は遠隔に分散された(例えば、ローカルエリアネットワーク(LAN,local area network)及び/若しくは広域ネットワーク(WAN,wide-area network)を介して接続された複数のプロセッサ)か、或いはこれらの任意の組合せかのいずれかの複数の中央演算処理装置(CPU,central processing unit)或いはプロセッサコアを使用するコンピュータシステムの構成を含むマルチノード並列コンピューティング環境を含み得る。
【0029】
データストレージシステム116には、実行環境104及び開発環境118がアクセスすることができる。開発環境118は、異なる相互に関連するプログラム部分が、実行時に使用するために割り当てられる計算リソースの異なる目標量に関連付けられるように様々な方法で構成され得るプログラムを開発するためのシステムである。一部の実施形態において、これらのプログラムは、データソース102から受け取られたデータなどのデータを実行時間中に処理するデータ処理プログラムである。データ処理プログラムの一例は、頂点間の(作業要素(work element)、すなわち、データのフローを表す)有向リンクによって接続された(データ処理コンポーネント又はデータセットを表す)頂点を含むデータ処理グラフである。その他の形態のデータ処理プログラムが、本発明に従って可能である。これらのデータフロー接続に加えて、一部のデータ処理グラフは、コンポーネントの間の制御のフローを決定するための制御フロー接続も有する。そのようなデータ処理グラフにおいては、プログラム部分がコンポーネントであり、それらはデータフローリンクによって相互に関連している。その他の例において、プログラム部分は、実行されるためのコンピューティングリソースを別々に付与される、プログラム内のサブモジュール又はその他のエンティティである。プログラム部分は、実行されるためにそれらが属するプログラム全体の能力が個々のプログラム部分の能力に依存する限りにおいて、相互に関連していると考えられる。そのような相互に関連する又は相互に依存するプログラム部分は、実行のために互いに依存している場合もある。例えば、あるプログラム部分が、別のプログラム部分からデータを受け取るか又は別のプログラム部分にデータを提供する場合がある。また、プログラム部分は、コンピューティングリソースを別々に付与されるが、様々なその他の方法で重なり合うか又は相互に依存している場合がある(例えば、コンピューティングリソースの限られた供給を得るために争う)。
【0030】
例えば、グラフに基づく計算を開発するためのそのような環境が、参照により本明細書に組み込まれている、「Managing Parameters for Graph-Based Applications」と題した米国特許出願公開第2007/0011668号明細書により詳細に説明されている。そのようなグラフに基づく計算を実行するためのシステムが、参照により本明細書に組み込まれている、「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」と題した米国特許第5,966,072号明細書に説明されている。このシステムによって生成されるデータ処理グラフは、プロセス間で情報を移動させるため及びプロセスに関する実行の順序を定義するためにグラフのコンポーネントによって表される個々のプロセスに情報を出し入れするための方法を提供する。このシステムは、任意の利用可能な方法からプロセス間通信の方法を選択するアルゴリズムを含む(例えば、グラフのリンクに従った通信パスは、TCP/IP若しくはUNIX(登録商標)ドメインソケットを使用するか、又はプロセス間でデータを渡すために共有メモリを使用し得る)。
【0031】
実行モジュール112は、データソース102にまた記憶されるか若しくはデータストレージシステム116に記憶されるか、又はその他の方法で使用される出力データを生成するために、リソースマネージャ120によって割り当てられた計算リソースを使用して、1又は2以上のデータ処理グラフ114に従ってデータソース102からのデータを処理する。データソース102を提供するストレージデバイスは、実行環境104のローカルにあり、例えば、実行環境104をホストするコンピュータに接続されたストレージ媒体(例えば、ハードドライブ108)に収容される場合があり、又は実行環境104のリモートにあり、例えば、(例えば、クラウドコンピューティングインフラストラクチャによって提供される)リモート接続を介して実行環境104をホストするコンピュータと通信するリモートシステム(例えば、メインフレーム110)にホストされる場合がある。一部の例において、データソース102は、場合によってはヌル値を含む、それぞれのフィールド(「属性」又は「列」とも呼ばれる)の値を有するレコードとして編成されてよいデータを含む異なる形態のデータベースシステムを含む。
【0032】
リソースマネージャ120は、実行環境104上でのデータ処理グラフ114などの1又は2以上のコンピュータプログラムの実行をスケジューリングし、実行環境のリソースのデータ処理グラフへの割り当てを管理する。下でより詳細に説明されるように、多数の相互に依存するコンポーネントを含むデータ処理グラフなどの、相互に関連するプログラム部分を含むコンピュータプログラムに関して、リソース要求モジュール122は、経時的に変化する場合がある、実行モジュール112に関連する計算リソースの可用性に基づいて計算リソースを動的に割り当てるためにリソースマネージャ120と相互にやりとりを実行する。
【0033】
図2Aを参照すると、データ処理システム100の代替的な表現が、実行環境104、データソース102、及び実行環境104の計算リソースを使用してデータソース102からのデータを処理するためのデータ処理プログラム224(例えば、データ処理グラフ)を含む。
【0034】
実行環境104は、リソース要求モジュール122、リソースマネージャ120、及び実行モジュール112を含む。その他の特徴のうち、実行モジュール112は、複数のホスト(例えば、サーバのコンピューティングクラスタ)に分散される場合がある計算リソースを含む。
図2Aにおいては、3つのホスト、すなわち、第1のホストH1 236、第2のホストH2 238、及び第3のホストH3 240が存在する。各ホストは、まとめると実行モジュール112の総計算リソースを含む有限の量の計算リソースを含む。リソースマネージャ120によって管理され、割り当てられている計算リソースの例は、ホストのプロセッサの使用シェア(例えば、1若しくは2以上のマルチコアプロセッサの物理コアにマッピングされる仮想コアとして指定される)、ホストの揮発性メモリの一部(例えば、ホストのメインメモリ空間の量として指定される)、ホストの不揮発性メモリの一部(例えば、ホストのハードディスクドライブのストレージ空間の量として指定される)、又は通信チャネルの使用シェア(例えば、ホストのイーサネットインターフェースの帯域幅の一部)のうちのいずれかを含む場合がある。計算リソースの単一の単位は、指定された数のCPU又は仮想コア、及び指定された量のメインメモリなどの複数の種類のリソースを含む場合がある。
【0035】
図2Aにおいては、本明細書に記載の計算リソース割り当て方法の説明を簡単にするために、ホストの計算リソースは、(ホスト内の正方形として示される)計算リソース単位として表され、それらの計算リソース単位は、すべて同じ粒度(granularity)(すなわち、付与され得る最小のサイズ)を有するものとして示される。しかし、計算リソースは、必ずしも決まった等しい粒度の単位にセグメント分けされるとは限らず、その代わりに、様々な粒度の単位にセグメント分けされるか、又はその他の代替的な手法を使用して分割され得ることが留意される。さらに、本明細書に記載の計算リソース割り当て手法の説明を簡単にするために、
図2Aの実行モジュール112内のホストのすべては、同じ数(すなわち、9個)の計算リソース単位を有するものとして示される。しかし、概して、異なるホストは、異なる量の計算リソースを有してよいことが留意される。
【0036】
リソースマネージャ120は、計算リソースの要求を受け取り、実行モジュール112のホスト内の利用可能な計算リソースの量に基づいて要求を許可するか又は拒否するかのどちらかである。そのようなリソースマネージャ120の一例は、「Hadoop YARN」リソースマネージャを含み、「Hadoop YARN」リソースマネージャは、コンピュータプログラム(若しくはプログラム部分)を実行するための計算リソースの要求を受け取ることができ、十分な計算リソースを利用可能である場合、プログラムによる使用のための計算リソースの何らかの数の単位を持つ「コンテナ」を付与し、コンテナは、特定の量の計算リソースを含むか、又は特定の量の計算リソースを特定する任意の情報を含むか、又はそれらの任意の組合せのための任意の好適なデータ構造として実装され得る。そして、コンピュータプログラムは、付与されたコンテナ内の計算リソースを使用して実行されてよい。一部の例において、コンピュータプログラムは、リソースの複数のコンテナ(例えば、プログラムの一部の同時インスタンスを実行するためのいくつかのコンテナ)をリソースマネージャ120に一度に要求することができる。リソースマネージャ120が要求された複数のコンテナのすべてをコンピュータプログラムに付与するのに十分なリソースが利用可能である場合、リソースマネージャ120は要求された複数のコンテナのすべてをコンピュータプログラムに付与する。そうでない場合、利用可能なリソースに基づいて、リソースマネージャ120は、要求されたコンテナの一部(すなわち、要求されたコンテナの総数よりも少ない整数数のコンテナ)のみを付与する場合があり、又はリソースマネージャ120は、要求されたコンテナのいずれも付与しない場合がある。一部の実施形態においては、所与のコンテナに関連する計算リソースのすべてが、単一のホストに由来する。代替的に、その他の実施形態においては、所与のコンテナのリソースが、複数のホストに由来する場合がある。
【0037】
下でより詳細に説明されるように、リソース要求モジュール122は、実行モジュール112におけるリソースの可用性が経時的に変化するにつれて、データ処理プログラム224のためのリソースの動的な割り当て(例えば、増分割り当て、割り当て解除、又は再割り当て)を可能にする方法で、リソースマネージャ120と相互にやりとりを実行する。
【0038】
データ処理プログラム224は、データソース102から受け取られたデータを処理するためのコンピュータプログラムの仕様である。
図2Bは、第1のコンポーネントA 226、第2のコンポーネントB 228、第3のコンポーネントC 230、及び第4のコンポーネントD 232を含むいくつかの相互に関連するコンポーネントを含むデータ処理プログラム224のデータ処理グラフに基づく仕様の例である。
【0039】
一部の例において、データ処理プログラム(例えば、データ処理グラフ)の実行は、複数の連続した計算フェーズ(「プログラム部分」と呼ばれることもある)に分割され、コンピュータプログラムの各プログラムコンポーネント(例えば、グラフのノード若しくはコンポーネント、又は手続き型プログラムのサブルーチン)は、計算フェーズのうちの1つに属する。概して、計算フェーズに属するすべてのプログラムコンポーネントは、次の後続の計算フェーズに属するプログラムコンポーネントがそれらの処理を開始することができる前に、それらの処理を完了しなければならない。例えば、
図2のデータ処理プログラム224は、3つの計算フェーズ、すなわち、第1の計算フェーズ227、第2の計算フェーズ229、及び第3の計算フェーズ231を含むデータ処理グラフである。第1のコンポーネントA 226は、第1の計算フェーズ227に属し、第2のコンポーネントB 228及び第3のコンポーネントC 230は、両方とも第2の計算フェーズ229に属し、第4のコンポーネントD 232は、第3の計算フェーズ231に属する。
【0040】
さらに、コンピュータプログラムの各プログラムコンポーネントは、実行モジュール112上でプログラムコンポーネントのために必要とされるリソースの量を指定する計算リソース量と、プログラムコンポーネントの並列化の程度を指定する「レイアウト」制約とに関連付けられてよい。コンポーネントの計算リソース量及びレイアウトの略記法は、「AxB」であり、Aは、計算リソース量であり、Bは、レイアウト制約である。
図2Bの例示的なデータ処理グラフにおいて、第1のコンポーネントA 226は、「4」リソース単位の計算リソース量と、コンポーネントの2つのインスタンス(又はプライ(ply))が並列に実行されることを指定する「2」のレイアウト制約とを有するので、「4x2」と注釈を付けられている。第2のコンポーネントB 228は、「5」リソース単位の計算リソース量と、コンポーネントの3つのインスタンスが並列に実行されることを指定する「3」のレイアウト制約とを有するので、「5x3」と注釈を付けられている。第3のコンポーネントC 230は、「4」リソース単位の計算リソース量と、コンポーネントの1つのインスタンスのみが実行されることを指定する「1」のレイアウト制約とを有するので、「4x1」と注釈を付けられている。第4のコンポーネントB 232は、「1」リソース単位の計算リソース量と、コンポーネントの6つのインスタンスが並列に実行されることを指定するレイアウト制約「6」とを有するので、「1x6」と注釈を付けられている。
【0041】
再び
図2Aを参照すると、データ処理プログラム224のプログラムコンポーネントの各々は、データソース102のデータセットからのデータ要素(例えば、ブロック、ファイル、又はレコード)を処理するように構成される。
図2Aにおいて、第1のプログラムコンポーネントA 226は、第1のデータセット242からの第1のデータ要素252を処理し、第2のプログラムコンポーネントB 228は、第2のデータセット244からの第2のデータ要素254を処理し、第3のプログラムコンポーネントC 230は、第3のデータセット246からの第3のデータ要素256を処理し、第4のプログラムコンポーネントD 232は、第4のデータセット248からの第4のデータ要素258を処理する。一部の例において、ブロックは、1又は2以上のレコードを含むファイル内のデータの一部である。本明細書に記載の例において、データセットのデータ要素の各ブロックは、データセットに関連付けられるプログラムコンポーネントの対応するインスタンスによって処理される。しかし、プログラムコンポーネントのインスタンスへのデータのその他の割り当てが可能であることが留意される。例えば、データ要素の数に基づいて、異なるプログラムコンポーネントのインスタンスの目標数と、ひいては計算リソースの目標量とを決定するために、各プログラムコンポーネントに関連するデータセットが分析される場合がある。その他の例において、計算リソースの目標量は、必ずしも関連するデータセットのデータの量に基づくとは限らず、その代わりに(又はさらに)、履歴的な又は推定された性能データなどのその他の要因に依存する場合がある。各プログラムコンポーネントが異なるデータセットに関連付けられるという必要条件は存在しないことが留意される。例えば、いくつかのプログラムコンポーネントが、すべて同じデータセットのうちの1又は2以上からのデータを処理してよい。
【0042】
2 動的なリソースの割り当て
リソースが豊富なシナリオでは、リソース要求モジュール122は、問題なくデータ処理プログラム224のフェーズにリソースを割り当てることができる。各フェーズは、そのフェーズの割り当てられたリソースを使用して結果を生成し、その結果は、データ処理プログラムの後続のフェーズによって使用される場合がある。フェーズが完了すると、そのフェーズの割り当てられた計算リソースは放棄される。しかし、一部の例において、実行モジュール112は、限られた計算リソースを有し、それは、リソース要求モジュール122がフェーズのために要求する計算リソースのすべてよりも少ないリソースをそのリソース要求モジュール122が受け取る結果をもたらし得る。そのような例において、フェーズのためのリソースの残りが利用可能になるまでフェーズの実行を待つのではなく、本明細書において説明される態様は、既に割り当てられているリソースでフェーズの一部を実行し、追加の計算リソースが利用可能になるにつれてフェーズのさらなる部分を実行する動的なリソース割り当てプロセスを使用する。
【0043】
図3を参照すると、リソース割り当てプロセス300は、実行モジュール112が限られた計算リソースを有するときに、データ処理プログラム224を実行するための計算リソースを動的に割り当てる。プロセス300は、多数のフェーズ360の表現(representations)を受け取り、各表現は、フェーズ内のプログラムコンポーネントに関連する情報(例えば、プログラムコンポーネントの計算リソースの要件及び並列性の程度)を含む。プロセス300の説明を容易にするために、フェーズ360の各表現は、フェーズのすべてのプログラムコンポーネントを含む単一のサブフェーズから始まるものと見なされる。フェーズ360の各表現に関し、フェーズ360の各サブフェーズに関して、プロセス300の第1のステップ362は、サブフェーズが実行されるために必要とされるすべての計算リソースを要求する。プロセス300の第2のステップ364において、サブフェーズのためのすべての要求された計算リソースが受け取られる(代替的に「割り当てられる」又は「付与される」と呼ばれる)場合、第3のステップ365は、受け取られた計算リソースを使用してサブフェーズを実行する。そうでなく、すべてよりも少ない要求された計算リソースが受け取られる場合、プロセス300の第4のステップ366は、サブフェーズを、2つの(又は一部の例においては複数の)サブフェーズ、すなわち、第1のサブフェーズ及び第2のサブフェーズに区分する。
【0044】
各サブフェーズに関して、プロセス300の第5のステップ368は、受け取られた計算リソースを使用して第1のサブフェーズを実行し、一方、第2のサブフェーズは、リソースが利用可能になるのを待つ。プロセス300の第6のステップ370において、サブフェーズの実行中に追加のリソースが利用可能になる場合、プロセス300の第7のステップ372は、(例えば、第2のサブフェーズから第1のサブフェーズにコンポーネントのインスタンスを追加することによって)第1のサブフェーズが追加の受け取られた計算リソースを使用することができるように第1のサブフェーズを拡張する(及び第2のサブフェーズを縮小する)。プロセス300の第8のステップ374において、拡張された第1のサブフェーズが実行される。
【0045】
各サブフェーズ(又は拡張されたサブフェーズ)の実行が完了すると、実行の結果が(例えば、メモリ又はディスクに)記憶される。プロセス300は、各サブフェーズ(例えば、追加された第2のサブフェーズ)を通して反復し、各サブフェーズは、フェーズのすべてのサブフェーズが実行されるまで、上述のように、前のサブフェーズによって記憶された任意の結果を読み取り、割り当てられた計算リソースを使用して実行される。このプロセスが、各フェーズに関して繰り返す。
【0046】
3 フェーズの区分
図4を参照すると、
図2Bのデータ処理プログラム224(すなわち、データ処理グラフ)への
図3のプロセス300の例示的な適用において、プロセス300の第1のステップ362は、データ処理プログラム224の第1のフェーズ227の単一のサブフェーズを実行するために必要とされるすべてのリソースをリソース要求モジュール122が要求することによって開始する。この場合、第1のフェーズ227の単一のサブフェーズは、実行するためにインスタンス毎に「4つ」の計算リソース単位を必要とする第1のプログラムコンポーネントA 226の「2つ」のインスタンスを含むので、「8つ」の計算リソース単位を必要とする。「4x2」の要求が、リソースマネージャ120に送られ、リソースマネージャ120は、第1のフェーズ227の単一のサブフェーズのための要求された「4x2」の計算リソース単位を付与することによってリソース要求モジュール112に応答する。付与された計算リソース単位は、実行モジュール112内に太い輪郭で示されており、4つの計算リソース単位が第1のホストH1 236上で付与されており、4つの計算リソース単位が第3のホストH3 240上で付与されている。
【0047】
図5を参照すると、プロセス300の第2のステップ364は、すべての要求された計算リソースが受け取られたと判定し、したがって、プロセス300は、第3のステップ365に進む。第3のステップ365は、付与された計算リソース単位を使用して、第1のプログラムコンポーネントA 226の2つのインスタンスを含む第1のフェーズ227の単一のサブフェーズを実行し、第1のプログラムコンポーネントA 226の第1のインスタンス(すなわち、A
1)が第1のホストH1 236上で実行され、第1のプログラムコンポーネントA 226の第2のインスタンス(すなわち、A
2)が第3のホストH3 240上で実行される。
図5の例において、プログラムコンポーネントのインスタンスは、実行されるとき、単一のホストに属する計算リソース単位のみを使用することを要求されることに留意されたい。しかし、その他の例において、プログラムコンポーネントのインスタンスは、複数のホストに属する計算リソース単位を使用して実行される場合がある。
【0048】
図6を参照すると、受け取られた計算リソース単位を使用する第1のプログラムコンポーネントA 226の2つのインスタンスの実行が完了し、実行の結果が記憶されるとき、リソース要求モジュール122は、実行が完了していることを示す「済み」メッセージをリソースマネージャ120に送る。リソース要求モジュール122は、第1のプログラムコンポーネントA 226のインスタンスに完了と印を付ける(図においてはチェックマークとして示される)。第1のプログラムコンポーネントA 226の2つのインスタンスが実行を終えた状態で、第1のフェーズ227の単一のサブフェーズは完了し、付与された計算リソースは放棄される。
【0049】
図7を参照すると、プロセス300は、データ処理グラフ224の第2のフェーズ229に進む。プロセス300の第1のステップ362は、第2のフェーズ229の単一のサブフェーズを実行するために必要とされるすべての計算リソースをリソース要求モジュール122が要求することによって開始する。この場合、第2のフェーズ229の単一のサブフェーズは、実行するためにインスタンス毎に「5つ」の計算リソース単位を必要とする第2のプログラムコンポーネントB 228の「3つ」のインスタンスと、実行するためにインスタンス毎に「4つ」の計算リソース単位を必要とする第3のプログラムコンポーネントC 230の「1つ」のインスタンスとを含むので、「19個」の計算リソース単位を必要とする。「5x3」及び「4x1」の計算リソース要求が、リソースマネージャ120に送られ、リソースマネージャ120は、「5x2」の計算リソース単位を付与することによってリソース要求モジュール112に応答する。付与された計算リソース単位は、実行モジュール112内に太い輪郭で示されており、5つの計算リソース単位が第1のホストH1 236上で付与されており、5つの計算リソース単位が第3のホストH3 240上で付与されている。
【0050】
図8を参照すると、プロセス300の第2のステップ364は、第2のフェーズ229の単一のサブフェーズのためのすべてよりも少ない要求された計算リソース単位が付与されたと判定する。したがって、プロセス300は、第2のフェーズ229の単一のサブフェーズを2つのサブフェーズ、すなわち、第1のサブフェーズ229a及び第2のサブフェーズ229bに区分する第4のステップ366に進む。概して、サブフェーズの区分は、データ処理プログラムのプログラムコンポーネントの実行の順序を考慮する。例えば、データ処理プログラム224の第2のプログラムコンポーネントB 228は、第3のプログラムコンポーネントC 230の前に実行されるように指定されており、したがって、第2のフェーズ229の区分は、第3のプログラムコンポーネントC 238がリソースを割り当てられる前に、第2のプログラムコンポーネントB 228のすべてのインスタンスがリソースを割り当てられることを保証する方法で実行される。
図8の例においては、「5x2」の計算リソース単位のみが付与されており、したがって、第2のプログラムコンポーネントB 228の2つのインスタンスのみが、第1のサブフェーズ229aに含まれる。第2のフェーズ229の第2のプログラムコンポーネントB 228及び第3のプログラムコンポーネントC 228の残りのインスタンスを実行するのに十分な付与された計算リソースがなく、したがって、それらのインスタンスは、第2のサブフェーズ229bに含まれる。
【0051】
つまり、第1のサブフェーズ229aは、第2のプログラムコンポーネントB 228の第1のインスタンス(すなわち、B1)と、第2のプログラムコンポーネントB 228の第2のインスタンス(すなわち、B2)とを含む。第2のプログラムコンポーネント228の第1及び第2のインスタンスは、実行するためにそれぞれ「5つ」の計算リソース単位を必要とし、したがって、第1のホストH1 236上で付与された5つの計算リソース単位及び第3のホストH3 240上で付与された5つの計算リソース単位を使用して実行され得る。プロセス300の第5のステップ368において、第2のプログラムコンポーネント228の第1及び第2のインスタンス(B1、B2)は、第1のホストH1 236上で付与された5つの計算リソース単位及び第3のホストH3 240上で付与された5つの計算リソース単位を使用して実行を開始する。
【0052】
図9を参照すると、プロセス300の第6のステップ370において、第1のサブフェーズ229aが実行されている間に、リソースマネージャ120は、第2のホストH2 238上で別の「5つ」の計算リソース単位が利用可能になったことを示すメッセージをリソース要求モジュール122に送る。新たに付与された計算リソース単位は、実行モジュール112内に太い輪郭で示されており、5つの計算リソース単位が第2のホストH2 238上で付与されている。
【0053】
図10を参照すると、プロセス300は、第7のステップ372に進み、実行するために新たに付与された「5つ」の計算リソース単位を使用することができる第2のプログラムコンポーネント228の第3のインスタンス(すなわち、B
3)を含むように第1のサブフェーズ229aを拡張する。システムは、プログラムコンポーネント(B)の結果を利用可能にするためにその他のプログラムコンポーネント(C)のインスタンスを含める前に、プログラムコンポーネント(B)のすべてのインスタンスを完了させようとする場合があり、又はシステムは、常に実行のためにすべての利用可能なリソースを利用しようとする場合があり、その結果、
図10においてCではなくB3が選択される。プロセスの第8のステップ374は、第2のホストH2 238上で第2のプログラムコンポーネントの第3のインスタンス(B
3)を実行することによって、拡張された第1のサブフェーズ229aの実行を開始する。
【0054】
図11を参照すると、受け取られた計算リソース単位を使用する第2のプログラムコンポーネントB 228の3つのインスタンスの実行が完了し、実行の結果が記憶されるとき、リソース要求モジュール122は、実行が完了していることを示す「済み」メッセージをリソースマネージャ120に送る。リソース要求モジュール122は、第2のプログラムコンポーネントB 228のインスタンスに完了と印を付ける(図においてはチェックマークとして示される)。第2のプログラムコンポーネントB 228の3つのインスタンスが実行を終えた状態で、第1のサブフェーズ229aは完了している。
【0055】
一部の例においては、フェーズ又はサブフェーズの実行が完了すると、すべての受け取られた計算リソースは、放棄される。その他の例において、付与された計算リソースの少なくとも一部は、好ましくはモジュール122がマネージャ120にリソースの要求を送ること要求することなく、後続のフェーズのプログラムコンポーネントのインスタンスの実行のために保持される。例えば、
図11においては、第1のホストH1 236に属する「5つ」の計算リソース単位が、実行するために「4つ」の計算リソース単位を必要とする第2のサブフェーズ229bの第3のプログラムコンポーネントC 230のインスタンスの実行のために保持される。
【0056】
図12を参照すると、第1のサブフェーズ229aの完了後、プロセス300は、第1のホストH1 236からの保持された計算リソース単位上で第3のプログラムコンポーネントC 230のインスタンスを実行することによって、第2のサブフェーズ229bの実行を開始する。リソースは、ステップ362によって要求される必要がなく、第2のサブフェーズ229bが、ステップ365において実行される。
図12の例においては、第1のホストH1 236上の5つの保持された計算リソース単位のうちの4つだけが利用されることに留意されたい。これは、一部のシステムが、計算リソースを、全体として保持又は放棄されなければならない単一の不可分の単位として扱われる「ブロック」又は「コンテナ」として付与するという事実による。結果として、計算リソースの再利用は、リソースを再利用する利益とリソースの再利用によって引き起こされる潜在的な無駄とのバランスを取ることを必要とする場合がある。
【0057】
図13を参照すると、付与された計算リソース単位を使用する第3のプログラムコンポーネントC 230のインスタンスの実行が完了し、実行の結果が記憶されるとき、リソース要求モジュール122は、実行が完了していることを示す「済み」メッセージをリソースマネージャ120に送り返す。リソース要求モジュール122は、第3のプログラムコンポーネントC 230のインスタンスに完了と印を付ける(図においてはチェックマークとして示される)。第3のプログラムコンポーネントC 230のインスタンスが実行を終えた状態で、第2のサブフェーズ229b(及び第2のフェーズ229)は完了している。今度も、第1のホストH1 236上の付与された計算リソースは、次のフェーズでのプログラムコンポーネントのインスタンスの実行のために保持される。
【0058】
図14を参照すると、第2のフェーズ229の完了後、プロセス300は、第1のホストH1 236において保持された計算リソース単位上で第4のプログラムコンポーネントD 232の第1のインスタンスD
1を実行することによって、第3のフェーズ231の実行を開始する。ここで、D
1は実行するために「1つ」の計算リソース単位のみを必要とするので、第1のホストH1 236上の5つの保持された計算リソース単位のうちの1つのみが利用される。概して、プログラムコンポーネントの1つのインスタンスのみが、リソースのコンテナにおいて実行される場合がある。
【0059】
プロセス300の第1のステップ362において、リソース要求モジュール122は、第3のフェーズ331の単一のサブフェーズを実行するために必要とされる計算リソースを要求する。この場合、第3のフェーズ231の単一のサブフェーズは、実行するためにインスタンス毎に「1つ」の計算リソース単位を必要とする第4のプログラムコンポーネントD 232の「6つ」のインスタンスを含むので、「6つ」の計算リソース単位を必要とする。しかし、第4のプログラムコンポーネントD 232の第1のインスタンスD1は、第1のホストH1 236上の保持された計算リソースに割り振られ、したがって、第4のプログラムコンポーネントD 232の残りの5つのインスタンスのために、「1x5」の計算リソース要求がリソースマネージャ120に送られる。リソースマネージャ120は、「1x5」の計算リソース単位を付与することによってリソース要求モジュール112に応答する。付与された計算リソース単位は、実行モジュール112内に太い輪郭で示されており、5つの計算リソース単位が第2のホストH2 238上で付与されている。
【0060】
図15を参照すると、プロセス300の第2のステップ364は、すべての要求された計算リソースが単一のサブフェーズのために受け取られたと判定し、したがって、プロセス300は、第3のステップ365に進む。第3のステップ365は、付与された計算リソース単位を使用して、第3のフェーズ231の単一のサブフェーズの第4のプログラムコンポーネントD 232の残りの5つのインスタンスの実行を開始し、第4のプログラムコンポーネントの5つすべてのインスタンス(すなわち、D
2~D
6)が第2のホストH2 238上で実行される。
【0061】
4 ロールバック
一部の例においては、プログラムコンポーネントのインスタンスを実行しているホストが、実行中に障害に見舞われる場合がある。
図16を参照すると、第4のプログラムコンポーネントの5つのインスタンス(すなわち、D
2~D
6)を実行している第2のホストH2 238が障害に見舞われ、一方、第1のホストH1 234は、第4のプログラムコンポーネントの第1のインスタンスD
1を実行し続ける。
【0062】
図17を参照すると、第2のホストH2 238の障害から回復するために、プロセス300は、第3のフェーズ231におけるプログラムコンポーネントのすべてのインスタンスの実行をフェーズの初期状態(例えば、第2のフェーズ229の完了時に記憶された状態)にロールバックする。一部の例において、プロセス300の実行ステップ365、368は、計算リソースが無効にされたか、又はそれ以外の方法で利用不可能になったかどうかを検出し、実行をロールバックするステップ(図示せず)を含む。実行がロールバックされた後、リソース要求モジュール122は、第2のホストH2 238上で実行されていた第4のプログラムコンポーネントD 232の5つのインスタンスのために、リソースマネージャ120に「1x5」の計算リソース要求を送る。リソースマネージャ120は、第3のホストH3 240上で「1x5」の計算リソース単位を付与することによってリソース要求モジュール112に応答する。付与された計算リソース単位は、実行モジュール112内に太い輪郭で示されている。
【0063】
図18を参照すると、第4のプログラムコンポーネントD 232の5つのインスタンス(D
2~D
6)は、第3のホストH2 240上の付与された計算リソース単位を使用して実行を開始する。
【0064】
図19を参照すると、付与された計算リソース単位を使用する第4のプログラムコンポーネントD 232の6つのインスタンスの実行が完了し、実行の結果が記憶されるとき、リソース要求モジュール122は、実行が完了していることを示す「済み」メッセージをリソースマネージャ120に送る。リソース要求モジュール122は、第4のプログラムコンポーネントD 232のインスタンスに完了と印を付ける(図においてはチェックマークとして示される)。第4のプログラムコンポーネントD 232の6つのインスタンスが実行を終えた状態で、データ処理グラフの第3の及び最後のフェーズ231は完了し、付与された計算リソースは放棄される。
【0065】
5 代替手法
一部の例においては、データ処理グラフのフェーズの実行が、部分的に重なり合う場合があり、1つのフェーズからの出力データが、ディスクに記憶されるのではなく、後続のフェーズにストリーミングされる場合がある。
【0066】
一部の例において、リソースマネージャは、コンピューティングシステム上で利用可能な計算リソースの量のいかなるインジケーションも提供しない。むしろ、リソースマネージャは、計算リソースの要求を受け入れ、要求時に利用可能な計算リソースに基づいて要求を(完全に又は部分的に)満たす。
【0067】
上述の例においては、ノードの障害が原因で実行がロールバックされる。その他の例においては、リソースマネージャ120がリソース要求モジュール122から計算リソースを「無効にする」又は「未然に回避する(preempt)」とき、通常は予告なしに実行がロールバックされる。例えば、別のアプリケーションがノードH2 238上のリソースを要求する場合、リソースマネージャ120は、別のアプリケーションがより重要であると判定し、アプリケーションに既に付与された計算リソースを無効にする場合がある。上述のロールバック手順が、無効にされたリソースを置き換えるための新しい計算リソースを割り当てるために使用される。
【0068】
上述の例などの一部の例においては、フェーズのための計算リソースが取り消された後、フェーズ全体がロールバックされ、再度開始される。その他の例においては、未然に回避された又は無効にされたリソースを使用していたフェーズのプログラムコンポーネントだけが、それらの実行をロールバックさせる。そのようにすることは、有利なことに、それらの計算リソースを無効にさせなかったプログラムコンポーネントを再実行するという冗長な作業を回避する。
【0069】
上述の例において、リソースマネージャは、計算リソースの要求を受け取り、それらのリソースが利用可能である場合、リソースを付与する。その他の例において、計算リソースマネージャは、要求を受け取るのではなく、実行環境での実行を望むプログラムに計算リソースを申し出る(offer)。そのような取り決めでは、リソースマネージャに要求をするのではなく、プログラムは、利用可能な計算リソースに関する「申し出」のストリームをリスニングし、プログラムは、申し出の中から(もしあれば)どれを受けたいかを選択する。このようにして働くリソースマネージャの一例は、Apache Mesosである。
【0070】
プログラム又はプログラム部分に関連する計算を実行することは、プログラム又はプログラム部分を実行することとも呼ばれ得る。プログラムは、データフローグラフとして規定されることが可能であり、プログラム部分は、データフローグラフのコンポーネントとして規定されることが可能である。プログラムは、手続き型プログラム仕様として規定されることが可能であり、プログラム部分は、サブルーチンとして規定されることが可能である。
【0071】
プログラムの一部の区分は、プログラムコンポーネントの少なくとも一部の実行の順序を維持する方法で実行され得る。プログラム部分の一部の区分は、プログラムコンポーネントの少なくとも一部の実行の順序を維持しながら、受け取られた計算リソースの使用を最大化する方法で実行され得る。
【0072】
6 実施形態
上述の計算リソース割り当て手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを使用して実装されることが可能であり、又はフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)などの好適なハードウェアで、若しくは何らかの混成の形態で実装されることが可能である。例えば、プログラミングされる方法において、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)少なくとも1つのデータストレージシステム、(少なくとも1つの入力デバイス又はポートを使用して入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを使用して出力を与えるための)少なくとも1つのユーザインターフェースを含む(分散、クライアント/サーバ、又はグリッドなどの様々なアーキテクチャである場合がある)1又は2以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される1又は2以上のコンピュータプログラムのプロシージャを含んでよい。ソフトウェアは、例えば、データ処理グラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの1又は2以上のモジュールを含む場合がある。プログラムのモジュール(例えば、データ処理グラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【0073】
ソフトウェアは、ある時間の期間(例えば、ダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間)媒体の物理特性(例えば、表面ピット及びランド、磁区、又は電荷)を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶される場合がある。命令をロードするのに備えて、ソフトウェアは、CD-ROM又は(例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な)その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される場合があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される(例えば、伝播信号に符号化される)場合がある。処理の一部又はすべては、専用のコンピュータ上で、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)などの専用のハードウェアを使用して実行される場合がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実行される分散された方法で実施される場合がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体(例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体)に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムによって構成された有形の非一時的媒体として実装されると考えられる場合もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの1又は2以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
【0074】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって画定される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなく様々な修正がなされる場合がある。さらに、上述のステップの一部は、順序に依存しない場合があり、したがって、説明された順序とは異なる順序で実行され得る。
【手続補正書】
【提出日】2024-02-21
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
計算リソースマネージャを使用して動的に割り当てられた計算リソースを使用して、コンピューティングシステム上で分散された計算を実行するための方法であって、
プログラムの複数のプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報を記憶するステップであって、前記プログラム部分が、データの連続的な変換を実行し、前記プログラム部分が前記コンピューティングシステムにおいて実行されることを可能にする前記計算リソースマネージャによって付与された計算リソースを各プログラム部分が使用する、前記記憶するステップと、
前記複数のプログラム部分のうちの第1のプログラム部分に関連する第1の量の計算リソースを前記計算リソースマネージャに要求するステップと、
要求された第1の量の計算リソースよりも少ない第2の量の計算リソースを前記計算リソースマネージャから受け取るステップと、
前記第2の量の計算リソースを使用して前記プログラムの第1の部分に関連する計算を実行するステップと、
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行している間に、前記計算リソースマネージャから追加の量の計算リソースを受け取るステップと、
前記第2の量の計算リソースを使用して前記第1の部分に関連する計算を実行しながら、前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する追加の計算を実行するステップと
を含む、前記方法。
【請求項2】
前記プログラムの複数のプログラム部分のそれぞれのプログラム部分に関連する計算リソースの量を指定する情報が、前記複数のプログラム部分の前記それぞれのプログラム部分に関連する1又は2以上のプログラムコンポーネントの特性を含む、請求項1に記載の方法。
【請求項3】
前記特性が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる計算リソースの量とを含む、請求項2に記載の方法。
【請求項4】
前記複数のプログラム部分のうちのプログラム部分に関連する計算リソースの量が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる前記計算リソースの量とに少なくとも部分的に基づいて決定される、請求項3に記載の方法。
【請求項5】
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、受け取られた第2の量の計算リソースに応じて前記第1のプログラム部分を複数の下位部分に区分することを含む、請求項1~4のいずれかに記載の方法。
【請求項6】
前記第2の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、好ましくは、前記複数の下位部分のうちの第1の下位部分が、前記複数の下位部分のうちで、実行のために前記第2の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であるように、前記複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、前記第2の量の計算リソースを使用して前記第1の下位部分に関する計算を実行することを含む、請求項5に記載の方法。
【請求項7】
前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、前記受け取られた第2の量の計算リソース及び受け取られた追加の量の計算リソースに応じて前記第1のプログラム部分を更新された複数の下位部分に再区分することを含む、請求項
5に記載の方法。
【請求項8】
前記追加の量の計算リソースを使用して前記プログラムの前記第1の部分に関連する計算を実行するステップが、好ましくは、前記更新された複数の下位部分のうちの第1の下位部分が、前記更新された複数の下位部分のうちで、計算を実行するために前記追加の量の計算リソースのほとんど又はすべてを使用するように構成される下位部分であるように、前記更新された複数の下位部分のうちの1又は2以上のその他の下位部分が計算を実行しようと待っている間に、前記追加の量の計算リソースを使用して前記更新された複数の下位部分のうちの前記第1の下位部分に関連する計算を実行することを含む、請求項7に記載の方法。
【請求項9】
前記追加の量の計算リソースを使用して前記プログラムの前記第1のプログラム部分に関連する計算を実行するステップが、前記第2の量の計算リソースを使用して前記複数の下位部分のうちの第1の下位部分に関連する計算を実行することと、前記追加の量の計算リソースを使用して前記第1の部分のさらなる部分に関連する計算を実行することとを含む、請求項
7に記載の方法。
【請求項10】
前記更新された複数の下位部分のうちの第1の下位部分が、前記更新された複数の下位部分のうちの前記第1の下位部分を取得するために、前記複数の下位部分のうちのその他の1又は2以上の下位部分からの前記第1のプログラム部分の1又は2以上のプログラムコンポーネントの1又は2以上のインスタンスを前記複数の下位部分のうちの前記第1の下位部分に追加することによって形成された、前記複数の下位部分のうちの前記第1の下位部分の拡張されたバージョンである、請求項
7に記載の方法。
【請求項11】
前記第1のプログラム部分を複数の下位部分に区分することが、前記第1のプログラム部分に関連するプログラムコンポーネントのうちの1又は2以上の特性に応じて前記第1のプログラム部分を区分することを含む、請求項
5に記載の方法。
【請求項12】
前記複数のプログラム部分の前記特性が、前記1又は2以上のプログラムコンポーネントの各々に関連する並列性の程度と、前記1又は2以上のプログラムコンポーネントの各々が実行されるために必要とされる計算リソースの量とを含む、請求項11に記載の方法。
【請求項13】
第1のプログラムコンポーネントの第1の1又は2以上のインスタンスが、第1の下位部分に区分され、前記第1のプログラムコンポーネントの第2の1又は2以上のインスタンスが、第2の下位部分に区分される、請求項12に記載の方法。
【請求項14】
前記第1のプログラム部分の実行が完了すると、前記第2の量の計算リソース及び前記追加の量の計算リソースを放棄するステップをさらに含む、請求項1~
4のいずれかに記載の方法。
【請求項15】
前記第1のプログラム部分の実行が完了すると、前記第2の量の計算リソース及び前記追加の量の計算リソースの少なくとも一部を保持するステップをさらに含む、請求項1~
4のいずれかに記載の方法。
【請求項16】
保持された計算リソースの少なくとも一部を使用して、前記プログラムの第2の部分に関連する計算を実行するステップをさらに含む、請求項15に記載の方法。
【請求項17】
前記第1のプログラム部分に関連する計算の実行中に、第3の量の受け取られた計算リソースが利用不可能になる、請求項1~
4のいずれかに記載の方法であって、
前記計算リソースマネージャに前記第3の量の計算リソースを要求するステップと、
前記計算リソースマネージャから前記第3の量の計算リソースを受け取るステップと、
受け取られた第3の量の計算リソースを使用して、前記第1のプログラム部分に関連する計算を実行し続けるステップとをさらに含む、前記方法。
【請求項18】
前記計算リソースマネージャが、前記コンピューティングシステムのために利用可能な計算リソースの量に関して不明瞭である、請求項1~
4のいずれかに記載の方法。
【請求項19】
前記第1のプログラム部分からの出力データを記憶し、記憶された出力データを読み取り、処理することを含む、前記複数のプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップをさらに含む、請求項1~
4のいずれかに記載の方法。
【請求項20】
前記第1のプログラム部分からの出力データのストリームを受け取り、処理することを含む、前記複数のプログラム部分のうちの第2のプログラム部分に関連する計算を実行するステップをさらに含む、請求項1~
4のいずれかに記載の方法。
【請求項21】
計算リソースマネージャを使用して動的に割り当てられたコンピューティングシステムの計算リソースを使用して分散された計算を実行するためのシステムであって、プロセッサと、前記プロセッサによって実行されるときに請求項1~
4のいずれかに記載の方法をシステムに実行させる命令を記憶するストレージ媒体とを含む、前記システム。
【請求項22】
コンピューティングシステムに請求項1~
4のいずれかに記載の方法を実行させるための命令を記憶する非一時的コンピュータ可読媒体。
【国際調査報告】