分散ジオプロセシングのアーキテクチャはありますか?


24

LANに50台のコンピューターがあるとします。各コンピューターには、米国の特定の州にあるすべてのパーセルポリゴン用のジオデータベースがあります。

z $ / acre 未満の値を持つ別のパーセルのyフィート以内にあるx $ / acre 以上の値を持つすべてのパーセルを検出するジオプロセシングタスクを作成します。

データが50台のコンピューターに分散されていることを知らず、気にせずに、このクエリを作成して実行したいと思います。境界条件に留意してください。また、ある状態の高価な区画が別の状態の安価な区画に近いケースを返すクエリも必要です。

このような分散ジオプロセシングをサポートするアーキテクチャはありますか?

アーキテクチャは、抽象的に記述することも、AzureまたはAmazon Web Servicesに固有の実装として記述することもできます。または、できれば、豊富なArcGISデスクトップライセンスを使用して、コンピューターが夜間にアイドル状態になる典型的なオフィスとして。


1
いい質問です。この特定の例では、建物を自動的に並列化し、4分木などの空間データ構造を使用する方法が必要です。これを行わずに、50台のコンピューターに総当たり検索を単に分散する場合、クエリを高速化するのではなく、実際にスローダウンする可能性があります。このような一般的なアーキテクチャはまだ存在しないと確信しているので、最初に分散処理の恩恵を受ける可能性のあるクエリの種類を検討してから、必要なアーキテクチャを検討することで、幸運を得ることができます。この質問をTCSサイトに投稿することはできますか?
whuber

@whuberありがとう、TCSサイトとは何ですか?
カーククイケンドール

@Kirk謎めいてごめんなさい-私は怠けていた。 cstheory.stackexchange.com
whuber

1
CSみんなまれGET空間:-)などの基本的なCS理論は、おそらくされますないヘルプ
イアンTurton

