我正在使用Mahout (v 0.7) parallel FPG algorithm CLI模式来生成频繁模式。该算法工作正常,可以正确生成频繁模式。
我遇到的问题是算法在生成模式的第二阶段总是使用一个reducer。该算法为每个输入分割创建一个映射器,但在第二阶段,所有映射器将其输出发送到一个减速器,这大大减慢了算法。
我甚至尝试设置-Dmapred.reduce.tasks
参数来覆盖默认的reducer数量,但它不起作用。
如果可能的话,我想将第二阶段的工作分成多个减速器。
我使用Mahout的FPG命令:
mahout fpg \
-i /path/to/input \
-o /path/to/output \
-s 5 \
-k 100 \
-method mapreduce
答案 0 :(得分:0)
您可以在命令末尾添加以下内容来更改映射器和缩减器的数量:
-Dmapred.map.tasks=1000 -Dmapred.reduce.tasks=1000
对我来说,我无法使用此参数更改映射器的数量,但我始终能够控制缩减器的数量。
答案 1 :(得分:0)
您的数据当前可能适合单个映射器分割。
您可以使用以下内容缩小分割尺寸:
-Dmapred.max.split.size=1048576
(这会将分割大小减小到1024 * 1024 == 1MB,但我之前使用的是Mahout甚至更小,例如-Dmapred.max.split.size=131072
在CPU密集型作业上进行128KB分割。)