* NameNode: NameNode是HDFS的主节点,控制从节点的DataNode的守护进程(daemon);它知道你所有的数据存放在何处,知道数据如何被拆分成块,知道这些数据块被部署在哪个节点上,知道分布式文件系统的整体工作状态。简而言之,它是整个Hadoop集群中最重要的节点。每个集群都有一个NameNode,并且NameNode是Hadoop集群中的single-point of failure(SPOF)。
* Secondary NameNode:Secondary NameNode监视HDFS集群的状态,并且对保存在NameNode中的数据拍摄快照(snapshot)。如果NameNode产生故障,Secondary NameNode将会被用来取代NameNode的位置。然而,这确实需要人工干预,因此没有从NameNode到Secondary NameNode的自动失效备援(failover),但是,拥有Secondary NameNode将会确保数据丢失最小化。同NameNode一样,每个集群也仅有一个Secondary NameNode。
* DataNode:Hadoop集群中的每个从节点包含一个DataNode。DataNode负责进行数据管理:它从HDFS读取它的数据块,管理每个物理节点上的数据,向NameNode报告数据管理状态。
* JobTracker:JobTracker守护进程是你的应用与Hadoop本身之间的连线。每个Hadoop集群都有一个配置好的JobTracker,当你提交代码到Hadoop集群执行时,JobTracker负责构建执行计划。执行计划包括决定包含操作数据的节点、安排节点之间的数据通信、监视正在运行的任务(task)和重新开启任务如果任务失败。
* TaskTracker:同数据存储采用主/从(master/slave)架构一样,代码执行也采用了主/从(mater/slave)架构。每个从节点拥有一个TaskTracker守护进程(daemon),该进程负责由JobTracker发送过来的任务,并同其他JobTracker通信job状态及心跳包。
图1尝试讲所有这些组件一起放在一张图中。
图1 Hadoop应用及设施交互
图1显示了主节点与从节点之间的关系。主节点包含两个重要组件:NameNode,管理集群及负责所有数据;JobTracker,负责管理被执行的代码和所有TaskTracker守护进程。每个从节点都有TaskTracker守护进程和DataNode守护进程:TaskTracker从JobTracker处接收指令并执行map和reduce步骤,而DataNode从NameNode处接收数据并管理被从节点包含的数据。并且理所当然存在一个Secondary NameNode监听NameNode的更新。
注意:
注意图1仅仅显示JobTracker及NameNode同单一从节点通信,但实际上,它同集群内的所有从节点通信。