プログラムのマップ フェーズでは、作成されたマッパーの総数を知る必要があります。これは、マップのキー作成プロセスに役立ちます (マッパーの数と同じ数のキーと値のペアを各オブジェクトに発行したい)。
マッパーの数を設定することはヒントにすぎないことはわかっていますが、実際のマッパーの数を取得するにはどうすればよいでしょうか。Mapper の configure メソッドで次のことを試しました。
public void configure(JobConf conf) {
System.out.println("map tasks: "+conf.get("mapred.map.tasks"));
System.out.println("tipid: "+conf.get("mapred.tip.id"));
System.out.println("taskpartition: "+conf.get("mapred.task.partition"));
}
しかし、私は結果を得る:
map tasks: 1
tipid: task_local1204340194_0001_m_000000
taskpartition: 0
map tasks: 1
tipid: task_local1204340194_0001_m_000001
taskpartition: 1
これは (?) 印刷された 1 つだけでなく 2 つのマップ タスクがあることを意味します (2 つの小さな入力ファイルがあるので、これは非常に自然なことです)。マップ タスクの後の数は 2 であるべきではありませんか?
今のところ、入力フォルダー内のファイル数を数えるだけですが、ファイルがブロック サイズよりも大きくなり、複数の入力分割が発生してマッパーが発生する可能性があるため、これは適切な解決策ではありません。助言がありますか?