哪个节点对Hadoop中的密钥进行排序/洗牌?
答
排序和随机相在映射器和还原器之间分配。这就是我们在Mapper仍在运行时看到Reduce%增加(通常为33%)的原因。
增加排序缓冲存储器,并从该性能增益将取决于:
a)所述键的大小/总数量由所述映射器
b)该映射器任务的性质发射:(IO密集,CPU密集型)
c)中可用的主存储器,地图/减少槽(占用)在给定的节点
d)数据偏斜
你可以找到更多信息@
答
相关 - 以我的经验 - 参数调mapred.site.xml是:
-
io.sort.mb
这是一个映射器的输出缓冲器。当这个缓冲区已满时,数据被分类并溢出到磁盘。理想情况下,你避免了很多泄漏。请注意,这个内存是maptask堆大小的一部分。 -
mapred.map.child.java.opts
这是一个map任务的堆大小,这个值越高,您可以将输出缓冲区大小设置得越高。 - 原则上减少任务的数量也影响洗牌速度。减少回合数是减少时间片总数/减少任务数。请注意,初始混洗(在映射阶段)只会将数据混洗到活动减速器。所以
mapred.reduce.tasks
也是相关的。 -
io.sort.factor
是执行合并排序的数量线程,无论是在地图上还是减少方面。 - 压缩也有很大的影响(其加速从映射器转移到减速机,但COMPR/decompr是有代价的!
-
mapred.job.shuffle.input.buffer.percent
是减速的堆地图输出存储在内存中的百分比。
毫无疑问有更多的调整机会,但这些都是我花了相当一段时间玩弄的那些。
谢谢。我该如何更改'mapred.map.child.java.opts''代码?因为我的节点可以访问Hadoop集群的配置文件。 –
配置conf = new Configuration();conf.set(“mapred.child.java.opts”,“希望的堆大小”); 工作职位=新职位(conf); – Thejas