-1

私はMapReduceを初めて使用しますが、次のタスクに最適なMapReduceアプローチについてご意見をお聞かせください。

次の形式の大きなドキュメントが1つあります

1 2 3
2
2 3 4 5

各行には番号のリストがあります。可能な(ペアの)数字の組み合わせを任意の行にリストしたいと思います。そして、与えられた各ペアを含む行数が必要です。

結果は次のようになります

element1 element2 occurrences
1        1        1
1        2        1
1        3        1
2        2        3
2        3        2
3        3        2
3        4        1
3        5        1

ドキュメントには約200万行あり、約150万の異なる番号があります。そして、数えられる数の約2.5Gの異なるペアがあります。

まっすぐ進む擬似コードは次のようなものです。ドキュメントの各行のマップを呼び出す

Map(int lineId, list<int> elements)
{
  for each pair of integers in elements
    emit(pair, 1)
}

Reduce((int, int) pair, list<int> counts)
{
  return sum(counts)
}

ただし、このアプローチには2Mマッパーと2.5Gレデューサーが必要です。これはもっともらしい方法ですか?AzureでHadoopを試すことを計画しています。

4

2 に答える 2

3

ただし、このアプローチには 2M のマッパーと 2.5G のレデューサーが必要です。これはもっともらしい方法ですか?Azure で Hadoop を試す計画。

この仮定は正しくありません。

FileInputFormatのマッパーの数は、入力分割の数と同じです。入力分割は、デフォルトで 64MB に設定されている HDFS のブロックにマップできます。したがって、入力ファイルが 1024 MB の場合、16 個のマップ タスクが起動されます。

レデューサーの数は、デフォルトで 1 に設定されているmapred.reduce.tasksパラメーターを使用して構成できます。また、ジョブをより速く完了するためにコンバイナーを使用できることに注意してください。

MapReduce と Hadoop の理解を深めるために、 Hadoop - The Definitive Guideを参照することをお勧めします。

于 2012-10-29T13:54:22.007 に答える
0

要するに、私は専門家ではありませんが、まさにそうします。@Thomas Jungblutのポイントは重要です-マッパーは各ファイルの各ブロックに対して起動します(サイズは構成可能で、最大まで)ので、あなたが思うほど多くのマッパーを持つことはありません-その上、次のようなプラットフォームを使用するポイントHadoop は、ある程度、それを理解させることです。あなたの論理は正しいです。

于 2012-10-29T13:43:56.207 に答える