Hadoop是一个能够对大量数据进行分布式处理的软件框架,实现了Google的MapReduce编程模型和框架,能够把应用程序分割成许多的小的工作单元(块),并把这些单元放到任何集群节点上执行。在MapReduce中,一个准备提交执行的应用程序称为“作业(job)”,而从一个作业划分出得、运行于各个计算节点的工作单元称为“任务(task)”。此外,Hadoop提供的分布式文件系统(HDFS)主要负责各个节点的数据存储,并实现了高吞吐率的数据读写。
在分布式存储和分布式计算方面,Hadoop都是用主/从(Master/Slave)架构。在一个配置完整的集群上,想让Hadoop这头大象奔跑起来,需要在集群中运行一系列后台(deamon)程序。不同的后台程序扮演不用的角色,这些角色由NameNode、DataNode、 SecondaryNameNode、JobTracker、TaskTracker组成。
其中NameNode、SecondaryNameNode、JobTracker运行在Master节点上,而在每个Slave节点上,部署一个DataNode和TaskTracker,以便 这个Slave服务器运行的数据处理程序能尽可能直接处理本机的数据。对Master节点需要特别说明的是,在小集群中,SecondaryNameNode可以属于某个从节点;在大型集群中,NameNode和JobTracker被分别部署在两台服务器上。
我们已经很熟悉这个5个进程,但是在使用的过程中,我们经常遇到问题,那么该如何入手解决这些问题。那么首先我们需了解的他们的原理和作用。
五个节点分别是:
Namenode
SecondaryNameNode
DataNode
ResourceManager
NodeManager
1. Namenode
Namenode 管理者文件系统的Namespace。它维护着文件系统树(filesystemtree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
namenode结构图(盗的图)
客户端(client)代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎不用知道datanode和namenode,即可完成我们所需要的功能。
2. DataNode
Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表(心跳机制)。
集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通信,并且对相关的数据块进行读/写操作。
3. SecondaryNameNode
SecondaryNameNode是一个用来监控HDFS状态的辅助后台程序。就像NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。SecondaryNameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。这其中SecondaryNameNode作为NameNode备用节点,切换的过程完全不影响其它节点,举个栗子:NameNode就相当于皇帝,而SecondaryNameNode相当于东宫太子,皇帝即NameNode出现故障或者死去,东宫太子会立即继位,下面的大臣(DataNaem)完全感觉不到皇位已经换人了。
4. ResourceManager 和 NodeManager
一个为资源管理,另一个为节点管理,顾名思义,一个主要负责资源的管理,另一个负责节点的管理
ResourceManager 主要完成以下几个功能:
1. 与客户端交互,处理来自客户端的请求
2. 启动和管理ApplicationMaster,并在它运行失败时重新启动它;资源管理和调度,接收来自ApplicationMaster 的资源申请请求,并为之分配资源
3. 管理NodeManager,接收来自NodeManager的资源汇报信息,并向NodeManager下达管理指令(比如杀死 Container等)
NodeManager :
Node Manager就是Weblogic Server提供的一个Java 程式,可以使让你在本地域控制台启动、关闭、重启及监管受管Server。Node Manager 允许你从远程machine控制受管Server。要使用NodeManager的功能,必须在受管Server机 器上启动Node Manager。
在这里我还是要推荐下我自己建的大数据学习交流qq裙:522189307 , 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴。上述资料加群可以领取
HDFS运行流程图(图是盗的)
首先用户即客户端想要上传文件,就先要给namenode发个请求,告诉它说我要上传文件了(即写数据),然后namenode会返回一个响应,这个响应是namenode根据自身情况,比如会先查一下namenode里面还能存数据吗?能存多少?有几个datanode能存?(心跳信息)然后返回一个可以存储的节点列表,意思是这些里面能存,但不是能存的datanode全部返回,它会根据上传文件的大小来适当的返回,客户端收到这个列表后,就向根据返回的列表里面的datanode中写数据,文件会分为多个块(block),写的过程是以流的方式写入的,一个块存入一个DataNode,存完后DataNode就会备份,我们默认的备份数是3,存完后,会告诉namenode说我存完了。这样就结束了hdfs文件上传的流程。
上面那张看不懂的话看这张