关于Hadoop中HDFS的研究

2018-02-02 18:07刘涌裴春梅韩伟高震宇
电脑知识与技术 2018年1期

刘涌+裴春梅+韩伟+高震宇

摘要:Hadoop的文件系统HDFS(Hadoop Disttributed Filesystem)是一种分布式文件系统,它利用多个商用硬件构成存储集群,利用namenode进行数据的存储控制,具有支持超大文件、存储灵活、可靠性高等特点,在面对大量数据存储的时候,能够高效地工作,但在处理大量小数据时、需要进行低延迟数据访问时和需要多用户访问写入时仍存在一定的不足。总之,HDFS技术在市场潜力巨大的同时,还存在很多可以改善讨论的地方,具有较高的研究价值。

关键词:Hadoop;HDFS;block;namenode

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)01-0007-02

1 概述

随着人们工作生活中数据量的不断加大,个人电脑中单机存储的体积也在不断增大,与之相对应的,数据中心的数据压力也在成倍增长;要存储这些超大文件,可以对数据进行分区并存储到网络中若干单独的计算机上,管理网络中多台计算机存储的文件系统称为分布式文件系统(Distributed Filesystem)。Hadoop的分布式系统称为HDFS,即Hadoop Distributed Filesystem。

HDFS以流式数据访问模式来存储超大文件,即一次写入,多次读取的方式存取数据最佳:数据集通常由数据源生成或复制而成,接着长时间在此数据集上进行各种分析,这个数据源的写入总是仅在文件的末尾添加数据,不支持多源写入(以目前的技术,即使实现任意位置写入等功能,效率也比较低)。Hadoop是设计运行在民用硬件(普通家用电脑)的集群上的,因此节点的故障率相对于昂贵的专用硬件较高,HDFS的作用就是当节点发生故障时,让一般用户察觉不到明显的中断。

2 HDFS数据块

数据块(block)是磁盘读写数据的最小单位,文件系统通过格式化硬盘,构造特有的磁盘块来管理磁盘存储,通常文件系统块为几k字节(Byte),而磁盘块为512字节,常见的Windows服务器必须安装在NTFS文件系统上,就是因为尽在这种文件系统上才支持服务器对磁盘的管理。HDFS也有块的概念,默认为64MB,与常规文件系统类似,HDFS也将多个块组合作为独立的存储单元(chunk),不同的是,当存储文件小于块大小时,不会独占整个块存储空间。

之所以HDFS中的块要大一些,是为了节省寻址开销:众所周知,在单机上频繁进行硬盘读写操作后,容易产生磁盘存储碎片,进而降低计算机整体运算速度,磁盘碎片整理的过程,其实质是将散乱存储的数据,整理到磁盘相对集中的区域,从而减少磁头寻址时间;同样的,当单位数据块较大时,磁盘读取数据的效率也会明显提高。假设寻址时间固定为10ms,传输速率为100MB/s,为了使寻址时间占传输时间的1%,应将块大小设置为100MB,即1s内,首先用1/100s寻址,之后开始传输,由于数据块有100MB,因此在传输完毕前无需再次寻址,这样,就实现了1:100的高效传输,而通常情况下,HDFS也是使用128MB的块设置。当然,块的大小也不是越大越好,MapReduce中map任务每次只调用一个块进行处理,当map任务数小于节点数量时,会造成大量节点闲置,反而降低了整体的处理速度。

利用这样的块结构,HDFS允许文件的大小大于网络中任意一个磁盘的空间,因为文件的所有块并不需要保存在一个磁盘上;其次,这样的设计也使得存储管理变得更加容易,由于单位块的大小是固定的,文件管理系统很容易计算磁盘能够容纳多少块,同時,每个块只存储一部分数据,而诸如文件权限等信息不需要与块一同存储,这样,系统就能够单独管理这些信息;在容错性方面,块结构能够有效实现数据的备份,HDFS默认将每个块复制到三台独立的设备上,确保在设备发生故障,导致某个块不可用时,从其他设备读取其副本,保证数据的完整性。

3 namenode

HDFS中存在一个namenode(管理者)和多个datanode(工作者),其中namenode负责管理文件系统的命名,记录所有文件和目录,即永久存在于磁盘的命名空间镜像文件和编辑日志文件,同时,它还负责临时保存块的位置信息。客户通过文件系统接口访问数据,其实质是在与namenode和datanode进行交互。

Datanode是文件系统的工作节点,它就像是人们的末梢神经一样,为各项感知提供数据,而namenode就好像是人们的大脑,对神经的反馈进行综合处理:datanode根据需要存储并检索数据库,定期向namenode发送存储块的列表,而namenode负责记录如何重建文件。namenode一旦损坏,整个文件系统将瘫痪,Hadoop为此提供两种容错机制:

1) 备份机制。

备份组成文件系统元数据持久状态的文件:Hadoop可以同步将持久状态写入本地磁盘的同时,写入一个远程的网络文件系统(NFS)

2) 辅助namenode

在另一台单独的计算机上运行一个辅助namenode,定期编辑日志合并命名空间镜像,以防止编辑日志过大,它需要消耗与namenode同等的CPU和内存资源进行合并操作,并保存合并后的命名空间镜像副本。

4 高可用性

通过以上两种方法,依旧无法实现HDFS的高可用性,因为namenode是唯一存储元数据与文件到数据块映射的单元,当namenode失效时,所有客户端均无法实现读写等操作。直到管理员建立一个新的namenode,并将命名空间的映像倒入内存,重新编辑日志,收到大量的来自datanode的数据块报告并退出安全模式后,系统才能够恢复,而对于大型数据集群来说,这种冷启动需要30分钟甚至更长的时间。

实际工作中,namenode失效的可能性非常低,Hadoop的2.X发行版本针对上述问题也在HDFS增加了对高可用性(HA)的支持,并做了如下修改:

1) namenode之间通过高可用的共享存储实现编辑日志的共享,当备用namenode接管之后,将共享全部编辑日志,以实现与活动的namenode同步,并继续读取活动中的namenode的最新信息。

2) datanode向两个namenode同时发送报告。

3) 客户端用特定的透明机制处理namenode的失效问题。

由于最新的编辑日志和数据块映射信息在内存条内,在活动的namenode失效后,备用namenode能够在几十秒内实现任务接管,实际过程中,为了等待系统确定namenode是否真的失效,失效时间大约在1分钟左右。

5 结束语

HDFS(Hadoop Disttributed Filesystem)的以上种种表明,这是一种行之有效的大数据文件存储系统,符合大数据的基本存储需求,能够实现数据的负载均衡存储、存储方法方便简洁、可用性高、容错性强。目前HDFS还存在包括上文所述在内的一些问题,部分问题解决的意义不大,部分问题仍需讨论,但在可见的未来内,HDFS将持续保持自己的活力,并更加得到市场的认可。

参考文献:

[1] 张子凡. OpenStack部署实践[M].北京:人民邮电出版社,2014:1-364.

[2] 鲍亮,李倩. 实战大数据[M].北京:清华大学出版社,2014:1-327.

[3] 吴萍,朱晴婷. 算法与程序设计基础(Python版)[M].北京:清华大学出版社,2015:30-270.endprint