壹: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 image3.记录客户端操作的日志(edits文件),保存了HDFS最新的状态
- Edits文件保存了自最后一次检查点之后所有针对HDFS文件系统的操作,比如:增加文件、重命名文件、删除目录等等
-
保存目录:$HADOOP_HOME/tmp/dfs/name/current
-
可以使用hdfs oev -i命令将日志(二进制)输出为XML文件,输出结果为:
4.维护文件元信息,将内存中不常用(采用LRU算法)的文件元信息保存在硬盘上(fsimage文件)
-
fsimage是HDFS文件系统存于硬盘中的元数据检查点,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息
-
保存目录:$HADOOP_HOME/tmp/dfs/name/current
-
可以使用hdfs oiv -i命令将日志(二进制)输出为文本(文本和XML)
贰:NameNode(名称节点)****
1.以数据块为单位,保存数据
image-
Hadoop 1.0的数据块大小: 64M
-
Hadoop 2.0 的数据块大小:128M
2.在全分布模式下,至少两个DataNode节点
3.数据保存的目录:由hadoop.tmp.dir参数指定
例如:
image叁:Secondary NameNode(第二名称节点)
1.主要作用是进行日志合并
2.日志合并的过程:
image肆:HDFS****存在的问题
- NameNode单点故障,难以应用在线场景
解决方案:Hadoop 1.0中,没有解决方案。
Hadoop 2.0 中,使用ZooKeeper实现NameNode的HA功能。
- NameNode压力过大,且内存受限,影响系统扩展性
解决方案:Hadoop 1.0 中,没有解决方案。
Hadoop 2.0 中,使用NameNode的联盟实现其水平扩展。
网友评论