Hadoop 在正常启动后有五个重要的 JVM 进程,分别是NameNode,SecondaryNameNode,DataNode,JobTracker,TaskTracker。这五个进程肩负着 HDFS 在存储和计算上的各项任务。
NameNode
NameNode 是集群中的管理节点,只有一个。管理 HDFS 文件系统的命名空间,维护着文件系统树及整棵树内所有文件和目录。也记录着每个文件中各个块所在的数据节点信息。
SecondaryNameNode
它不是 NameNode 的冗余守护进程,而是提供周期检查点和清理任务。
出于对可扩展性和容错性等考虑,我们一般将 SecondaryNameNode 运行在一台非 NameNode 的机器上。
DataNode
DataNode 是文件系统中的工作节点,可以有多个。它们根据需要存储并检索数据块(受客户端或者 NameNode 调度),并且定期向 NameNode 发送它们所存储的块的列表。
应用程序访问文件系统时,先由 NameNode 提供数据块的位置,然后程序去访问对应的 DataNode。
JobTracker
每个集群有一个 jobtracker,它负责调度 datanode 上的工作。每个 datanode 有一个 tasktracker,它们执行实际工作。jobtracker 和 tasktracker 采用主-从形式,jobtracker 跨 datanode 分发工作,而 tasktracker 执行任务。jobtracker 还检查请求的工作,如果一个 datanode 由于某种原因失败,jobtracker 会重新调度以前的任务。
1)应用程序将 Job 交给 JobTracker;
2)JobTracker 通知 NameNode,让其确定数据块的位置;
3)JobTracker 确定 TaskTacker 节点,将 work 提交给确定好的 TaskTracker;
4)TaskTracker 一直被 JobTracker 监控着,如果不按时返回心跳信号或者主动返回失败,则认为是执行失败,将会转向其他 TaskTracker;
5)当 work 顺利执行完毕,JobTracker 更新状态;
6)应用程序可以轮询 JobTracker 的状态。
TaskTracker
task 指的是Map/Reduce/Shuffle操作。
每个 TaskTracker 都有一个 slot 集来标记这个 TaskTracker 所能接受的 task 的个数。当 JobTracker 要分配一个 task 时,会在 DataNode 的就近节点中找一个空的slot,把 task 分配给对应的 TaskTracker。当 TaskTracker 要处理一个 task 时,会产生一个新的进程来执行它。在执行期间不断向 JobTracker 发回心跳信号,执行完毕返回结果。
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。