我想用Hadoop处理由小文件创建的大量输入分割(大约50,000个)。但是,我只有256个容器可用来处理它。
作业本身使用大量的CPU,但相当少的内存。
我正在使用Hadoop 2.3,并且正在查看MapReduce 1.0的JVM重用特性
我也读过关于优步任务,但它看起来不像一样的东西-或者我对JVM重用有不同的理解。
因为我有很多小文件(并且每个文件生成一个inputSplit),我想为每个容器创建一个JVM机器,并在每个已经分配的JVM上运行尽可能多的顺序Map任务。这将减少JVM分配时间开销。
我猜对于每个输入分割将分配一个新的映射器,从而分配一个新的JVM,我是对的吗?
我怎么能在YARN做这样的事情?
哦,我知道我也可以使用压缩来增加inputSplit的大小,但对于这个确切的应用程序,这是不可行的。
最诚挚的问候,马可Lotz
是。在yarn中,任务在专用JVM中运行。与mapreduce 1不同的是,它不支持JVM重用。
然而,在mapreduce 1中,控制任务JVM重用的属性是mapred.job.reuse.jvm.num.tasks
。它为每个启动的JVM指定给定作业要运行的最大任务数,默认情况下是1
。这个答案应该能让您更好地了解1.