0

複数行のCSVファイルを処理したいので、そのためにカスタムCSVInputFormatを作成しました。

各HadoopノードでCSV行を処理するスレッドを約40個にしたいです。ただし、5台のマシン(1つのマスターと4つのコア)を使用してAmazon EMRでクラスターを作成すると、使用可能なマップスロットが6つある場合でも、実行されているマップタスクは2つだけであることがわかります。

マップタスクの数と使用可能なスロットを示すEMRのダッシュボード

inputFormatにgetSplitsを実装したので、NLineInputFormatのように動作します。これで、より多くのものが並行して実行されることを期待していましたが、効果はありませんでした。また、引数を設定してみ-s,mapred.tasktracker.map.tasks.maximum=10 --args -jobconf,mapred.map.tasks=10ましたが、効果がありませんでした。

ラインを並行して処理するにはどうすればよいですか?Hadoopの実行方法は、スケーラブルではありません。クラスターに割り当てるインスタンスの数に関係なく、最大で2つのマップタスクのみが実行されます。

更新:非圧縮ファイル(zip)を起点として使用すると、より多くのマップタスクが作成され、130万行で約17になります。それでも、なぜそれ以上にすべきではないのか、データが圧縮されたときになぜより多くのマッパーが作成されないのか疑問に思います。

4

1 に答える 1

0

分割サイズを変更して、分割数を増やします。

Configuration conf= new Cofiguration();
//set the value that increases your number of splits.
conf.set("mapred.max.split.size", "1020");
Job job = new Job(conf, "My job name");
于 2013-02-26T21:44:55.690 に答える