将JVM视为一个抽象的计算机,Java服务可以在上面运行。回答你的问题:
1)为简单起见,假设只有一个存储和一个处理节点
Hadoop 1.0:
共有4个服务NameNode、SecondaryNameNode、DataNode、JobTracker和TaskTracker。每个服务都在一个JVM上运行。NameNode、SecondaryNameNode、DataNode、JobTracker各4个JVM。
TaskTracker是集群中接受任务——Map、Reduce和Shuffle操作——从JobTracker的服务。TaskTracker会启动单独的JVM进程来执行实际工作。
假设只有一个可用的槽位让tasktracker来执行实际工作,即运行mapper或reducer。
因此,JVM总数=NameNode(1)+SecondaryNameNode(1)+DataNode(1)+JobTracker(1)+TaskTracker(2)=6。
Hadoop 2.0:
总服务:Namenode、SecondaryNameNode、ResourceManager(ResourceManager、ApplicationManager和Scheduler)、Node Manager(ApplicationMaster和Container)、Datanode。
每个服务都需要一个JVM,因此:
Namenode(1)+SecondaryNameNode(1)+ResourceManager(1)+ApplicationManager(1)+Scheduler(1)+Node Manager(1)+ApplicationMaster(1)+Container(1)+Datanode(1)=9。
处理是在容器(JVM)上执行的,而Node manager(JVM)负责操作。每个Yarn应用程序都需要自己的ApplicationMaster(JVM)。
2)第一点描述了JVM的最小数量。我们无法确定最大数量,因为您可以在集群中添加存储和工作节点,因此JVM的数量会增加。
3)如果您的集群中有更多资源,您可以运行多个JVM,这样您可以同时运行更多的存储(datanode)和处理(nodemanager和container)服务。是的,您可以通过配置mapred.job.reuse.jvm.num.tasks属性来控制JVM的重用。
4)由于Hadoop框架的所有服务都只在JVM上运行,因此JVM非常重要。您不能创建JVM,操作系统会为您创建。您只需要启动JVM进程即可。