我使用Mahout 0.7' MatrixMultiplicationJob
来乘以一个大矩阵。但它总是使用1个地图任务,这使得它变慢。它可能是由于InputSplit
迫使映射器的数量为1。
有没有办法可以有效地在Hadoop / Mahout中增加矩阵或更改映射器的数量?
答案 0 :(得分:3)
最终,Hadoop决定使用多少个映射器。通常,每个HDFS块使用一个映射器(通常为64或128MB)。如果您的数据小于该值,则它太小而无法使用超过1个映射器。
您可以通过将mapred.max.split.size
设置为小于64MB的值来鼓励它使用更多(请记住该值以字节为单位,而不是MB)。但是,你确定要吗?更常见的是需要更多的减速器,而不是映射器,因为除非你(或你的工作)告诉它,否则Hadoop绝不会使用超过1个。
还要知道Hadoop将无法在单个压缩文件中使用多个映射器。因此,如果您的输入是一个巨大的压缩文件,它将只在该文件上使用1个映射器。但是,您可以将其自行拆分为许多较小的压缩文件。
答案 1 :(得分:0)
您是否尝试通过命令行使用-Dmapred.map.tasks=N
选项指定映射器的数量?我没有尝试过,但它应该工作。如果它不起作用,请尝试在MAHOUT_OPTS
环境变量...