我是怎么玩hadoop的(二)--构造模块
在写这个模块之前,已经用过hadoop集群完成了一些小测试,但是还希望了解下更深层的东西,我想大家一定对namenode,datanode,secondary namenode,jobtracker,he tasktracker有了一定的了解,我想对我我来说也只是单纯的知道,但不上深入,今天想总结下这几个构造模块在hadoop的具体用法和意义。
hadoop的守护进程包括:
namenode 名字节点;
datanode 数据节点;
secondary namenode 次名字节点;
jobtracker 作业跟踪节点;
tasktracker 任务跟踪节点;
1.namenode:
无可厚非的是:namenode是hadoop守护进程中最重要的一个。我们知道hadoop分布式计算与分布式存储采用了主从(master/slave)结构。分布式存储系统被称为hadoop文件系统(HDFS),namenodeweiyu HDFS的主端,它指导从端datanode执行底层的IO任务。namenode是HDFS的书记员(hadoop实战中的翻译),他跟踪文件如何被分割成文件块,而这些块又被那些节点存储,以及分布式文件系统的整体运行状态是否正常。
运行namenode小号大量的内存和IO资源。因此,为了减轻机器的负载,主流namenode服务器通常不会存储用户数据或者执行mapreduce程序的计算任务。被称为最重要的节点,也有一个缺点,当namenode的坐在的节点发生了软件或者硬件失效,hadoop必然会失效。
2.datanode:
每一个集群上的从节点都会主流一个datanode守护进程,用来执行分布式文件系统的繁重工作——将HDFS数据块读取或者写入到本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分割为多个块,由namenode告知客户端每个数据块驻留在哪个datanode。客户端直接与datanode守护进程进行通信,来处理与数据块相对应的本地文件。而之后datanode会与其他datanode进行通信。复制这些数据块以实现冗余。
由上图可知,文件系统中存在两个数据文件:data1和data2。而文件data1有三个数据块,而data2有两个数据块,这些数据块散列在datanode上,由图可以看到每个数据块有三个副本,也就是在搭建集群时:hdfs-site.xml文件的dfs.replication的值,这里的例子为3。这样做的目的是,当如果有一个datanode出现问题时,仍然可以维持系统的平稳,读取到有用的数据。
3.secondary namenode
secondary namenode(SNN)适用于监测HDFS集群状态的辅助守护进程。像namenode一样,每个集群有一个SNN,他通常也独占一台服务器,该服务器不会运行其他的datanode或tasktracker守护进程。SNN与namenode的不同在于他不接受或记录HDFS的任何实时变化。相反,它与namenode通信,根据集群所配置的时间间隔获取HDFS元数据的快照。
namenode是hadoop集群的单一故障点,而SNN的快照可以有助于减少停机的时间,并降低数据丢失的风险。当namenode失效时,需要人工干预,即手动的重新配置集群,将SNN用作主要的namenode。
4.jobtracker
jobtracker守护进程是应用程序和hadoop之间的纽带。一旦提交代码到集群上,jobtracker就会确定执行计划,包括决定处理那些文件、为不同的任务分配节点以及监控所有人物的运行,如果失败,jobtracker将自动重启任务,但所分配的将诶点可能会不同,同时收到预定义的重试次数限制。每个集群通常只有一个jobtracker守护进程,通常在运行服务器的主节点上。
5.tasktracker
与存储的守护进程一样,计算的守护进程也遵循主从架构:jobtracker作为主节点,检测mapreduce作业的整个执行过程,同时,tasktracker管理各个任务在每个从节点上的执行情况。
每个tasktracker负责执行由jobtracker分配的单项任务,虽然每个从节点上仅有一个tasktracker,但每个tasktracker可以生成多个jvm来并行地处理许多map或reduce任务。tasktracker的一个职责是持续不断地与jobtracker通信,如果jobtracker在指定的时间内没有收到来自tasktracker的’心跳‘,他会假定tasktracker已经崩溃,进而重新提交相应的任务到急群众的其他节点中。
最后如上一张hadoop集群的拓扑图:
当然有时也不固定,在大型的hadoop及群里namenode与jobtracker也会分别部署在两台机器上