MatrixMultiplicationJob
大きな行列を乗算するためにMahout0.7を使用しています。ただし、常に1つのマップタスクを使用するため、速度が低下します。これはおそらくInputSplit
、マッパーの数を1にするためです。
Hadoop / Mahoutで行列を効率的に乗算したり、マッパーの数を変更したりする方法はありますか?
MatrixMultiplicationJob
大きな行列を乗算するためにMahout0.7を使用しています。ただし、常に1つのマップタスクを使用するため、速度が低下します。これはおそらくInputSplit
、マッパーの数を1にするためです。
Hadoop / Mahoutで行列を効率的に乗算したり、マッパーの数を変更したりする方法はありますか?
最終的に、使用するマッパーの数を決定するのはHadoopです。通常、HDFSブロックごとに1つのマッパーを使用します(通常は64または128MB)。データがそれよりも小さい場合は、データが小さすぎて複数のマッパーを使用する必要がありません。
64MBよりも小さい値に設定することで、とにかくもっと使用するように促すことができますmapred.max.split.size
(値はMBではなくバイトで設定されることに注意してください)。しかし、あなたは本当にしたいですか?あなた(またはあなたの仕事)が指示しない限り、Hadoopが1を超えるものを使用することは決してないため、マッパーではなく、より多くのレデューサーが必要になることがはるかに一般的です。
また、Hadoopは単一の圧縮ファイルで複数のマッパーを使用できないことも知っておいてください。したがって、入力が1つの巨大な圧縮ファイルである場合、そのファイルで使用されるマッパーは1つだけです。ただし、それを自分で多くの小さな圧縮ファイルに分割することができます。
-Dmapred.map.tasks=N
オプション付きのコマンドラインからマッパーの数を指定しようとしましたか?私はそれを試していませんでしたが、うまくいくはずです。それが機能しない場合は、このパラメータをMAHOUT_OPTS
環境変数に設定してみてください...