我用的是mahout 0.7 MatrixMultiplicationJob 把一个大矩阵相乘。但是它总是使用一个map任务,这使得它的速度很慢。可能是因为 InputSplit 强制Map器的数目为1。有没有一种方法可以在hadoop/mahout中高效地乘法矩阵或更改Map器的数量?
MatrixMultiplicationJob
InputSplit
dffbzjpn1#
您是否尝试通过命令行指定Map器的数量 -Dmapred.map.tasks=N 选择?我没试过,但应该有用。如果不起作用,则尝试在 MAHOUT_OPTS 环境变量。。。
-Dmapred.map.tasks=N
MAHOUT_OPTS
tvmytwxo2#
最终,hadoop决定了要使用多少Map器。通常每个hdfs块使用一个Map器(通常为64或128mb)。如果您的数据小于此值,则它太小,无法使用多个Map器。你可以通过设置 mapred.max.split.size 小于64mb(请记住,该值是以字节而不是mb为单位设置的)。但是,你确定你想吗?更常见的情况是需要更多的缩减器,而不是Map器,因为hadoop永远不会使用超过1个,除非您(或您的工作)告诉它。还要知道hadoop不能在一个压缩文件上使用多个Map器。因此,如果您的输入是一个巨大的压缩文件,它将永远只使用一个Map器对该文件。不过,您可以将其拆分为许多较小的压缩文件。
mapred.max.split.size
2条答案
按热度按时间dffbzjpn1#
您是否尝试通过命令行指定Map器的数量
-Dmapred.map.tasks=N
选择?我没试过,但应该有用。如果不起作用,则尝试在MAHOUT_OPTS
环境变量。。。tvmytwxo2#
最终,hadoop决定了要使用多少Map器。通常每个hdfs块使用一个Map器(通常为64或128mb)。如果您的数据小于此值,则它太小,无法使用多个Map器。
你可以通过设置
mapred.max.split.size
小于64mb(请记住,该值是以字节而不是mb为单位设置的)。但是,你确定你想吗?更常见的情况是需要更多的缩减器,而不是Map器,因为hadoop永远不会使用超过1个,除非您(或您的工作)告诉它。还要知道hadoop不能在一个压缩文件上使用多个Map器。因此,如果您的输入是一个巨大的压缩文件,它将永远只使用一个Map器对该文件。不过,您可以将其拆分为许多较小的压缩文件。