java—hadoop的tasktracker是否为每个任务生成一个新的jvm?

5sxhfpxr  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(377)

根据tasktracker hadoop wiki页面,tasktracker生成了一个新的jvm来完成它正在跟踪的实际工作。但是,页面中有一个输入错误,不清楚tasktracker是为它跟踪的所有任务生成一个jvm,还是为它跟踪的每个任务生成一个jvm。我之所以这么问是因为我很好奇,使用静态变量来保存工作级别的变量是否有利于在map函数中简单地示例化一个变量。

trnvg8h3

trnvg8h31#

它为每个任务生成一个jvm。
您可以通过设置以下配置参数来重用JVM: mapred.job.reuse.jvm.num.tasks ,但这只是为了减少jvm启动时间。在功能上,它仍然会重建类,所以这对您来说并不重要。
如果变量相对较小,比如字符串之类的,就不必太担心。如果它更大,你可以开始担心!例如,从分布式缓存将一个大文件加载到 Map 每项任务一次总的来说是很昂贵的。您可以通过让更少的Map任务为每个任务做更多的工作来缓解这种情况。我甚至做过疯狂的事情,比如在redis或zookeeper中存储共享变量。

相关问题