我有大量由小文件创建的输入拆分(大约50.000),我想用hadoop处理这些文件。但是,我只有256个容器可以处理它。
作业本身占用大量cpu,但内存却相当少。
我使用的是hadoop2.3,并查看了mapreduce1.0中的jvm重用特性
我也读过关于uber任务的文章,但看起来不一样——或者我对jvm重用有不同的理解。
因为我有很多小文件(并且正在为每个文件生成inputspit),所以我想为每个容器创建一个jvm机器,并为已经分配的jvm运行尽可能多的顺序Map任务。这将减少jvm分配时间开销。
我猜对于每一个输入分割,都会分配一个新的Map器,从而产生一个新的jvm,对吗?
我怎么能用Yarn做这种事?
哦,我知道我也可以使用压缩来增加inputsplit大小,但是对于这个确切的应用程序,这是不可行的。
谨致问候,马可·洛茨
1条答案
按热度按时间xoefb8l81#
对。在yarn中,任务在专用jvm中运行。与mapreduce1不同,它不支持jvm重用。
然而,在MapReduce1中,控制任务jvm重用的属性是
mapred.job.reuse.jvm.num.tasks
. 它指定为每个启动的jvm的给定作业运行的最大任务数,默认情况下为1
. 这个答案应该能让您更好地了解1中的jvm重用。