NameNode,NameNode,Secondary NameNode

壹:NameNode(名称节点)

HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。

集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。

Namenode和Datanode被设计成可以在普通的商用机器上运行。这些机器一般运行着GNU/Linux操作系统(OS)。HDFS采用Java语言开发,因此任何支持Java的机器都可以部署Namenode或Datanode。由于采用了可移植性极强的Java语言,使得HDFS可以部署到多种类型的机器上。一个典型的部署场景是一台机器上只运行一个Namenode实例,而集群中的其它机器分别运行一个Datanode实例。这种架构并不排斥在一台机器上运行多个Datanode,只不过这样的情况比较少见。

集群中单一Namenode的结构大大简化了系统的架构。Namenode是所有HDFS元数据的仲裁者和管理者,这样,用户数据永远不会流过Namenode。

那么如下是HDFS的特点和概要:

1.维护HDFS文件系统,是HDFS的主节点。

2.接受客户端的请求: 上传文件、下载文件、创建目录等等

image
image

3.记录客户端操作的日志(edits文件),保存了HDFS最新的状态

  1. Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等
image
  1. 保存目录:$HADOOP_HOME/tmp/dfs/name/current

  2. 可以使用hdfs oev -i命令将日志(二进制)输出为XML文件,输出结果为:

image

4.维护文件元信息,将内存中不常用(采用LRU算法)的文件元信息保存在硬盘上(fsimage文件)

  1. fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息

  2. 保存目录:$HADOOP_HOME/tmp/dfs/name/current

  3. 可以使用hdfs oiv -i命令将日志(二进制)输出为文本(文本和XML)

image

贰:NameNode(名称节点)****

1.以数据块为单位,保存数据

image
  1. Hadoop 1.0的数据块大小: 64M

  2. Hadoop 2.0 的数据块大小:128M

2.在全分布模式下,至少两个DataNode节点

3.数据保存的目录:由hadoop.tmp.dir参数指定

例如:

image

叁:Secondary NameNode(第二名称节点)

1.主要作用是进行日志合并

2.日志合并的过程:

image

肆:HDFS****存在的问题

  1. NameNode单点故障,难以应用在线场景

解决方案:Hadoop 1.0中,没有解决方案。

      Hadoop 2.0 中,使用ZooKeeper实现NameNode的HA功能。
  1. NameNode压力过大,且内存受限,影响系统扩展性

解决方案:Hadoop 1.0 中,没有解决方案。

      Hadoop 2.0 中,使用NameNode的联盟实现其水平扩展。

你可能感兴趣的:(NameNode,NameNode,Secondary NameNode)