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

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

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特許-マルチパス分散データシャッフル 図1
  • 特許-マルチパス分散データシャッフル 図2A
  • 特許-マルチパス分散データシャッフル 図2B
  • 特許-マルチパス分散データシャッフル 図3
  • 特許-マルチパス分散データシャッフル 図4
  • 特許-マルチパス分散データシャッフル 図5
  • 特許-マルチパス分散データシャッフル 図6
  • 特許-マルチパス分散データシャッフル 図7
  • 特許-マルチパス分散データシャッフル 図8
  • 特許-マルチパス分散データシャッフル 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-24
(45)【発行日】2024-10-02
(54)【発明の名称】マルチパス分散データシャッフル
(51)【国際特許分類】
   G06F 16/182 20190101AFI20240925BHJP
   H04L 67/2885 20220101ALI20240925BHJP
【FI】
G06F16/182
H04L67/2885
【請求項の数】 18
【外国語出願】
(21)【出願番号】P 2024064169
(22)【出願日】2024-04-11
(62)【分割の表示】P 2022522725の分割
【原出願日】2020-11-03
(65)【公開番号】P2024102090
(43)【公開日】2024-07-30
【審査請求日】2024-05-10
(31)【優先権主張番号】16/672,939
(32)【優先日】2019-11-04
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】バキリアン,モフセン
(72)【発明者】
【氏名】アマディ,ホセイン
【審査官】齊藤 貴孝
(56)【参考文献】
【文献】特表2019-517065(JP,A)
【文献】特表2019-502989(JP,A)
【文献】特表2014-515524(JP,A)
【文献】米国特許第10223450(US,B1)
【文献】国際公開第2018/142874(WO,A1)
【文献】米国特許第5790807(US,A)
【文献】米国特許出願公開第2018/0046398(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00-16/958
H04L 67/00-67/75
(57)【特許請求の範囲】
【請求項1】
分散ネットワークにおいてデータを再パーティション化する方法であって、
1つまたはそれ以上の第1のプロセッサが、複数の第1のソースから複数の第1のシンクへのデータセットの第1の部分の第1のシャッフルを実行することを備え、各第1のシンクは、前記複数の第1のソースのうちの1つまたはそれ以上の第1のソースからデータを収集し、前記方法はさらに、
前記1つまたはそれ以上の第1のプロセッサが、前記第1のシャッフル中に前記データセットの前記第1の部分のメタデータを追跡することと、
前記1つまたはそれ以上の第1のプロセッサとは別の1つまたはそれ以上の第2のプロセッサが、前記複数の第1のソースから複数の第2のシンクへの前記データセットの第2の部分の第2のシャッフルを実行することとを備え、各第2のシンクは、前記複数の第1のソースのうちの1つまたはそれ以上の第1のソースからデータを収集し、前記方法はさらに、
前記1つまたはそれ以上の第2のプロセッサが、前記第2のシャッフル中に前記データセットの前記第2の部分のメタデータを追跡することを備え、
前記第1および第2のシャッフルを実行することは、1つまたはそれ以上の第1のシンクおよび1つまたはそれ以上の第2のシンクが、前記複数の第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、前記データセットを再パーティション化するようにさせる、方法。
【請求項2】
前記複数の第1のシンクと前記複数の第2のシンクとの合計量は、前記複数の第1のソースの量よりも多い、請求項1に記載の方法。
【請求項3】
前記複数の第1のソースからN個のシンク群へのN個のシャッフルを実行することをさらに備え、Nは、2よりも大きな値を有する数であり、前記N個のシャッフルを実行することは、前記N個のシンク群の各々における1つまたはそれ以上のシンクが、前記複数の第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、前記データセットを再パーティション化するようにさせる、請求項1または2に記載の方法。
【請求項4】
前記第1のシャッフルおよび前記第2のシャッフルは、互いに並行して実行される、請求項1~3のいずれか1項に記載の方法。
【請求項5】
前記データセットの前記第1の部分のメタデータを追跡することは、前記データセットの前記第1の部分の第1のシャッフルログを維持することを備え、前記データセットの前記第2の部分のメタデータを追跡することは、前記データセットの前記第2の部分の第2のシャッフルログを維持することを備え、前記第1のシャッフルログおよび第2のシャッフルログは、互いに別々のものである、請求項1~4のいずれか1項に記載の方法。
【請求項6】
前記複数の第1のシンクの各々は、複数の第2のソースのうちの対応する1つであり、前記方法はさらに、
前記第1のシャッフルの完了を判断することと、
前記第1のシャッフルが完了したと判断すると前記データセットの前記第1の部分を含む1つまたはそれ以上の後続のシャッフルを開始することとを備える、請求項1~5のいずれか1項に記載の方法。
【請求項7】
前記1つまたはそれ以上の第1のプロセッサが、前記第2のシャッフルが完了したかどうかにかかわらず前記第1のシャッフルの完了に応答して、前記第1のシャッフルに関連付けられたシャッフルログをフラッシュすることをさらに備える、請求項6に記載の方法。
【請求項8】
前記複数の第2のソースのうちの2つまたはそれ以上の第2のソースから複数の第3のシンクのうちの2つまたはそれ以上の第3のシンクへの前記1つまたはそれ以上の後続のシャッフルのうちの少なくとも1つの後続のシャッフルのために、前記少なくとも1つの後続のシャッフルに含まれるデータの第3のシャッフルログを維持することをさらに備える、請求項6に記載の方法。
【請求項9】
前記少なくとも1つの後続のシャッフルは、前記データセットの前記第1の部分の少なくとも一部と、前記データセットの前記第2の部分の少なくとも一部とを含む、請求項8に記載の方法。
【請求項10】
前記少なくとも1つの後続のシャッフルは、バタフライシャッフルである、請求項9に記載の方法。
【請求項11】
前記第1のシャッフルの前に、前記複数の第1のシンクおよび前記複数の第3のシンクの各々を指定することを備え、前記複数の第3のシンクを指定することは、前記複数の第1のソースからのデータが前記第1のシャッフル中に前記複数の第3のシンクにおいて収集されないようにし、前記方法はさらに、
少なくとも1つの第1のシンクが前記第1のソースのうちの1つまたはそれ以上の第1のソースからの収集を完了したときであって、前記第1のシャッフルの完了前に、前記少なくとも1つの第1のシンクから収集を行うように1つまたはそれ以上の第3のシンクを指定することを備える、請求項8に記載の方法。
【請求項12】
前記データセットは、第1のハッシュ関数を使用して前記複数の第1のソースから前記複数の第1のシンクに渡され、前記第1のハッシュ関数に互いに関係づけられた第2のハッシュ関数を使用して前記複数の第2のソースから前記複数の第3のシンクに渡される、請求項11に記載の方法。
【請求項13】
前記複数の第3のシンクの識別情報は連続的であり、各第3のシンクについて、前記方法は、前記第3のシンクの前記識別情報に基づいて、前記第3のシンクが収集を行う前記第2のソースの識別情報の範囲を計算することをさらに備える、請求項8に記載の方法。
【請求項14】
1つまたはそれ以上のプロセッサが、前記第1のシャッフルの第1のシャッフルログをフラッシュすることと、
前記第1のシャッフルログをフラッシュすることの完了前に、前記第1のシャッフルログから既にフラッシュされた前記データセットの前記第1の部分のセグメントについて前記後続のシャッフルを実行することとをさらに備える、請求項8に記載の方法。
【請求項15】
分散ネットワークにおいてデータを再パーティション化するためのシステムであって、
複数のプロセッサと、
前記複数のプロセッサと通信する1つまたはそれ以上のストレージデバイスとを備え、前記1つまたはそれ以上のストレージデバイスは、命令を含み、前記命令は、前記複数のプロセッサに、
複数の第1のソースから複数の第1のシンクへのデータセットの第1の部分の第1のシャッフルを実行させるように構成され、各第1のシンクは、前記複数の第1のソースのうちの1つまたはそれ以上の第1のソースからデータを収集し、前記命令はさらに、前記複数のプロセッサに、
前記第1のシャッフル中に前記データセットの前記第1の部分のメタデータを追跡させるように構成され、
前記複数の第1のソースから複数の第2のシンクへの前記データセットの第2の部分の第2のシャッフルを実行させるように構成され、各第2のシンクは、前記複数の第1のソースのうちの1つまたはそれ以上の第1のソースからデータを収集し、前記命令はさらに、前記複数のプロセッサに、
前記第2のシャッフル中に前記データセットの前記第2の部分のメタデータを追跡させるように構成され、
前記第1および第2のシャッフルは、1つまたはそれ以上の第1のシンクおよび1つまたはそれ以上の第2のシンクが、前記複数の第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、前記データセットを再パーティション化するようにさせる、システム。
【請求項16】
各第1のシンクおよび各第2のシンクは、前記複数の第1のソースのうちの2つまたはそれ以上の第1のソースからデータを収集し、前記複数の第1のシンクと前記複数の第2のシンクとの合計量は、前記複数の第1のソースの量よりも多い、請求項15に記載のシステム。
【請求項17】
前記命令は、前記複数のプロセッサに、前記複数の第1のソースからN個のシンク群へのN個のシャッフルを実行させるように構成され、Nは、2よりも大きな値を有する数であり、前記N個のシャッフルを実行させることは、前記N個のシンク群の各々における1つまたはそれ以上のシンクが、前記複数の第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、前記データセットを再パーティション化するようにさせる、請求項15または16に記載のシステム。
【請求項18】
前記命令は、前記複数のプロセッサに、前記データセットの前記第1の部分の第1のシャッフルログおよび前記データセットの前記第2の部分の第2のシャッフルログの各々において前記データセットの前記第1の部分の前記メタデータを維持させるように構成され、前記第1のシャッフルログおよび第2のシャッフルログは、互いに独立して維持される、請求項15~17のいずれか1項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本願は、2019年11月4日に出願された米国特許出願番号第16/672,939号の継続出願であり、米国特許出願番号第16/672,939号の開示内容は、引用によって本明細書に援用される。
【背景技術】
【0002】
背景
本開示の技術は、一般に、多くのシンクを必要とするシャッフル演算の効率を向上させるためのシステムに関する。「シャッフル」では、複数のソースからのデータのブロックは、各ソースにおけるデータのブロックを複数のシンクに分散させる分散スキームを使用して、複数のシンクの間で再分散される。シャッフルが終わると、各シンクは、2つ以上のソースからのブロックを含み得る。
【0003】
従来、シャッフルデータは、そのソースによって編成されて、各シンクについてのその対応するソースにマッピングされていた。図1は、シャッフル演算の一例を示す機能ブロック図であり、ここでは、ソース10に格納されたデータのブロックは、シンク30にシャッフルされる。図1の例では、14個のソースおよび16個のシンクがある。各シンクは、4つの異なるソースからのデータにマッピングされて、このデータを受信する。たとえば、シンク31および32の各々は、シャッフルされたデータをソース11,12,13および14から受信するようにマッピングされる。さらに他の例では、シンク33および34の各々は、ソース11および12からソース13、ソース13からソース15、およびソース15からシンク33および34にマッピングされたシャッフルされたデータにマッピングされて、このシャッフルされたデータを受信する。図1のシャッフルではシンクとソースとの間に合計64回のマッピングがあり、16個のシンクの各々について4個のソースがある。
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来、シャッフル演算は、各ソースがそのデータを共通ログに付加することを必要とし得る。したがって、シャッフル演算は、追加のソースを収容するように容易に調整することができ、シャッフルを完了するための演算の回数は、ソースの数が増加するにつれて線形に増加し得る。しかし、シンクは、複数のソースからデータを受信し、そのためいくつかの異なるソースにマッピングされるので、各シンクは、データの受信元となるソースを全てスキャンしなければならない。したがって、シャッフル演算は、追加のシンクを収容するように調整することが容易ではない。なぜなら、シンクの数が増加するにつれて、シャッフルを完了するための演算の回数が二次式的に増加し得るからである。シャッフル演算で処理されるデータ量が増加するにつれて、データは限られた数のシンクに収まらなくなるため、データが再パーティション化されるシンクの数を増やすことが必要になる。
【課題を解決するための手段】
【0005】
簡単な概要
本開示の一局面は、分散ネットワークにおいてデータを再パーティション化する方法に向けられる。上記方法は、1つまたは複数のプロセッサが、複数の第1のソースから複数の第1のシンクへのデータセットの第1のパスを実行するステップを含み得て、各第1のシンクは、上記第1のソースのうちの1つまたは複数の第1のソースからデータを収集し、上記方法はさらに、上記1つまたは複数のプロセッサが、複数の第2のソースから複数
の第2のシンクへの上記データセットの第2のパスを実行するステップを含み得て、上記複数の第1のシンクの各々は、上記複数の第2のソースのうちの1つに対応し、各第2のシンクは、上記第2のソースのうちの1つまたは複数の第2のソースからデータを収集する。上記第1および第2のパスを実行するステップは、1つまたは複数の第2のシンクが、上記第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、上記データセットを再パーティション化するようにさせ得る。
【0006】
いくつかの例において、上記複数の第1のシンクの量は、上記複数の第1のソースの量よりも多いであろう。
【0007】
いくつかの例において、各第1のシンクは、上記第1のソースのうちの2つまたはそれ以上の第1のソースからデータを収集し得る。
【0008】
いくつかの例において、上記複数の第2のシンクの量は、上記複数の第2のソースの量よりも多いであろう。
【0009】
いくつかの例において、上記方法は、N個のパスを実行するステップをさらに含み得て、Nは、2よりも大きな値を有する数である。各々の所与のパスについて、複数のシンクは、複数のソースのうちの1つまたは複数のソースからデータを収集し得て、各ソースは、前のパスのシンクに対応する。上記N個のパスを実行するステップは、1つまたは複数の第Nのシンクが、上記第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、上記データセットを再パーティション化するようにさせ得る。
【0010】
いくつかの例において、上記N個のパスのうちの少なくとも1つのパスについて、上記パスの各シンクは、上記パスの上記ソースのうちの2つまたはそれ以上のソースからデータを収集し得て、上記パスの上記2つまたはそれ以上のソースの各々は、直前のパスの別のソースから生じたデータを含み得る。
【0011】
いくつかの例において、上記N個のパスのうちの少なくとも別のパスについて、上記パスの各シンクは、上記パスの上記ソースのうちの2つまたはそれ以上のソースからデータを収集し得て、上記パスの上記2つまたはそれ以上のソースの各々は、直前のパスの別のソースから生じたデータを含み得る。
【0012】
いくつかの例において、上記少なくとも1つのパスおよび上記少なくとも別のパスは、上記N個のパスのうちの連続するパスであり得る。
【0013】
いくつかの例において、上記複数の第1のシンクの各々は、上記複数の第2のソースのうちの対応する1つであり得る。上記方法はさらに、上記第1のパスの完了を判断するステップと、第1のパスが完了したと判断すると上記第2のパスを開始するステップとを含み得る。
【0014】
いくつかの例において、上記複数の第1のシンクの各々は、上記複数の第2のソースのうちの対応する1つであり得て、上記方法はさらに、上記第1のパスの前に、上記複数の第1のシンクおよび上記複数の第2のシンクの各々を指定するステップを含み得て、上記複数の第2のシンクを指定するステップは、上記複数の第1のソースからのデータが上記第1のパス中に上記複数の第2のシンクにおいて収集されないようにし、上記方法はさらに、少なくとも1つの第1のシンクが上記第1のソースのうちの1つまたは複数の第1のソースからの収集を完了したときであって、上記第1のパスの完了前に、上記少なくとも1つの第1のシンクから収集を行うように1つまたは複数の第2のシンクを指定するステ
ップを含み得る。
【0015】
いくつかの例において、上記データセットは、第1のハッシュ関数を使用して上記複数の第1のソースから上記複数の第1のシンクに渡され、上記第1のハッシュ関数に相関付けられ得る第2のハッシュ関数を使用して上記複数の第2のソースから上記複数の第2のシンクに渡され得る。
【0016】
いくつかの例において、上記複数の第2のシンクの識別情報は連続的であり得て、各第2のシンクについて、上記方法は、上記第2のシンクが収集を行う上記第2のソースの識別情報の範囲を、上記第2のシンクの上記識別情報に基づいて計算するステップを含み得る。
【0017】
いくつかの例において、上記方法は、1つまたは複数のプロセッサが、上記第1のパスのシャッフルログをフラッシュするステップと、上記フラッシュするステップの完了前に、上記第1のパスの上記シャッフルログからフラッシュされた上記データセットのセグメントについて上記第2のパスを実行するステップとをさらに含み得る。
【0018】
いくつかの例において、上記第2のパスを実行するステップは、複数のシャッフル演算を実行するステップを含み得る。上記第2のソースの第1の部分は、第1のデータログに含まれ得て、上記第2のソースの第2の部分は、上記第2のデータログに含まれ得る。
【0019】
いくつかの例において、上記複数のシャッフルの各々は、上記1つまたは複数のプロセッサによって並列に実行され得て、上記第1のデータログおよび上記第2のデータログの両方に含まれるデータは、上記第2のソースの上記第1および第2の部分から並列にフラッシュされ得る。
【0020】
本開示の別の局面は、分散ネットワークにおいてデータを再パーティション化するためのシステムに向けられ、1つまたは複数のプロセッサと、上記1つまたは複数のプロセッサと通信する1つまたは複数のストレージデバイスとを含む。上記1つまたは複数のストレージデバイスは、命令を含み得て、上記命令は、上記1つまたは複数のプロセッサに、複数の第1のソースから複数の第1のシンクへのデータセットの第1のパスを実行させるように構成され、各第1のシンクは、上記第1のソースのうちの1つまたは複数の第1のソースからデータを収集し、上記命令はさらに、上記1つまたは複数のプロセッサに、複数の第2のソースから複数の第2のシンクへの上記データセットの第2のパスを実行させるように構成され、上記複数の第1のシンクの各々は、上記複数の第2のソースのうちの1つに対応し、各第2のシンクは、上記第2のソースのうちの1つまたは複数の第2のソースからデータを収集する。上記第1および第2のパスは、1つまたは複数の第2のシンクが、上記第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、上記データセットを再パーティション化するようにさせ得る。
【0021】
いくつかの例において、各第1のシンクは、上記第1のソースのうちの2つまたはそれ以上の第1のソースからデータを収集し得て、上記複数の第2のシンクの量は、上記複数の第2のソースの量よりも多いであろう。
【0022】
いくつかの例において、上記命令は、上記1つまたは複数のプロセッサに、N個のパスを実行させるように構成され得て、Nは、2よりも大きな値を有する数である。各々の所与のパスについて、複数のシンクは、複数のソースのうちの1つまたは複数のソースからデータを収集し得て、各ソースは、前のパスのシンクに対応する。上記N個のパスを実行させることは、1つまたは複数の第Nのシンクが、上記第1のソースのうちの2つまたはそれ以上の第1のソースから生じたデータを収集するように、上記データセットを再パー
ティション化するようにさせ得る。
【0023】
いくつかの例において、上記N個のパスのうちの少なくとも1つのパスについて、上記パスの各シンクは、上記パスの上記ソースのうちの2つまたはそれ以上のソースからデータを収集し得て、上記パスの上記2つまたはそれ以上のソースの各々は、直前のパスの別のソースから生じたデータを含む。上記N個のパスのうちの少なくとも1つの他のパスについて、上記パスの各シンクは、上記他のパスの上記ソースのうちの2つまたはそれ以上のソースからデータを収集し得て、上記他のパスの上記2つまたはそれ以上のソースの各々は、直前のパスの別のソースから生じたデータを含み得る。上記少なくとも1つのパスおよび上記少なくとも1つの他のパスは、上記N個のパスのうちの連続するパスであり得る。
【図面の簡単な説明】
【0024】
図1】例示的な従前のデータ分散スキームを示すブロック図である。
図2A】本開示の局面に係る、分散データストア内の例示的なシステムのブロック図である。
図2B】本開示の局面に係る、例示的なシステムおよびコンピューティングデバイスのブロック図である。
図3】本開示の局面に係る、例示的なマルチパスシャッフルを示すフロー図である。
図4】本開示の局面に係る、例示的なデータ分散スキームを示すブロック図である。
図5】本開示の局面に係る、例示的なデータ分散スキームを示すブロック図である。
図6】本開示の局面に係る、例示的なデータ分散スキームを示すブロック図である。
図7】本開示の局面に係る、例示的なデータ分散スキームを示すブロック図である。
図8】本開示の局面に係る、例示的なワークフローを示すブロック図である。
図9】本開示の局面に係る、例示的なワークフローを示すブロック図である。
【発明を実施するための形態】
【0025】
詳細な説明
概要
シンクの数の増加にともなってシャッフル演算を調整するために、本開示は、シャッフル演算を複数のパスに分割する。このようにして、各シンクによって読み取られるソースの数を減少させ、それによって、各シンクについてシャッフル演算のオーバーヘッドの量を減少させる。マルチパスシャッフル演算は、さまざまな方法で実現することができ、各実現例は、異なる態様で効率を向上させることができる。
【0026】
いくつかの実現例において、マルチパスシャッフルの少なくとも1つのパスは、「シンク分割」であり得る。シンク分割では、各々の所与のソースからのデータは、複数のシンクの間で分散されるが、各シンクは、1つのソースのみからデータを読み取る。マルチパスシャッフルの1つのパスにおいてシンク分割を実行することにより、より少数のシンクを使用してマルチパスシャッフルの他のパスを実行できるようになり得る。
【0027】
たとえば、100,000個のソースから100,000個のシンクにデータを分散させることが望まれる場合、最初に、データは1,000個のシンクに渡され得て、次いで、1,000個のシンクの各シンクのデータは別々に100個のシンクの間で分割され得て、その結果、分割後には合計100,000個のシンクが生じる。第1のパスにおいて
、1,000個のシンクの各々は、ある一定数のソースからデータを読み取り得る。このパスはシャッフルであり、各シンクは複数のソースからデータを読み取るので、このパスにおけるシンクの数を100分の1に減少させることにより、パスのオーバーヘッドは大幅に減少する。その後の分割では、各シンクは1つのソースのみから読み取ることになり、必要なオーバーヘッドが大幅に少なくなる。その結果、シンクによって読み取られるソースの数は、どちらのパスにおいても減少する。
【0028】
さらにまたは代替的に、分割は、マルチパスシャッフルの第1のパスとして実行されてもよい。シャッフルが多数のソースからのデータを含む場合には、早くからデータを分割することが好ましいであろう。たとえば、ソースが1,000,000個あって2,000,000個のシンクに分散される場合、1,000,000個のソースからのデータは、最初に各々2個のシンクに分割され得る。次いで、結果として生じる2,000,000個のシンクは、2,000個のグループに分けられ得て、各グループは、1,000個の異なるソースからデータを取得して、このデータを1,000個のシンクにシャッフルする。第1のシャッフルのシンクは、グループ分けし直されて、次いで同様の態様でシャッフルされ得て、その結果、各々の元のソースは比較的完全に分散されることになる。この形態のグループ分けおよび再シャッフルは、本明細書では「バタフライシャッフル」と称される。従前の例と同様に、各パスにおけるオーバーヘッドは大幅に減少する。バタフライシャッフルの第1のパスのオーバーヘッドは、それが分割であることによってシンクが1つのソースのみから読み取るという理由で、減少する。その後のパスにおけるオーバーヘッドは、1,000個のソースと1,000個のシンクとの間の各々の個々のシャッフルが1,000,000個のソースと1,000,000個のシンクとの間のシャッフルよりも必要なオーバーヘッドが二次式的に少ないという理由で、減少する。別の言い方をすれば、各パスにおいて実行されるシャッフルの総回数は線形に増加するが、各シャッフルの処理は、1回の1,000,000から1,000,000へのシャッフルと比較して、二次式的に減少する。
【0029】
バタフライシャッフルの上記の例では、1つのパスから次のパスまでに実行される独立したシャッフルの回数は一定のままである。マルチパスシャッフルの他の例では、1つのパスから次のパスまでに実行されるシャッフルの回数は増加し得る。たとえば、10,000個のソースから20,000個のシンクにデータをシャッフルする最初のパスの後に、10,000個のソースから20,000個のシンクへの2つの独立したシャッフルを有する第2のパスが続くことがあり得る。第2のパスの結果は、データを40,000個のシンクの間で分散させるであろう。第2のパスの独立したシャッフルの各々は、シャッフルされるデータのブロックのためのメタデータの独自のログを有し得る。これは、シャッフル演算全体によって処理されるシンクの数を増やすことにとって好ましいであろう。なぜなら、各ログは、パス全体の全てのブロックではなく個々のシャッフルのブロックを読み取るシンクのみについてメタデータを含むからである。
【0030】
マルチパスシャッフルの使用は、シャッフル中にログからメタデータをフラッシュする必要がある場合にフラッシュ演算の効率を向上させることができる。これは、第1のシャッフルから既にフラッシュされたデータのみを分散させるようにマルチパスシャッフルの第2のパスを制御できるからである。さらに、場合によっては、複数のパスを使用してシャッフルを完了することにより、ログからメタデータをフラッシュする必要性を完全になくすことができる。なぜなら、所与のセグメントについてシンク宛先の総数を減少させることが、このセグメントのために格納されるメタデータの総量を減少させることにもなるからである。
【0031】
場合によっては、マルチパスシャッフルは、もっと後になるまで後続のパスのシンクのパーティション化を延期することによって単一のシャッフルとして実現され得る。たとえ
ば、第1のパスにおいてシンクのうちの1,000個を使用して100,000個のソースから100,000個のシンクにデータをシャッフルする例では、残りの99,000個のシンクのパーティション化は延期され得る。これにより、100,000個のソースはそれらの99,000個のシンクに直接書き込むことができなくなる。ある例では、99,000個のシンクは、第1のパス全体が完了するまでブロックされ得る。別の例では、第1のパスが終了する前に次のパスが開始し得るが、次のパスのシンクのパーティション化スキームは、ソースがそれらに直接書き込むことができないように変更され得る。
【0032】
上記の実現例は、特にシンクが数万個を超える大きさに調整されると、シャッフル性能を向上させることができる。たとえば、テスト結果は、100,000個のソースから100,000個のシンクにおよそ2TiB(テビバイト)のデータをシャッフルする速度は、1,000個のシンクへの第1のパスおよび100,000個のシンクへの第2の分割パスを実行することによって2倍以上にできることを示した。この結果、シャッフルの実行に必要なリソース、コストおよび時間が大幅に減少する。
【0033】
例示的なシステム
図2Aは、分散コンピューティング環境を含む例示的なシステムを示す図である。複数のデータセンタ160,170,180は、たとえばネットワーク150を介して通信可能に結合され得る。データセンタ160,170,180はさらに、ネットワーク150を介して1つまたは複数のクライアントデバイス(クライアント110など)と通信し得る。したがって、たとえば、クライアント110は、「クラウド」内で演算を実行し得る。いくつかの例において、データセンタ160,170,180はさらに、コントローラ190と通信し得る。
【0034】
各クライアント110は、人が使用することを意図したパーソナルコンピュータまたはモバイルデバイスであり得て、パーソナルコンピュータに通常見られる全ての内部コンポーネント(中央処理装置(CPU)、CD-ROM、ハードドライブ、ディスプレイデバイス(たとえば、スクリーンを有するモニタ、プロジェクタ、タッチスクリーン、小型LCDスクリーン、テレビ、またはプロセッサ120によって処理された情報を表示するように動作可能であり得る電気デバイスなどの別のデバイス)、スピーカ、モデムおよび/またはネットワークインターフェイスデバイス、ユーザ入力(マウス、キーボード、タッチスクリーンまたはマイクロフォン)、ならびに、これらの要素を互いに接続するために使用される全てのコンポーネントなど)を有する。さらに、本明細書に記載されているシステムおよび方法に係るコンピュータは、命令を処理して、人間および他のコンピュータ(汎用コンピュータ、PDA、タブレット、携帯電話、スマートウォッチ、ローカルストレージ機能を持たないネットワークコンピュータ、テレビのためのセットトップボックス、および他のネットワーク接続されたデバイスを含む)との間でデータを伝送することができるデバイスを含み得る。
【0035】
クライアント110は、プロセッサ120と、メモリ130と、汎用コンピュータの中に一般的に存在する他のコンポーネントとを含み得る。メモリ130は、プロセッサ120によってアクセス可能な情報を格納することができ、この情報は、プロセッサ120によって実行され得る命令132を含む。メモリは、プロセッサ120によって検索、操作または格納され得るデータ134も含み得る。メモリ130は、プロセッサ120によってアクセス可能な情報を格納することができるタイプの非一時的なコンピュータ読取可能媒体(ハードドライブ、ソリッドステートドライブ、テープドライブ、光学式ストレージ、メモリカード、ROM、RAM、DVD、CD-ROM、書き込み可能および読み取り専用メモリなど)であり得る。プロセッサ120は、周知のプロセッサまたは他のあまり知られていないタイプのプロセッサであり得る。代替的に、プロセッサ120は、専用のコントローラ(ASICなど)であってもよい。
【0036】
命令132は、プロセッサ120によって直接実行される命令のセット(マシンコードなど)またはプロセッサ120によって間接的に実行される命令のセット(スクリプトなど)であり得る。この点に関して、「命令」、「ステップ」および「プログラム」という語は、本明細書では同義で使用することができる。命令132は、プロセッサ120による直接処理のためのオブジェクトコードフォーマットで、または他のタイプのコンピュータ言語(オンデマンドで解釈されるか、もしくは事前にコンパイルされるスクリプトもしくは独立したソースコードモジュールの集合体を含む)で格納され得る。
【0037】
データ134は、命令132に従ってプロセッサ120によって検索、格納または修正され得る。たとえば、システムおよび方法は、特定のデータ構造によって限定されるものではないが、データ134は、コンピュータレジスタに格納される場合もあれば、複数の異なるフィールドおよびレコードもしくはドキュメントを有する構造としてデータストアに格納される場合もあれば、またはバッファに格納される場合もある。また、データ134は、コンピュータ読取可能なフォーマット(二進値、ASCIIまたはユニコードなどであるが、これらに限定されるものではない)でフォーマットされ得る。さらに、データ134は、番号、説明文、プロプライエタリコード、ポインタ、他のネットワーク場所を含む他のメモリに格納されたデータへの参照、または関連データを計算する機能によって使用される情報のような関連情報を識別するのに十分な情報を含み得る。
【0038】
図2Aは、プロセッサ120およびメモリ130を同一のブロック内にあるものとして機能的に示しているが、プロセッサ120およびメモリ130は、実際には、同一の物理的なハウジング内に格納される場合もあればそうでない場合もある複数のプロセッサおよびメモリを含み得る。たとえば、命令132およびデータ134のうちの一部は、リードオンリコンピュータチップ内の取り外し可能なCD-ROMなどに格納され得る。命令およびデータの一部または全ては、プロセッサ120から物理的に離れた場所に格納されるが、依然としてプロセッサ120によってアクセス可能であり得る。同様に、プロセッサ120は、実際には、並列に動作する場合もあればそうでない場合もあるプロセッサの集合体を含み得る。
【0039】
データセンタ160~180は、互いにかなり離れて位置決めされ得る。たとえば、これらのデータセンタは、世界中のさまざまな国に位置決めされ得る。各データセンタ160,170,180は、1つまたは複数のコンピューティングデバイス(プロセッサ、サーバ、シャードなど)を含み得る。たとえば、図2Aに示されるように、データセンタ160は、コンピューティングデバイス162,164を含み、データセンタ170は、コンピューティングデバイス172を含み、データセンタ180は、コンピューティングデバイス181~186を含む。いくつかの例に従って、これらのコンピューティングデバイスは、ホストマシン上で動作する1つまたは複数の仮想マシンを含み得る。たとえば、コンピューティングデバイス162は、オペレーティングシステムおよびアプリケーションを実行する複数の仮想マシン166,167をサポートするホストマシンであり得る。図2Aには仮想マシン166,167が少しだけ示されているが、任意の数の仮想マシンが任意の数のホストコンピューティングデバイスによってサポートされてもよいということが理解されるべきである。さらに、図2Aに示される構成は一例に過ぎず、例示的なデータセンタ160~180の各々におけるコンピューティングデバイスは、互いに同一である場合もあれば異なっている場合もあるさまざまな構造およびコンポーネントを有してもよい、ということが理解されるべきである。
【0040】
たとえば、第1のデータセンタの1つまたは複数のコンピューティングデバイスによっていくつかの演算が実行され、第2のデータセンタの1つまたは複数のコンピューティングデバイスによって他の演算が実行されるように、これらのコンピューティングデバイス
にわたってプログラムが実行され得る。いくつかの例では、さまざまなデータセンタにおけるコンピューティングデバイスは、異なる容量を有し得る。たとえば、異なるコンピューティングデバイスは、異なる処理速度、ワークロードなどを有し得る。これらのコンピューティングデバイスのうちの一部のみが示されているが、各データセンタ160,170,180は任意の数のコンピューティングデバイスを含んでもよく、第1のデータセンタにおけるコンピューティングデバイスの数は、第2のデータセンタにおけるコンピューティングデバイスの数とは異なっていてもよい、ということが理解されるべきである。さらに、各データセンタ160~180におけるコンピューティングデバイスの数は、時が経つにつれて(たとえば、ハードウェアが除去、交換、アップグレードまたは拡張されると)変動してもよい、ということが理解されるべきである。
【0041】
いくつかの例において、各データセンタ160~180は、いくつかのストレージデバイス(図示せず)(ハードドライブ、ランダムアクセスメモリ、ディスク、ディスクアレイ、テープドライブ、またはその他のタイプのストレージデバイスなど)も含み得る。データセンタ160~180は、いくつかのアーキテクチャおよび技術のうちのいずれかを実現し得て、これらのアーキテクチャおよび技術は、ダイレクト・アタッチト・ストレージ(DAS)、ネットワーク・アタッチト・ストレージ(NAS)、ストレージエリアネットワーク(SAN)、ファイバチャネル(FC)、ファイバチャネル・オーバー・イーサネット(FCoE)、混合アーキテクチャネットワークなどを含むが、これらに限定されるものではない。これらのデータセンタは、ストレージデバイスに加えて、いくつかの他のデバイス(ケーブリング、ルータなど)を含み得る。さらに、いくつかの例では、データセンタ160~180は、仮想化環境であり得る。さらに、データセンタ160~180が少しだけ示されているが、多数のデータセンタがネットワーク150および/またはさらに他のネットワークを介して結合されてもよい。
【0042】
いくつかの例において、コントローラ190は、データセンタ160~180におけるコンピューティングデバイスと通信し得て、プログラムの実行を容易にし得る。たとえば、コントローラ190は、各コンピューティングデバイスの容量、ステータス、ワークロードまたは他の情報を追跡して、このような情報を使用してタスクを割り当て得る。コントローラ190は、上記のクライアント110と同様に、プロセッサ198と、データ194および命令196を含むメモリ192とを含み得る。コントローラ190は、格納されたデータをデータセンタ160~180におけるコンピューティングデバイスの間で再分散または再パーティション化するように構成され得る。
【0043】
クライアント110、データセンタ160~180およびコントローラ190は、ネットワーク150を介するなどして直接的および間接的に通信を行うことが可能であり得る。たとえば、インターネットソケットを使用して、クライアント110は、インターネットプロトコルスイートを介して、リモートサーバ上で動作するサービスに接続することができる。サーバは、情報を送受信するための開始接続を受け付け得るリスニングソケットをセットアップすることができる。ネットワーク150および介入ノードは、さまざまな構成およびプロトコルを含み得て、これらの構成およびプロトコルは、インターネット、ワールドワイドウェブ、イントラネット、仮想プライベートネットワーク、ワイドエリアネットワーク、ローカルネットワーク、1つまたは複数の企業に専有の通信プロトコルを使用したプライベートネットワーク、イーサネット(登録商標)、WiFi(たとえば、702.71、702.71b、g、nまたは他のこのような規格)、RPC、HTTP、および上記のさまざまな組み合わせを含む。このような通信は、他のコンピュータ(モデム(たとえば、ダイアルアップ、ケーブルまたは光ファイバ)およびワイヤレスインターフェイスなど)との間でデータを伝送することができるデバイスによって容易にされ得る。
【0044】
クライアント110は、データセンタ160~180のコンピューティングデバイスに格納されたデータへのアクセスを要求し得る。このような要求は、コントローラ190および/またはデータセンタ160~180におけるコンピューティングデバイスのうちの1つまたは複数のコンピューティングデバイスによって処理され得る。いくつかの例において、要求に対する応答は、本明細書でさらに詳細に説明する演算を使用するなどしたデータの操作を含む、または必要とし得る。
【0045】
図2Bは、本開示に係る、シャッフル演算を実行するための1つまたは複数のコンピューティングデバイス200を有する例示的なシステムを示すブロック図である。コンピューティングデバイス200は、分散データ処理システムに含まれ得て、図2Aに示されるようなデータセンタ160~180のうちの1つのコンピューティングデバイスまたはコントローラ190などである。コンピューティングデバイス200は、データを再パーティション化することによって大量のデータに対して複雑なクエリ(「JOIN」および「GROUP BY」演算など)を実行するように構成され得る。このような演算は、クエリに応答して実行されてもよい。いくつかの例では、これらのクエリは、クライアントコンピューティングデバイスによって受信され得る。いくつかの例では、これらのクエリは、クライアントコンピューティングデバイスから受信された他の命令またはクエリを実行するために必要とされ得る。
【0046】
分散データ処理システムにおけるデータは、一時的に(分散インメモリファイルシステムもしくはディスクに、またはこれら2つの任意の組み合わせによって、など)格納され得る。データは、いくつかのデータソースA~AからいくつかのデータシンクB~Bにシャッフルされ得る。これらのソースおよびシンクは、再パーティション化中にデータを追跡する目的で仮想アドレスを割り当てられ得る。いくつかの例において、データは、仮想マシン(図2Aのデータセンタ160~180によってホストされる仮想マシン166~167など)に格納され得る。
【0047】
コンピューティングデバイス200は、1つまたは複数のプロセッサ210、サーバ、シャード、セルなどを含み得る。各コンピューティングデバイスは、任意の数のプロセッサまたはコンピューティングデバイスを含んでもよく、コンピューティングデバイスにおけるこのようなデバイスの数は、時が経つにつれて(たとえば、ハードウェアが除去、交換、アップグレードまたは拡張されると)変動してもよい、ということが理解されるべきである。
【0048】
コンピューティングデバイス200は、いくつかのストレージデバイスまたはメモリ220(ハードドライブ、ランダムアクセスメモリ、ディスク、ディスクアレイ、テープドライブ、またはその他のタイプのストレージデバイスなど)も含み得る。コンピューティングデバイス200は、いくつかのアーキテクチャおよび技術のうちのいずれかを実現し得て、これらのアーキテクチャおよび技術は、ダイレクト・アタッチト・ストレージ(DAS)、ネットワーク・アタッチト・ストレージ(NAS)、ストレージエリアネットワーク(SAN)、ファイバチャネル(FC)、ファイバチャネル・オーバー・イーサネット(FCoE)、混合アーキテクチャネットワークなどを含むが、これらに限定されるものではない。コンピューティングデバイス200は、ストレージデバイスに加えて、コンピューティングデバイス間での入出力を可能にするための通信デバイス250などのいくつかの他のデバイス(ケーブリング、ルータなど)を含み得る。
【0049】
各コンピューティングデバイスのメモリ220は、1つまたは複数のプロセッサ210によってアクセス可能な情報を格納することができ、この情報は、コンピューティングデバイス200において受信される、またはコンピューティングデバイス200によって生成されるデータ230と、1つまたは複数のプロセッサ210によって実行可能な命令2
40とを含む。
【0050】
データ230は、システムのソースA~AとシンクB~Bとの間のシャッフル演算を追跡するシャッフルログ232を含み得る。シャッフルログ232は、シャッフル演算においてシャッフルされるデータセグメント234,236の詳細(各セグメントについてのセグメント長およびコミットステータスについての情報を含む個々のデータセグメント238のメタデータなど)を含み得る。概念上、シャッフルデータは、ソースとそれらのそれぞれの宛先シンクとの間のマッピングとしての表現であり得る。
【0051】
以下でさらに詳細に説明するように、シャッフル演算は、第1のパスから第Nのパスまでの複数のパスに分割され得る。したがって、データセグメント詳細は、図2Bの例示的なシャッフルログ232では、別々に格納されているように示されている。各パスについて詳細を別々に追跡することは、データセグメント詳細234,236およびメタデータ238のストレージの管理に役立ち得る。たとえば、第1のパスが完了してデータがその宛先シンクのログファイルに格納されると、たとえ後続のパスが進行中であっても、第1のパスの詳細234はメモリ220からフラッシュされ得る。他の例では、シャッフルログ232とシンクのデータログとの間には重複があってもよい。
【0052】
命令240は、データシャッフルの演算を制御するように構成されたシャッフル制御プログラム242を含み得る。命令240はさらに、シャッフルログ232のデータセグメント詳細234,236およびメタデータ238のストレージを管理するように構成されたシャッフルログフラッシュプログラム244を含み得る。格納されたデータおよびプログラムの上記の例については、以下でさらに詳細に説明する。
【0053】
例示的な方法
図3は、いくつかのソースからいくつかのシンクにデータをシャッフルする例示的なマルチパスシャッフルを示すフロー図300である。このフロー図における動作は、シャッフルされたデータの格納場所(ソースA~AおよびシンクB~Bなど)と通信するコンピューティングデバイス200のプロセッサ(図2Bの1つまたは複数のプロセッサ210など)によって実行され得る。
【0054】
ブロック310において、データの第1のパスが実行され得る。第1のパスは、第1のソースのセットから第1のシンクのセットにデータを移動させることを含み得る。次いで、ブロック320において、データの第2のパスが実行され得る。第2のパスは、第1のシンクのセットに対応し得る第2のソースのセットから第2のシンクのセットにデータを移動させることを含み得る。
【0055】
たとえば、図4は、一連の2つのパスにおいてシャッフル演算を使用してデータがシャッフルされるデータ分散スキームおよびセットアップの一例を示す図である。シャッフル演算は、2つの別々のパス、すなわち第1のソース400から第1のシンク410への第1のパスと、第1のシンク410に対応する第2のソース420から第2のシンク430への第2のパスと、に分割される。第1のパスにおいて、第1のシンク410の各々は、第1のソース400のうちの3つの異なる第1のソース400からデータのセグメントを受信する。たとえば、シンク411は、ソース401,402および403の各々からデータを受信する。別の例では、シンク418は、ソース401,402および406の各々からデータを受信する。シンクの各々は、データの受信元であるソースにマッピングされるので、図4のシャッフルの第1のパスでは第1のシンクと第1のソースとの間に合計24回のマッピング、すなわち8個のシンクの各々について3回のマッピングがある。第2のパスにおいて、第2のシンク430の各々は、第2のシンク410に対応し得る第2のソース420のうちの1つからデータを受信する。たとえば、シンク431および43
2の各々は、ソース421からデータを受信する。たとえば、シンク445および446の各々は、ソース418からデータを受信する。シンクの各々は、データの受信元であるソースにのみマッピングされるので、図4のシャッフルの第2のパスでは第2のシンクと第2のソースとの間に合計16回のマッピング、すなわち16個のシンクの各々について1回のマッピングしかない。合計して、ツーパスシャッフル中に追跡されるマッピングの総回数は40回、すなわち第1のパスの24回のマッピングおよび第2のパスの16回のマッピングであり、これは、シングルパスとして実行された場合の同一のシャッフルの合計64回のマッピングよりも少ない。
【0056】
シャッフル演算に関与するソースおよびシンクの数が増加するにつれて、複数のパスを実行する利点も増加する。たとえば、単一のパスにおいて100,000個のソースから100,000個のシンクにデータを分散させるために、各シンクは、多数のソース(たとえば、10,000個のソース)からデータを読み取らなければならない。これは、ソースとシンクとの間に合計10,000×100,000=10億回のマッピングを必要とするであろう。たとえ各シンクが1,000個のソースから読み取るとしても、依然として1億回のマッピングを追跡する必要があるだろう。第2のパスを導入することにより、最初にデータをソースからシンクの小さな初期サブセット(1,000個のシンクなど)に渡すことが可能になり、次いで、1,000個のシンクの各々のデータは、別々に100個のシンクの間で分割され得る。第1のパスにおいて、1,000個のシンクの各々が100,000個のソースのうちの10,000個または1,000個からデータを読み取る場合、マッピングの総回数は、それぞれ1,000万回または100万回になるだろう。第2のパスにおいて、100,000個のシンクの各々は、単一のソースにマッピングされて、合計100,000回のマッピングになるだろう。したがって、ツーパスシャッフルにおいて追跡されるマッピングの総回数は、10,000個の中間シンクを使用する場合には1,010万回のマッピングになり、または、1,000個の中間シンクを使用する場合には110万回になるだろう。このマッピングの回数は、シングルパスシナリオの10億回または1億回のマッピングよりも大幅に少ない。実験は、1,000個の中間シンクを使用して約2TiBのデータをシャッフルするシャッフル演算が、中間シンクなしに実行される同一の演算の少なくとも2倍高速であり得ることを示唆している。
【0057】
図4の上記の例は、第2のパスが「シンク分割」と称される1つのこのようなツーパスシャッフルを示している。シンク分割において、各々の所与のソースからのデータは、複数のシンクの間で分散されるが、各シンクは、1つのソースのみからデータを読み取る。マルチパスシャッフルの1つのパスにおけるシンク分割により、より少数のシンクを使用してマルチパスシャッフルの他の前のパスを実行することが可能になり得る。上記の例示的なシナリオから分かるように、シャッフル演算の後続のパスとしてシンク分割を導入することにより、前のパスにおけるオーバーヘッドを大幅に減らすことができる。なぜなら、複数のソースにマッピングされて複数のソースからデータを読み取る必要がある中間シンクの数がはるかに少ないからである。また、シンク分割を導入することにより、最後のパスにおけるオーバーヘッドも大幅に減らすことができる。なぜなら、最後のシンクの各々は、1つのソースのみにマッピングされて1つのソースのみからデータを読み取るからである。
【0058】
上記の例において、1つのパスのシンクは、次のパスのソースに「対応する」ものとされている。この対応関係は、1つのパスのシンクが次のパスのソースと同一であるというものであり得て、これは、それらのアドレスが同一であることを意味する。代替的に、シンクのアドレスは、次のパスのソースのアドレスとは異なっていてもよいが、シンクのデータは全て、次のパスの対応するソースのアドレスに移動され得る。
【0059】
マルチパスシャッフルは、さらに他の演算(第3のパス、第4のパスなど)を含み得る
図3の例示的なマルチパスシャッフルでは、パスは、第Nのパスに至るまで実行されるように示されている。特に、ブロック330において、データの第N-1のパスを実行し得る。第N-1のパスは、第N-2のシンクのセットに対応し得る第N-1のソースのセットから第N-1のシンクのセットにデータを移動させることを含み得る。さらに、ブロック340において、データの第Nの最後のパスを実行し得る。第Nのパスは、第N-1のシンクのセットに対応し得る第Nのソースのセットから第Nのシンクのセットにデータを移動させることを含み得る。
【0060】
Nの値は、シャッフルされるデータの量、シャッフル演算の目的、および実行されているシャッフル演算の特定のタイプによってさまざまであり得る。たとえば、図4の例に示されるシンク分割の場合、比較的少数のパス(2つのパスなど)を有することで事足りるであろう。他のタイプのシャッフル演算では、演算を3つまたはそれ以上のパスに分割することが有益であろう。
【0061】
図5は、「バタフライ」シャッフル分散スキームの一例を示す図である。バタフライでは、限られた数のソースが限られた数のシンクと対にされ、次いで、これらのソースからのデータは、対にされたシンクの間でシャッフルされる。したがって、各パスにおいて全てのデータがシャッフルされるが、別々のチャンクの状態でシャッフルされる。演算全体に複数のバタフライパスを導入することにより、各々の別々のチャンクからのシャッフルされたデータを、他の別々にシャッフルされたチャンクからのデータと対にすることが可能になる。
【0062】
図5の例において、シャッフル演算は、第1のソース500から第1のシンク510への第1のパスと、第2のソース520(第1のシンク510に対応する)から第2のシンク530への第2のパスと、第3のソース540(第2のシンク530に対応する)から第3のシンク550への第3のパスとを含む。第1のパスにおいて、第1のシンク510の各々は、第1のソース500のうちの1つからデータのセグメントを受信する。たとえば、シンク511は、ソース501からデータを受信し、シンク513は、ソース502からデータを受信し、シンク515は、ソース503からデータを受信し、シンク517は、ソース504からデータを受信する。各々の後続のパスにおいて、パスの各シンクは、前のパスにおける別のソースからセグメントを受信した2つのソースからデータのセグメントを受信する。たとえば、第2のパスにおいて、第2のシンク531は、前の第1のパスにおいて第1のソース501からデータを受信した第2のソース521および前の第1のパスにおいて第1のソース502からデータを受信した第2のソース522の各々からデータセグメントを受信する。シンク535は、前の第1のパスにおいて第1のソース503からデータを受信した第2のソース525および前の第1のパスにおいて第1のソース504からデータを受信した第2のソース526の各々からデータセグメントを受信する。さらに他の例では、第3のパスにおいて、第3のシンク551および552の各々は、前の第2のパスにおいて第2のソース521および522からデータを受信した第3のソース541ならびに前の第2のパスにおいて第2のソース552および526からデータを受信した第3のソース542の各々からデータセグメントを受信する。
【0063】
図5の例は、第1、第2および第3のパスのみを示しているが、パスが追加されても演算は継続し得るということを当業者は容易に理解するであろう。図5の例において、各パスは、わずか8個のソースおよび8個のシンクを有するものとして示されており、これは、各々の最後のシンク550が第1のソース501,502,503および504のそれぞれからのデータセグメントを含むのに十分である。ソースおよびシンクの数が増加するにつれて、より多くのパスをバタフライシャッフルに追加したり、各シャッフル演算の複雑さを増大させたりすることが必要になり得る。
【0064】
「バタフライ」シャッフルの使用は、データが多数のソースから分散される場合に特に有益である。たとえば、単一のパスにおいてデータを1,000,000個のソースから2,000,000個のシンクに分散させるために、各シンクは、多数のソースからデータを読み取らなければならない。たとえば、各シンクが10,000個のソースから読み取るとすると、シャッフルは、ソースとシンクとの間に合計10,000×2,000,000=200億回のマッピングを必要とするであろう。たとえ各シンクが1,000個のソースから読み取るとしても、依然として20億回のマッピングを追跡する必要があるだろう。図5の例のようにたとえ各シンクが8個のソースから読み取るとしても、この構成では依然として1,600万回のマッピング(200万個のシンクの各々について8回のマッピング)を追跡しなければならないであろう。マルチパスバタフライシャッフル演算内で最初の分割を第1のパスとして導入することにより、最初にデータを2,000,000個のシンクに渡すことが可能になり、ソースとシンクとの間のマッピングの回数が最小限、すなわち2,000,000回のマッピングまたは各シンクについて1つのソースになるだろう。次いで、各々の後続のパスにおいて、各シンクは、2つのソースにマッピングされ得て、その結果、第2のパスでは合計4,000,000回のマッピングになり、第3のパスではさらに4,000,000回のマッピングになり、いずれの後続のパスでも同様になる。合計で、図5に示される3つのパスでは、追跡されなければならないソースとシンクとの間のマッピングの総回数は、1,000万回のマッピングになり、上記の例示的なシングルパスシナリオにおいてそれぞれ必要とされる100億回または10億回のマッピングよりも大幅に少なく、さらには1,600万回のマッピングよりも少ない。したがって、シャッフル演算の各パスにおけるオーバーヘッドを大幅に減らすことができる。第1のパスのオーバーヘッドは、それが分割であるという理由で減少し、後続のパスにおけるオーバーヘッドは、各パスが1,000,000個のソースと1,000,000個のシンクとの間のシングルパスシャッフルよりも必要なオーバーヘッドが二次式的に少ないという理由で減少する。別の言い方をすれば、各パスにおいて実行されるシャッフルの総回数は線形に増加するが、シャッフルのための処理の総量は集合的に二次式的に減少する。
【0065】
図4に示されるシンク分割の上記の例では、各パスは、独立して実行される演算の代わりに、単一の演算を含むように示されている。他の例では、マルチパスシャッフル演算の単一の所与のパスにおいて実行される演算の回数は、2回以上であってもよい。たとえば、図5に示される個々のバタフライシャッフルは、互いに独立して実行され得て、その結果、第2および第3のパスの各々において演算が複数になる、ということを当業者は認識するであろう。
【0066】
さらに、図5におけるバタフライシャッフルの例では、独立したシャッフルの回数は、1つのパスから次のパスまで一定のままである。他の例では、各パスにおいて実行される独立した演算の回数は、パスによって変化してもよい。
【0067】
図6は、複数のシンク分割を含む「シャッフル分割」分散スキームの一例を示す図であり、ここでは、各パスにおいて実行される分割演算の回数が1つのパスから次のパスに向けて増加する。特に、図6の例では、第1のソース600から第1のシンク610への第1のパスにおいて、2つのソース601および602のデータは、4つのシンク611,612,613および614の間でシャッフルされる。第1のシンク610に対応する第2のソース620から第2のシンク630への第2のパスにおいて、各ソースは2つのシンクに分割される。たとえば、ソース621のデータは、シンク631と632との間で分割され、ソース622のデータは、シンク633と634との間で分割され、ソース623のデータは、シンク635と636との間で分割され、ソース624のデータは、シンク637と638との間で分割される。第2のシンク630に対応する第3のソース640から第3のシンク650への第3のパスにおいて、各ソースは、再び2つのシンクに
分割される。たとえば、ソース641のデータは、シンク651と652との間で分割され、ソース642のデータは、シンク653と654との間で分割され、ソース643のデータは、シンク655と656との間で分割され、ソース644のデータは、シンク657と658との間で分割される。
【0068】
さらに、第2のパスのシャッフル演算は、2つの独立して実行される演算に二分または分割され、その結果、ソース621および622におけるデータの分割は第1の演算682において管理され、ソース623および624におけるデータの分割は第2の別個の演算684において管理される。同様に、第2のパスの各々の所与の独立した演算のシンクは、第3のパスの2つの別々の演算に二分される。たとえば、ソース641および642におけるデータの分割は第1の演算692において管理され、ソース643および644におけるデータの分割は第2の別個の演算694において管理される。同様に、第2のパスの演算684において分割されたデータは、次いで、第3のパスにおける2つの別々の分割演算696,698に二分される。
【0069】
図6の例では、分割演算の回数は、1つのパスから次のパスに向けて2倍に増加する。したがって、このシャッフル分割の「分割係数」は、2であると言われる。他の例では、独立した演算の回数は、2よりも大きな倍数(3倍、4倍、5倍、8倍、10倍など)に増加してもよい。
【0070】
パスを複数の別々の演算として処理することによってソースとシンクとの間のマッピングの総回数を減らすことはできないが、別々の演算を使用することにより、同一のパスで複数のシャッフルログを使用できるようになる。これにより、各シャッフルログの全体サイズを小さなサイズに維持することができる。ソースおよびシンクの数が増加して、シャッフル演算中に追跡されるメタデータの量が増加すると、メタデータを別々のシャッフルログに分割することが有益であろう。たとえば、図6をさらに参照して、第2のソース620から第2のシンク630への第2のパスの演算を制御するプロセッサ(図2Bの例に示される1つまたは複数のプロセッサ210など)は、シーケンシャルにまたは同時に処理される演算682および684を制御し得るため、シャッフル演算の帯域幅およびタイミングに対する制御を向上させる。
【0071】
たとえば、10,000個のソースから20,000個のシンクにデータをシャッフルする最初のパスの後に、10,000個のソースから20,000個のシンクへの2つの独立したシャッフルを有する第2のパスが続くことがあり得る。第2のパスの結果は、データを40,000個のシンクの間で分散させるであろうが、第2のパスにおいて移動されたデータブロックのメタデータは、2つの別々のシャッフルログに二分され得る。これは、シャッフル演算がソースの数よりもはるかに多い数のシンクを含む場合に特に有用であろう。なぜなら、データは、シンクの数が増加する前の演算の初期のパスにおいて十分にシャッフルされ、次いで、別々のシャッフルログによって管理される独立した演算に従っていくつかのシンクに分割され得るからである。このように、各シャッフルログは、パスの他の独立した演算のブロックではなくそれ自体の演算のブロックを読み取るシンクのメタデータだけを含むであろう。
【0072】
さらに、演算が並列にまたは同時に処理される場合、および一方の演算が他方の演算の前に完了する場合、完了した演算のシャッフルログからのメタデータは、他の別個の演算も完了するのを待つことなくフラッシュされ得る。例示のために、100,000個の均一に分散されたシンクを含む単一の「シンク分割」演算のシャッフルログが50GiB(ギビバイト)を含む場合、フラッシャは、完了したシンク当たり平均して約0.5MiB(メビバイト)のデータをフラッシュするであろう。しかし、同一のシャッフルログデータが100個の別々の「シンク分割」演算(各演算は1,000個のシンクを含む)の間
で分割される場合、フラッシャは、完了したシンク当たり平均して約50MiBのデータをフラッシュするであろう。
【0073】
図7は、図5からのバタフライシャッフルおよび図6からのシャッフル分割の両方の概念を組み合わせた例示的なデータ分散スキームを示す図である。図7の例では、第1のソース700のデータが第1のシンク710に書き込まれる第1のパス、第1のシンク710に対応する第2のソース720のデータが第2のシンク730に書き込まれる第2のパス、および第2のシンク730に対応する第3のソース740のデータが第3のシンク750に書き込まれる第3のパス。
【0074】
各パスにおいて、各シンクは、2つのソースからデータを受信し得る。さらに、各パスにおいて、シンクはグループに分割され得て、それによって、シンクの各グループは同一の2つのソースからデータを受信する。このように、シンクの各グループおよびそれらの対応する2つのソースについてのシャッフル演算は、シンクの所与のグループに書き込まれるデータのメタデータに限定される独自のシャッフルログを有する独立した演算として処理され得る。たとえば、第2のパスにおいて、第2のシンク735,736,737および738は全て、第2のソース723および724からデータを受信し得る。ソース723および724とシンク735,736,737および738との間のシャッフルは、シンク735,736,737および738に書き込まれるデータのメタデータだけを含む独自のシャッフルログにおいて独立して管理され得る。
【0075】
図7の例では、各パスから次のパスまでに実行される独立した演算の回数は、2倍に増加する。すなわち、第1のパスは2つの演算を含み、第2のパスは4つの演算を含み、第3のパスは8つの演算を含み得る(全て図示せず)。
【0076】
各第3のシンク750が第1のソース700のそれぞれからデータを受信し得ることも図7の例から分かる。たとえば、各第3のシンク751は、第3のソース741のデータを含み得て、第3のソース741は、順に、第2のシンク735に対応する。第2のシンク735は、対応する第2のソース723および724の各々からのデータを含み得て、第2のソース723および724は、それぞれ、第1のシンク712および716に対応する。第1のシンク712は、第1のソース701および702の各々からのデータを含み得て、第1のシンク716は、第1のソース703および704の各々からのデータを含み得る。したがって、第3のシンク751および752におけるデータは、第1のソース700の各々まで遡ることができる。
【0077】
別の言い方をすれば、図7の例は、独立した演算の回数が1つのパスから次のパスに向けて増加し得るという点において分割シャッフルのように考えることができ、前のパスの別のソースから得られるシンクのデータを後続のパスの単一の演算において組み合わせることができるという点においてバタフライシャッフルのように考えることができる。これにより、収集されたデータに適用されるクエリの結果を向上させるためにシャッフル演算に対して複雑さおよびロバスト性のさらに他の層を追加することが可能になる。
【0078】
図4図5図6および図7の上記の例は、データ、ソース、シンク、シャッフルまたはそれらの任意の組み合わせの量が増加するにつれて割り当て量を減少させるために実行され得るさまざまなタイプのパスおよびシャッフル演算を示している。1つまたは複数のプロセッサ(図2Bのプロセッサ210など)は、シャッフル演算の進捗状況を追跡して、追跡された進捗状況に基づいて実行すべきパスのタイプを動的に判断するようにプログラムされ得る。「ジョイン」または「グループシャッフル」のような、さまざまな演算に関連付けられたオートオペレータまたはプランアダプタは、マルチパスシャッフルを開始するか否か、および開始する場合にはどのタイプの演算を適用するかを動的に判断し得る
。たとえば、オートジョインプランアダプタは、データがまだジョインの両側に矛盾なく分散されていない場合に「シャッフル分割」を開始することと、データが既に矛盾なく分散されている場合に「シンク分割」を開始することとの間で判断し得る。
【0079】
いくつかの例において、シャッフル分割は、モニタリングされた値が予め定められた閾値を超えたとプロセッサが判断したことに応答して、1つまたは複数のプロセッサ(図2Bのプロセッサ210など)によって開始され得る。このモニタリングされた値は、所与のパスにおいて利用されるシンクの数であり得て、それによって、各演算におけるシンクの数が閾値未満になるまで、シンクは別々の演算に分割される。代替的にまたはさらに、このモニタリングされた値は、所与のパスにおけるソースとシンクとの間のマッピングの回数であり得て、それによって、各々の別々の演算におけるソースとシンクとの間のマッピングの回数が閾値未満になるまで、シンクは別々の演算に分割される。
【0080】
上記の例は、各パスが別々の演算として扱われるマルチパスシャッフルの例を示している。他の例では、オーバーヘッドが減少してメタデータログが小さくなるという利点を維持しながら、単一のシャッフル演算としてパスを組み合わせてもよい。さらに、上記の例は、各パスのシンクを互いに別々のものとして扱う。他の例では、各パスのシンクの間に重複があってもよい。たとえば、各パスが前のパスよりも多くのシンクに書き込む例示的なシャッフル演算において、1つのパスのシンクは、次のパスのシンクのサブセットであり得て、次のパスのシンクは、後続のパスのシンクのサブセットであり得る、などである。
【0081】
たとえば、データが100,000個のソースから100,000個のシンクにシャッフルされる場合、および1,000個のシンクが第1のパスにおいて使用される場合、第1のパスの1,000個のシンクは、第2のパスにおいて使用される100,000個のシンクのうちの1,000個のシンクであり得る。このような場合、パーティション化スキームを利用して、第1のソースが、第1のシンクではない残りの99,000個のシンクのいずれかに書き込まないようにすることができる。このようなパーティション化スキームの1つの効果は、上記の例の複数のシャッフル演算を、予め指定されたソースの1つのセットから予め指定されたシンクの1つのセットへの基本的には単一のシャッフル演算に変形させたというものである。
【0082】
図8および図9は、このような単一のシャッフル演算のパスをパーティション化するために使用され得る例示的なパーティション化スキームを示す図である。図8および図9の例は、第1および第2のパスに限定されているが、本明細書に記載されているスキームは、3つ以上のパスを有するシャッフル演算において繰り返されることができるということが理解されるべきである。
【0083】
図8の例は、第2のパス820が開始する前に第1のパス810が完了する「延期パーティション化」スキームを示している。第1のパス810は、1つまたは複数のプロセッサ(図2Bの1つまたは複数のプロセッサ210など)が、第1のソースのセットを指定すること(812)と、第1のシンクのセットを指定すること(814)と、第2のシンクのセットをブロックすること(816)とを含み得る。1つまたは複数のプロセッサからの命令に従ってデータが第1のソースのセットから第1のシンクのセットに書き込まれている間(818)、第2のシンクのセットは、シャッフルされたデータのいずれも受信することをブロックされたままであり得る。これは、第1のパスにおける全てのシャッフルされたデータが第2のシンクではなく第1のシンクにのみ書き込まれることを保証することができる。第1のパス810が完全に完了すると、1つまたは複数のプロセッサは、第2のパス820の演算を開始し得て、それによって、第2のシンクのセットをブロック解除し得る(822)。その後、第2のソース(第1のシンクに対応し得る)からのデー
タを第2のシンクのセットに書き込み得る(824)。全てのデータが第2のシンクのセットに書き込まれると、第2のパスは完了する。
【0084】
図9の代替例は、先行する第1のパス910が完了する前に第2のパス920が開始し得る「パイプライン方式延期パーティション化」スキームを示している。第1のパス910は、1つまたは複数のプロセッサが、第1のソースのセットを指定すること(812)と、第1のシンクのセットを指定すること(814)と、パイプライン方式を使用して第2のシンクのセットを指定すること(816)とを含み得る。このパイプライン方式は、パーティション化スキームを使用し得て、それによって、第1のソースはいずれも、延期パーティション化を有する第1のシンクが書き込むシンクには書き込まない。第1のシンクのいずれか1つへの書き込みが完了すると、たとえ他の第1のシンクへの書き込みがまだ終了していなくても、第2のパス920が開始し得る。第2のパス920において、終了した第1のシンクに対応する第2のソースは、パーティション化スキームに従ってデータを第2のシンクに書き込み得る(922)。各第1のシンクへの書き込み演算が完了すると、別の対応する第2のソースのための書き込み演算が開始し得て、これは、第2のパス920全体が完了するまで継続し得る。
【0085】
いくつかの例では、マルチパスシャッフルの第2のパスの開始は、データが第1のシャッフルのシャッフルログから既にフラッシュされていることを条件とすることができる。このような条件付けは、マルチパスシャッフルのシャッフルログが不必要なスペースをとらないことを保証することができ、フラッシュ演算の効率を向上させることができる。他の例では、複数のパスを使用してシャッフル演算を完了させることは、それ自体が、シャッフルログ全体からメタデータをフラッシュする必要性をなくすことができる。なぜなら、(マルチパスシャッフルで実現されるように)任意の所与のセグメントについてのシンク宛先の総数を減少させることにより、各セグメントについて格納する必要があるメタデータの総量も減少するからである。
【0086】
いくつかの例において、マルチパスシャッフル演算のパスは、パイプライン方式であり得る。これは、1つまたは複数のプロセッサの割り当て使用量を増加させ得るが、性能を向上させるという利点がある。このような例では、パイプライン方式においてバックログを回避するために、時間的により早いパスにおいて行われるシャッフルには、より高い優先順位が与えられ得る(十分な割り当て量が与えられるなど)。1つまたは複数のプロセッサは、パイプライン方式のシャッフルおよびパスの間で適切に割り当て量を分散させるために、スケジューラプログラムから命令を受信し得る。
【0087】
いくつかの例において、マルチパスシャッフル演算のパーティション化スキームは、1つのパスにおいてデータを全ての利用可能なシンクに再パーティション化し、次いで、後続のパスにおいてこのデータを利用可能なシンクのサブセットに圧縮し得る。このようなパーティション化スキームは、後続のパスにおけるシンクの読み取りを最適化することができる。特に、使用されるシンクアドレスが連続的である場合、およびシャッフルログが利用可能なシンクのサブセットを非重複アドレス範囲にマッピングする場合、後続のパスのシンクのためのルックアップ演算は、所与のアドレス範囲と同程度に単純であろう。その結果、ソースとシンクとの間のマッピングは、スペースをとらない。なぜなら、シンクが読み取ることを指定されるソースは、シンク自体のアドレスに基づいて決定することができ、シンクとソースアドレスとの間の別個のマッピングを格納する必要がないからである。
【0088】
上記の例において、各パスは、データをソースからそれらのそれぞれの宛先シンクに向けるためにハッシュパーティション化関数を使用し得る。各パスにおいて使用されるハッシュパーティション化関数は、前のパスのハッシュ関数に相関付けられ得る。同様に、別
々のシャッフル演算が単一のパスにおいて別々に実行されて前のパスの共通のシャッフル演算から分割される「シャッフル分割」の場合、別々のシャッフル演算の各々は、前のパスのハッシュ関数に相関付けられたそれぞれのハッシュ関数を使用し得る。
【0089】
上記の例は、通常、約10TiBよりも大きな量のデータ(数十TiBのデータなど)上で複雑なクエリを実行しようとする際に生じる問題を解決する。このようなデータ量は、一般に、10,000個以上のシンクの使用を必要とするため、従来のシングルパスシャッフル演算ではスケーリング問題を生じさせる。本明細書に記載されているマルチパスシャッフル演算の利点は、より少ない量のデータにも適用できることである、ということを当業者は認識するであろう。すなわち、たとえ従来のシングルパスシャッフル演算を使用してそれらのより少ない量のデータを処理できるとしても、本明細書に記載されているマルチパスシャッフル演算は、効率を向上させて、演算の全体コストおよびオーバーヘッドを減少させることができる。実際、いくつかの実験は、1TiBほどの少ない入力データ量での全体的なスピードアップは、10TiBほどの大きな入力データ量でのスピードアップよりも大きいことを示唆してきた。
【0090】
特定の実施形態を参照して本明細書における技術を説明してきたが、これらの実施形態は、本技術の原理および適用例の例示に過ぎないということが理解されるべきである。したがって、添付の特許請求の範囲によって規定される本技術の精神および範囲から逸脱することなく、これらの例示的な実施形態に対して多数の変更がなされてもよく、他の構成が考案されてもよい、ということが理解されるべきである。
【0091】
上記の代替例の大半は、互いに相容れないわけではなく、さまざまな組み合わせで実現されて固有の利点を実現することができる。特許請求の範囲によって規定される主題から逸脱することなく上記の特徴のこれらのおよび他のバリエーションおよび組み合わせを利用することができるので、実施形態の上記の説明は、特許請求の範囲によって規定される主題を限定するものではなく例示するものであると解釈されるべきである。一例として、上記の動作は、上記の厳密な順序で実行されなくてもよい。それどころか、さまざまなステップは、逆にされるなどの異なる順序で、または同時に処理されてもよい。また、特に指示のない限り、ステップは省略されてもよい。また、本明細書に記載されている例の提供および「など」、「含む」などと表現される節は、特許請求の範囲の主題を具体例に限定するものとして解釈されるべきではなく、むしろ、これらの例は、多くの可能な実施形態のうちの1つだけを例示するよう意図されている。さらに、異なる図面中の同一の参照番号は、同一または同様の要素を特定し得る。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8
図9