我有大量由小文件创建的输入拆分(大约 50,000 个),我想使用 Hadoop 处理这些拆分。但是,我只有 256 个容器可用于处理它。
作业本身使用大量 CPU,但使用相当少的内存。
我正在使用 Hadoop 2.3 并查看了 MapReduce 1.0 中的 JVM 重用功能
我也读过关于 uber tasks 的内容,但它看起来不是一回事 - 或者我对 JVM 重用有不同的理解。
由于我有很多小文件(并且正在为每个文件生成一个 inputSplit),我想为每个容器创建一个 JVM 机器,并为每个已分配的 JVM 运行尽可能多的顺序映射任务。这将减少 JVM 分配时间的开销。
我想对于每个输入拆分都会分配一个新的映射器,从而分配一个新的 JVM,对吗?
我如何在 YARN 中做这样的事情?
哦,我知道我也可以使用压缩来增加 inputSplit 的大小,但是对于这个确切的应用程序,这是不可行的。
最好的问候, 马可洛兹
最佳答案
是的。在 yarn 中,任务在专用的 JVM 中运行。并且与 mapreduce 1 不同,它不支持 JVM 重用。
但是在 mapreduce 1 中,控制任务 JVM 重用的属性是 mapred.job.reuse.jvm.num.tasks
。它
指定每个启动的 JVM 的给定作业要运行的最大任务数,默认情况下为 1
。 This answer应该让您更好地了解 1 中的 JVM 重用。
关于hadoop - JVM 重用 MapReduce 2.0 YARN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835361/