您的位置:首页 > 大数据 > Hadoop

HDFS基本介绍

2014-07-29 13:59 253 查看

基本结构

l HDFS是服务于Hadoop的分布式文件系统,由namenode,datanode和client三部分组成。
l HDFS适合一次写入,多次读取的数据操作格式[hx1]
l HDFS运行在一般的普通硬件基础上,硬件故障频率较高,所以要求较高的容错性和稳定性。
l HDFS不适合小文件的读写,因为文件元数据是存放在namenode的内存中,小文件数量过多,容易将namenode内存打满。
l HDFS不支持多用户写入,不支持在文件的任意位置进行修改[hx2]
l HDFS是以64M的数据块结构进行存储的。不足64M的数据,写入一个数据大小的块;超过64M的数据被划分成多个块进行存放。

分布式系统采用block块存储的原因:

1. 文件的大小不受盘的大小的限制;

2. 简化存储管理;

3. 适合于数据备份。

HDFS选择64M数据块的原因:

1. 降低寻址时间,平衡寻址时间和传输时间。若块太小,寻址时间会增加;块太大,影响Hadoop的计算性能。

Namenode

Namenode是HDFS的管理中心,即master。Namenode一般有两台机器组成,一台是主namenode,用于提供管理服务,即存放文件系统元数据并进行调度管理,一台是secondary namenode,用于做备份。

主namenode

Namenode运行时,元数据信息都是存放在内存中的。每一个文件或目录的存储信息大约要占150字节。Namenode的目录是在/current/下,有4个主要文件。

l VERSION: 这个文件中有Hadoop的版本信息,以及名字空间ID,和该节点是namenode的标示等基本信息。
l Fsimage: 这是文件系统镜像文件,一段时间做一次更新。里面存放了文件的创建修改时间,许可,块和块大小等信息。但是不会存放datanode信息,每当有datanode加入集群时,namenode通过向datanode索取它的块列表来建立映射。
l Edits: 这是编辑日志,存放一段时间内文件系统的各项操作的日志。
l FStime: 未知

Namenode的启动:

用于集群的启动以及namenode发生故障时的重启。首先,将fsimage载入内存形成HDFS系统元数据;然后依次执行每一条edits日志中的操作;同时每个datanode加入集群之后,namenode会向它请求datanode上的块列表并建立映射关系。

创建检查点:

Namenode上的元数据是存放在fsimage和Edits中的,创建检查点的目的是防止edits的数据量过多,在重启操作中会比较慢。创建检查点的条件是:创建检查点周期,fs.checkpoint.period 或 edits日志的大小达到了阈值fs.checkpoint.size。创建检查点的过程:namenode创建一个新的Edits文件进行日志记录,然后secondary namenode从主namenode获得fsimage和Edits文件,将fsimage载入内存并执行Edits,得到新的fsimage文件。Secondary
namenode将fsimage发回主namenode,主namenode用新的fsimage替换旧的,并将edits.new替换edits。

Namenode容错性:

1. Secondary namenode备机: 备机定期同步主namenode的信息,可用于在主namenode故障时启用和恢复。

2. 备份namenode的主要文件,比如通过脚本定期将current文件夹下的数据做多个备份,比如备份到网络文件系统中等等。

Secondary namenode

Secondary namenode对内存和性能的要求和主namenode是一致的,因为在每次创建检查点的时候,相当于是要镜像一次主namenode上的元数据。

Secondary namenode上保存着和namenode一致的数据,存放在previous.checkpoint目录下。当namenode出现故障时,可以启动Secondary namenode提供服务或者将Secondary上的数据拷贝到新机器上提供服务。

Datanode

一个HDFS中只能有一个namenode,但可以有许多datanode。Datanode主要用于存储和检索数据,接受namenode的调度,以及将块信息发送给namenode。

在启动datanode的时候,datanode上会自动创建/current/目录。所以datanode的启动是不需要格式化的。

Current目录中存放三种类型的数据,一类是blk_...,是数据块文件;一类是blk_....meta,是数据块的元数据文件,这里存放对应的数据块的基本信息以及校验和;还有一个叫VERSION的文件,是datanode的版本信息,其中的namespaceID在datanode首次与namenode交互的时候从namenode获得。

Current目录中存放的数据块有数量限制,当超过dfs.datanode.numblocks的数据块时,自动创建subdir的子目录存放。貌似子目录的数目也有限制。

几个重要的配置文件

每个节点都保存一套配置文件,这些配置文件是完全同步的,Hadoop脚本可以对它们进行管理和同步[hx7] 。这样的好处是,管理简单,只需要维护一套配置文件。缺点是当集群中机器的硬件不一致时,需要引用外来工具管理多套不同的配置文件。

Hadoop配置中常用的配置文件和变量:

l /bin/hadoop-env.sh: 环境变量
l /bin/core-site.xml:HDFS和M/R的常用配置
- fs.default.name: 描述HDFS文件系统的URI,指定namenode
- fs.checkpoint.dir: 辅助namenode上检查点存放目录
l /bin/hdfs-site.xml:HDFS的守护进程的配置,包括namenode,辅助namenode以及datanode等配置
- dfs.name.dir: 指定fsimage和edits等永久性元数据文件的存储地址
- dfs.data.dir:datanode上存放数据块的目录
l /conf/masters: 辅助namenode,可以不只一台
l /conf/slaves:datanode机器名

等等,其他变量的解释略,有需要的时候到相应的配置文件中寻找就好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: