1

行う作業を大きく 2 つの部分に分けます。

  1. distcp を介して S3 から HDFS にコピーする巨大なデータ (約 1 TB に達し、数百のファイルに分割) があります。

  2. このデータは、Hadoop ストリーミング ジョブ (Python で記述された単純なマッパーとリデューサー) によって処理されます。

ここで、すべてのデータがコピーされるまで待つ必要がHDFSあり、その後で初めて実際の仕事を開始できます。ここに質問があります: それ自体が map-reduce ジョブであることを考慮するとDISTCP、これら 2 つのジョブを「合理化」できる方法はありますかdistcp? 2番目のジョブが技術的にすでに開始できるいくつかのファイル)?

私は自分自身を明確にしたことを願っています。

4

1 に答える 1

1

S3InputFormat (https://github.com/ATLANTBH/emr-s3-io) を使用して、マッパーに直接データを読み取ることができます。ただし、ジョブが失敗した場合は、すべてのデータを再ダウンロードすることに注意してください。したがって、処理する前にすべてのデータをダウンロードすることをお勧めします。データ全体を一度に処理する必要がない場合は、distcp の開始後に mapreduce を開始できます。ただし、FileInputFormat の独自の拡張機能を記述して、どのファイルが処理されたか (入力ディレクトリ内と思われます) を記録し、呼び出しごとに処理済みファイルを (メソッド getSplits() で) 除外し、処理されていないファイルのみを処理する必要があります。

于 2012-10-11T15:38:10.297 に答える