为了清楚起见,提出了这些问题,因为硬件有许多资源可供我们想要提高吞吐量,并且还基于我在各种论坛中对这些主题的讨论:
答案 0 :(得分:1)
以下几点可能会有所帮助。
首先,任何程序中的映射器数量等于数据的分割数量,每个映射器在分配给它的一个分割上工作。尝试在分割可用的同一节点中调用映射器。这称为数据的局部性。
任何作业的reducer数等于该作业的分区数。每个映射器的输出都被分隔到分区中,每个分区桶的每个键和值列表都被发送到分配给该分区的reducer。
在每个节点上,Mapreduce框架可能在其级别实现线程,可以使用加速的gpu或cpu进行线程化。这可能是可能的。但是,在大图上运行的并行性是并行运行在不同节点上的映射器和缩减器。
Hadoop允许用户指定要在地图输出上运行的组合器函数,组合器函数的输出形成reduce函数的输入。由于组合器功能是一种优化,因此Hadoop无法保证为特定的地图输出记录调用它的次数(如果有的话)。换句话说,调用组合器函数零,一次或多次应该从reducer产生相同的输出。组合器函数通常是reduce函数。
示例是否在映射器的输出上使用了合并器 如果第一个映射器输出就像
(1950,0)
(1950,10)
(1950,20)
和第二个映射器输出
(1950,23)
(1950,30)
然后使用
调用reduce函数(1950,[20,30])