Hadoop的TaskTracker是否为每个任务生成一个新的JVM?

时间:2013-11-20 16:41:37

标签: java hadoop mapreduce

根据TaskTracker Hadoop Wiki page,TaskTracker会生成一个新的JVM来完成它正在跟踪的实际工作。但是,页面中存在拼写错误,并且不清楚TaskTracker是否为正在跟踪的所有任务生成一个JVM,或者TaskTracker是否为每个任务生成一个JVM 它正在跟踪。我问的原因是因为我很好奇如果使用静态变量来保存作业级变量可以简单地在map函数中实例化变量。

1 个答案:

答案 0 :(得分:2)

它为每个任务生成一个JVM。

您可以通过设置此配置参数mapred.job.reuse.jvm.num.tasks来重用jvms,但这只是为了减少JVM的旋转时间。从功能上讲,它仍然会重建类,这对你来说无关紧要。

如果变量相对较小,如字符串或其他东西,你不应该太担心。如果它更大,你可以开始担心!例如,从分布式缓存加载大型文件到每个任务一次Map可能是昂贵的。您可以通过减少映射任务为每项任务执行更多工作来缓解此问题。我甚至做过像Redis或ZooKeeper中存储共享变量这样的疯狂事情。