HDFS:NameNode、DataNode、SecondaryNameNode

来源:互联网 发布:淘宝严重违规12分2999 编辑:程序博客网 时间:2024/04/30 22:33

可以一句话描述 HDFS:把客户端的大文件存放在很多节点的数据块中。


HDFS设计原则:

1,文件以块(block)方式存储;

2,通过副本机制提高可靠度和读取吞吐量;

3,每个区块至少分到三台DataNode上;

4,单一NameNode来协调存储元数据;

5,客户端对文件没有缓存机制(No data caching);


NameNode:HDFS命名服务器

是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求;

文件包括:
1,fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
2,edits:操作日志文件。
3,fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中。


DataNode:HDFS数据节点,提供真实文件数据的存储服务。

1,保存block,文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是64MB,以一个256MB文件,共有256/64=4个Block.
2,不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间;
3,Replication。多复本。默认是三个

4,启动DataNode线程的时候会向NameNode回报block信息;

5,通过向NameNode发送心跳报纸与其联系(3s/次),如果NameNode10min没有收到DataNode的心跳,则认为其已经lost,并copy其上的block到其他DataNode;

Block的副本放置策略:

1,第一个副本:放在DataNode,如果是集群外提交,则随即挑选一台磁盘不太满,CPU不太忙的节点;

2,第二个副本:放在第一个副本不同的机架的节点上;

3,第三个副本:与第二个副本相同集群的节点;

4,更多副本:随即节点

 一个文件有几个副本呢?我们查看 hdfs-default.xml 文件
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <property>  
  2.   <name>dfs.replication</name>  
  3.   <value>3</value>  
  4.   <description>Default block replication.   
  5.   The actual number of replications can be specified when the file is created.  
  6.   The default is used if replication is not specified in create time.  
  7.   </description>  
  8. </property>  

block 存放在 linux 文件系统中的位置,我们查看 hdfs-default.xml 文件

[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. <property>  
  2.   <name>dfs.data.dir</name>  
  3.   <value>${hadoop.tmp.dir}/dfs/data</value>  
  4.   <description>Determines where on the local filesystem an DFS data node  
  5.   should store its blocks.  If this is a comma-delimited  
  6.   list of directories, then data will be stored in all named  
  7.   directories, typically on different devices.  
  8.   Directories that do not exist are ignored.  
  9.   </description>  
  10. </property>  



SecondaryNameNode:NameNode的镜像备份节点,hadoop的一个解决方案。但不支持热备。配置即可。只有一个职责,就是合并 NameNode 中的 edits 到 fsimage 中。

1,执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits.
2,默认在安装在NameNode节点上,它的工作是帮助NameNode合并edits log,减少NameNode启动时间

0 0
原创粉丝点击