1

私は、それぞれ約 600MB のバイナリ形式 (FITS) で、数十個の完全な天空図を持っています。

それぞれの天空図について、私はすでに数千の源、すなわち星、銀河、電波源の位置のカタログを持っています。

各ソースについて、次のことを行います。

  • 全天地図を開く
  • 関連するセクションを抽出します。通常は 20MB 以下です
  • それらについていくつかの統計を実行します
  • 出力をカタログに集約する

hadoopおそらくインターフェイスをpython介して使用して、streamingそれらを並行して処理したいと思います。

マッパーへの入力はカタログの各レコードである必要があると思います。その後、pythonマッパーは全天球図を開いて処理を行い、出力を に出力できstdoutます。

  1. これは合理的なアプローチですか?
  2. hadoopその場合、ソースの 1 つを処理しているノードに全天球マップがローカルにコピーされるように構成できる必要があります。どうすればそれを達成できますか?
  3. また、入力データをフィードする最良の方法は何hadoopですか? ソースごとに、全天球図、緯度と経度への参照があります
4

1 に答える 1

2

数十個のスカイ マップが非常に大きなデータ セットであるとは思えませんが、分散アプリケーション/スクリプトを作成する簡単な方法として Hadoop をうまく使用しました。

あなたが説明した問題については、Pydoop、特にPydoop Script (完全な免責事項: 私は Pydoop 開発者の 1 人です) を使用してソリューションを実装してみます。

処理したい天空図のセクションのリストを入力として受け取り、1 行に 1 レコードのテキスト形式でシリアル化するジョブを設定できます。各マップ タスクは、これらのいずれかを処理する必要があります。この分割は、標準の NLineInputFormat を使用して簡単に実現できます。

マップ タスクが保存されているファイル システムにアクセスできる限り、天空図をすべてのノードにローカルにコピーする必要はありません。pydoop.hdfs モジュールを使用すると、map 関数は、処理する必要があるスカイ マップのセクションを読み取り (入力として受け取った座標が与えられた場合)、レデューサーで集計できるように、あなたが言ったように統計を出力できます。 . pydoop.hdfs は、マウントされた「標準」ファイル システムと HDFS の両方から読み取ることができます。

問題のドメインはまったく関係ありませんが、次のアプリケーションは例として役立ちます。

https://github.com/ilveroluca/seal/blob/master/seal/dist_bcl2qseq.py#L145

同じ戦略を使用して、処理する「座標」のリストを準備し、それらをファイルにシリアル化し、そのファイルを入力として受け取る単純な pydoop ジョブを起動します。

それが役立つことを願っています!

于 2013-07-18T10:52:15.517 に答える