1
@iant分散コンピューティングの基本について詳しく知るGISの人はそれほど多くありません(明らかに例外的なこのサイトのメンバーには、私は何もしません)。TCSの人々、建築の存在に関する最初の質問に答える知識を持っている思います。私の唯一の懸念は、彼らが質問を面白いと思うかどうかです!それが正しい方法であると思う。(たとえば、データ構造の観点から再
フレーム

回答:


13
  1. すべての区画を1つの中央データベースに保存する
  2. 側面にNフィートの正方形で作られた米国上にグリッドを作成します。ここで、Nは、Nに収まる区画の数がノードのいずれかでメモリを消費しないようにするものです。
  3. グリッドの正方形ごとに1行、id列、geometry列、およびstatus列を持つデータベースにテーブルを作成します
  4. 各ノードは小さなプログラムを実行します
    1. 次の未処理の正方形を見つける
    2. インプロセスとしてマークします
    3. すべての区画をプルしますST_DWithin(square、parcel、maxfeet)
    4. 実際のクエリを行います
    5. 中央データベースのソリューションテーブルにクエリの回答を書き戻す
    6. 正方形を完了としてマークします
    7. 1に戻る

明らかな失敗例は、パーセルクエリの対象半径が大きくなり、データセットの大部分が各パーセルに一致する潜在的な候補になることです。


ポールに感謝します。他のノードのコーディネーターとして機能するノードが必要ですか?
カーククイケンドール

データベースは、キューの状態を保持するという点で暗黙的な「コーディネーター」として機能しますが、ノードは起動してデータベースを指すように調整する必要はありません。それが答えかどうかわかりません。
ポールラムジー

7

9月にバルセロナでFOSS4Gの興味深いスロットがありました:http ://2010.foss4g.org/presentations_show.php?id=3584

プレゼンテーションというよりもパネルディスカッションになりました。

このブログ投稿の途中で Paul Ramseyはそこから何らかの要約を述べています。


それは有望に見えます、彼らはどこかにプレゼンテーションを投稿しましたか?
カーククイケンドール

さて、Schuyler Erleは、予定されているプレゼンテーションを準備するのではなく、パネルディスカッションのモデレーターになったので、これ以上の情報はないと思います。しかし、アーレはそのプレゼンテーションを計画していたので、おそらくそれについての情報を持っています。あなたがグーグル検索をするならば、彼はどこにでもいます。彼に直接尋ねるのは考えかもしれません。知りません。議論のほとんどは私の理解を超えていたので、ポールが彼のブログで行ったよりも良い履歴書を与えることはできません。
ニックラスアベン

4

esriホワイトペーパーのホワイトペーパー「ArcGIS Server in Practice Series:Large Batch Geocoding」をご覧ください

これはジオコーディングに関するものですが、非同期ジオプロセシングサービスを使用する一般的なプロセスがケースに適用される場合があります。


よさそうだ、これは他の形式のジオプロセシングに一般化できるのだろうか。ただし、データセット間で重複が必要なようです。
カーククイケンドール

3

この問題で最初に心配するのは、いつどこでどのデータが必要かということです。そうするために、私は通常、問題の馬鹿げたシリアルバージョンから始めます。

x $ /エーカー以上の値を持つすべての区画を、z $ / acre未満の値を持つ別の区画のyフィート以内にあるすべての区画を見つけます。

foreach p in parcels {
  if value(p) > x {
    foreach q in parcels {
      if (dist(p,q) <= y) and (value(q) < z) {
        emit(p)
      }
    }
  }
}

このアルゴリズムは最適化されていませんが、問題を解決します。

データセット内のすべてのポイントに最も近い区画を見つけた修士論文の同様の問題を解決しました。このソリューションをPostGISHadoop 、およびMPIに実装しました。私の論文の完全版はこちらにありますが、この問題に当てはまる重要なポイントを要約します。

MapReduceは、単一の区画を処理するためにデータセット全体(または慎重に選択されたサブセット)にアクセスする必要があるため、この問題を解決するのに適したプラットフォームではありません。MapReduceは、セカンダリデータセットを適切に処理しません。

ただし、MPIはこれを非常に便利に解決できます。最も難しいのは、データの分割方法を決定することです。この分割は、データの量、それを実行する必要のあるプロセッサの数、およびプロセッサごとのメモリの量に基づいています。最適なスケーリング(およびパフォーマンス)を実現するには、メモリ内に(すべてのコンピューター間で)区画データセットの複数のコピーを一度に保持する必要があります。

これがどのように機能するかを説明するために、50台のコンピューターのそれぞれに8つのプロセッサーがあると仮定します。次に、各コンピューターに1/50の小包をチェックする責任を割り当てます。このチェックは、コンピューター上の8つのプロセスによって実行されます。各プロセスには、パーセルの同じ1/50部分とパーセルデータセットの1/8のコピーがあります。グループは単一のマシンに限定されず、マシンの境界を越えることができることに注意してください。

プロセスはアルゴリズムを実行し、1/50番目のパーセルセットからpのパーセルを取得し、1/8番目のセットからqのパーセルを取得します。内側のループの後、同じコンピューター上のすべてのプロセスが対話して、小包を放出する必要があるかどうかを判断します。

私の問題のためにこれと同様のアルゴリズムを実装しました。ここでソースを見つけることができます。

この種の最適化されていないアルゴリズムを使用した場合でも、プログラマーの時間に対して高度に最適化された印象的な結果を得ることができました(つまり、愚かな単純なアルゴリズムを記述でき、計算はまだ十分高速です)。(本当に必要な場合)最適化する次のスポットは、各プロセスの2番目のデータセット(qを取得する場所)のクアッドツリーインデックスを設定することです。


元の質問に答えるため。アーキテクチャがあります:MPI + GEOS。ClusterGISの実装から少し助けてください。多くのことができます。このソフトウェアはすべてオープンソースとして入手できるため、ライセンス料はかかりません。linuxで作業していたため、Windowsにどれだけ移植性があるのか​​(Cygwinを使用した場合)わかりません。このソリューションは、EC2、Rackspace、または利用可能なクラウドに展開できます。私が開発したとき、私は大学の専用計算クラスタを使用していました。


2

古い学校の並列プログラミングの方法論では、各プロセッサに状態+それ触れる区画を保存するだけで、驚くほど簡単に並列化できます。しかし、米国の州の大きさのばらつきを考えると、国をグリッドセルに分割し(ここでも小包の接触するハローで)、マスタースレーブ構成を使用して各グリッドセルをプロセッサに送信することにより、パフォーマンスが向上します。


接触する区画の代わりに、y距離内の隣接する州の区画が必要です。
カーククイケンドール

Yは、少数の区画よりも大幅に大きくならないほど十分に小さいと想定しています。状態の大部分である場合は、任意のグリッドを使用して計算を行うのがおそらく最善です。
イアンタートン

2

Appistryを見てみたいと思うかもしれません。既存のアプリケーションをプライベートクラウドインフラストラクチャに移行できるようにすることを目的としています。同様の目的を持つ他のプロジェクトがあるかもしれません:すべてのアプリケーションについて何度も何度もタスクを分解して並列処理に分配するという非常に複雑な要素を見つけ出すのではなく、それを自動的に行うライブラリまたはプラットフォームを作ります。


ありがとう、Matt、それは有望に見えます。グーグルでFedUC 2008の議事録からこのプレゼンテーションを見つけました 。
カーククイケンダル

2

このタイプの問題には、map / reduceフレームワークを使用します。「生の」Appistryフレームワークは、これに近い「厄介な並列」問題に最適です。エッジ条件は、それを許可しません。Map / Reduce(分散コンピューティングに対するGoogleのアプローチ)は、この種の問題に最適です。

08紙以来のAppistryでの最大の進歩は、CloudIQストレージ製品のリリースです。これにより、ローカルサーバー上のディスクを利用するストレージファシリティのような「s3」が可能になります。次に、CloudIQエンジン製品は、大量のサービスやあらゆる種類のスキャッター/ギャザースタイルのアプリケーションを有効にできます(ESRIランタイムと他のオープンソースライブラリを使用してスケーラビリティを実証しました)。ファイルベースのデータを操作している場合は、CloudIQストレージを使用してデータを配布し、処理ジョブをローカルファイルのレプリカにルーティングして、ネットワーク上で移動する必要がないようにします。(したがって、すべてのノードがすべてのデータを必要とするわけではありません)

Map / Reduceの場合、Hadoop(オープンソースM / Rフレームワーク)のようなものをCloudIQストレージにレイヤー化できます。説明したように、問題についてHadoopを調べますが、実際に飛び込む必要があります。始めるのは簡単ではなく、M / Rは脳のベンダーです。Clouderaが提供する商業的にサポートされているディストリビューションもあります。別のAppistry製品であるCloudIQ Mangerがあります。これは、配布と管理のためのHadoop(Clouderaなど)を補完するものです。

私はHadoop(M / RおよびHDFSファイルシステム)から始めます。より商業的にサポートされたスケーラブルなソリューションが必要な場合は、Cloudera HadoopディストリビューションとともにAppistry CloudIQ ManagerおよびStorageをご覧ください。

「厄介な並列」タスクのためのよりシンプルなアーキテクチャが必要な場合は、CloudIQ Engineもご覧ください。(参照されているカークの論文で概説されているアプローチはまだ有効です)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.