私はhadoopの初心者です。現在、avro を使用して MapR プログラムに取り組んでいます。ローカル Hadoop (1 レデューサー) に対して実行する場合、プログラムのロジックは正しいのですが、8 ノードの CDH クラスターに対して、64 のレデューサーのうち 1 つだけが実際にジョブを実行するという問題が発生します。他の 63 個のレデューサーのログは、マッパーからデータを受け取っていないことを示していました。
私のデータ処理は複雑ではなく、実際には非常に単純です。以下は Mapper と Reducer のシグネチャです。
public static class MyAvroMap extends Mapper<AvroKey<NetflowRecord>, NullWritable,
Text, AvroValue<NetflowRecord>> {}
public static class MyAvroReduce extends Reducer<Text, AvroValue<NetflowRecord>,
AvroKey<NetflowRecord>, NullWritable> {}
Map の出力キーは、NetflowRecord の文字列フィールドから派生します。シャッフルキーの選択とかavroのことで何か問題ないですか?ありがとうございます。
更新: 上記の実験では、7 GB の avro ファイルを使用し、1 つのレデューサーのみが機能しました。入力量を数百 GB に増やしたところ、他のレデューサーも機能するようになりました。私が知っているように、Hadoop にはデフォルトで 64MB のファイル分割制限があります。しかし、なぜ avro データに対して作業するときに異なる動作をするのでしょうか?
ところで: CDH のデフォルトのファイル分割パラメーターが変更されている場合は変更しません。
ジャミン