首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EB 级 HDFS 集群磁带存储资源池的建设实践

HDFS是一个Apache基金会开源的一款分布式文件系统。HDFS文件系统可以部署在低成本的硬件上,对外提供高吞吐的数据访问和海量数据存储的服务。本文总结HDFS磁带存储资源池建设的实践,拓展HDFS异构存储到磁带存储介质,强化了HDFS低成本海量数据存储能力。

HDFS在2.6.0版本后引入了异构存储架构,支持内存、固态盘、HDD磁盘、SATA盘等存储介质。HDFS异构存储可以根据各种介质读写特性,发挥各自的优势。针对低频访问数据存储的需求,采用容量大的,读写性能不高的大容量磁盘存储介质存储。对比普通的Disk磁盘,容量大成本低。而对于热数据而言,可以采用SSD的方式进行存储,这样就能保证高效的读性能,在速率上甚至能做到十倍于或百倍于普通磁盘读写的速度。对于最热的数据,甚至可以直接存放内存。HDFS通过定义各种存储策略,可以根据数据的使用要求,把数据存储到相应的介质上,实现性能和成本的平衡。

目前HDFS的存储资源池有:

  • 热 -用于存储和计算。流行且仍用于处理的数据将保留在此策略中。块热时,所有副本都存储在DISK中。
  • 冷 -仅适用于计算量有限的存储。不再使用的数据或需要归档的数据从热存储移动到冷存储。当块处于冷状态时,所有副本都存储在ARCHIVE中。
  • 温暖 -部分热和部分冷。当一个块变热时,其某些副本存储在DISK中,其余副本存储在ARCHIVE中。
  • All_SSD-用于将所有副本存储在SSD中。
  • One_SSD-用于将副本之一存储在SSD中。其余副本存储在DISK中。
  • Lazy_Persist-用于在内存中写入具有单个副本的块。首先将副本写入RAM_DISK,然后将其延迟保存在DISK中。

但是HDFS目前支持的存储介质也存各种不足。相对SAN和NAS存储,分布式文件系统HDFS的成本不高($1000/TB),但是对于EB级别的数据量而言,HDFS仍然高达亿元的存储成本。其次HDFS文件系统基于廉价的通用硬件,通过数千上万台PC服务器组成庞大的分布式集群才能提供EB级存储空间服务,这种架构的数据能耗密度高,数据空间密度低,不适合绿色数据中心的长久发展。

为了克服HDFS异构存储介质的不足,本项目尝试采用磁带技术进行数据存储。磁带技术发源于上世纪五十年代,是一项悠久的计算机存储技术。磁带技术具有成本低(¥500/TB)、存储时间长(理论保存时间长达30多年)、低能耗(磁带不使用时不消耗电力)、高空间密度(9P/机柜)等特性,磁带技术广泛应用于数据备份、数据归档、异地备援等方面。

本项目采用LTFS磁带文件系统技术,构建HDFS磁带存储资源池。LTFS格式是由全球网络存储工业协会(SNIA)标准化的自描述的媒体格式,该LTFS格式是包含定义格式的文件的剩余部分头部中的自描述的媒体格式。标头包含有关数据数组,文件元素和属性以及元数据使用的说明。

LTFS卷有两个或多个分区,在IBM Spectrum®归档程序始终使用以下两个分区:数据和索引。数据分区包含所有数据和元数据。索引分区包含数据分区和元数据中的数据子集。所有分区都从VOL1开始。首先使用XML标头信息写入分区,然后再写入文件数据和元数据。所有元数据都放在文件标记之间。

LTFS卷使用标准的POSIX(便携式操作系统接口)文件操作,从而允许挂载LTFS,而无需访问其他信息源。LTFS在操作系统级别工作,可以将LTFS文件写入和读取LTFS卷,然后仅使用该卷中写入的信息在其他站点和应用程序之间传递。该体系结构的目标允许LTFS可以通过非专有或替代的数据管理和归档解决方案进行寻址。

LTFS支持LTO带机和IBM企业级带机,支持IBM入门级的TS2900和企业级的TS4500带库。

HDFS磁带存储资源池由多个data node节点组成,每个data node则是由节点服务器和带库组成。节点服务器采用IBM的HSM技术, HDFS块文件以存根文件(stub file)的形似存储在节点服务器上,HDFS块文件可以通过存根文件进行检索文件大小等属性。带库连接节点服务器,为HDFS块文件提供LTFS格式的存储空间。节点据服务器一般带有少量的本地磁盘,提供数据缓存服务。HDFS客户端写数据时,数据通常先缓存在节点服务器的本地磁盘上,然后由迁移服务把数据迁移至位于带库的磁带中。HDFS客户端读数据时,节点服务器首先通过存根文件实时召回位于磁带上的数据回本地磁盘缓存中,然后HDFS客户端读取位于本地磁盘缓存中的数据。由于采用HSM技术,磁带存储资源池支持随机读文件和批量预读文件的功能。

HDFS多介质存储架构如下:

基于磁带顺序读写的特点,建议HDFS磁带存储资源池独立建HDFS集群。现有的HDFS的自动迁移的存储策略不适合于HDFS磁带存储资源池;磁带资源池和其他的存储资源池之间的数据同步需要采用HDFS集群间数据拷贝的方式进行。

和传统的Hadoop部署架构一样,连接磁带介质的数据节点用来存储数据,节点连接接入交换机,同时通过FC光纤直接连接带库(也可以通过以太网交换机连接)。HDFS的Name Node存储用来HDFS文件的索引信息,对外提供统一的命名空间。由于磁带节点的计算负载比较重,一般磁带节点不同时提供计算服务。

整个Hadoop的部署架构如下:

大数据计算时Hadoop客户端向Resource Manager提交一个计算请求,计算节点的Node Manager产生若干个计算task(Map/Reduce),Task所在的计算节点作为HDFS客户端,向HDFS文件系统进行读写操作。当向HDFS文件系统写数据时,客户端首先向Name Node发送一个写文件请求,Name Node则会检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回客户端输出流对象。然后HDFS客户端按一定大小进行文件切片,一般大小为128MB。再后HDFS客户端将Name Node返回的分配的可写的Data Node列表和Data数据一同发送给最近的第一个Data Node节点,此后HDFS客户端和Name Node分配的多个Data Node构成pipeline管道,HDFS客户端向输出流对象中写数据。HDFS客户端每向第一个Data Node写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…Data Node。每个Data Node写完一个块后,会返回确认信息。HDFS客户端在写完数据后,关闭输输出流。最后HDFS客户端向Name Node发送完成信号。

HDFS磁带存储资源池的写操作比传统的HDFS写还多一个异步操作,位于节点服务器的迁移程序会把位于本地磁盘缓存的数据以异步的方式迁移到后端的磁带上,同时创建一个文件的存根文件(Stub file)。

HDFS磁带存储资源池的读操作比写操作要更复杂。一般HDFS读操作时, HDFS客户端首先访问Name Node,查询文件的元数据信息,获得这个文件的数据块位置列表,返回输入流对象。然后HDFS客户端会就近挑选一台data node服务器,请求建立输入流。Data Node向输入流中中写数据,并以packet为单位来校验。最后HDFS客户端关闭输入流,数据读取成功。

由于HDFS磁带存储资源池的数据真实存储在节点服务器的后端磁带中,Data Node没有数据可以向输入流中中写。所以Data Node在读取服务器上的块文件Stub file时,会触发一个HSM的recall操作,这个操作会自动把位于磁带上的数据复制到本地磁盘缓存中。

整个HDFS磁带存储资源池的读写操作流程如下:

随着项目的上线投产,通过对系统的监控,系统单个Data Node的写性能能够达到600MB/s,读性能能够达到500MB/s。整套系统由多个数据节点和多套带库组成,整套HDFS文件系统磁带存储资源池能够提供几十GB/s级别的数据吞吐能力和EB级别的数据存储能力。

目前整套HDFS磁带存储资源池系统支持海量数据的连续写能力,每天可以持续写入的数据多达数PB。同时系统也支持随机读数据,大数据计算的大批量使用数据,则建议使用批量预读取数据的方式,批量复制磁带上的数据到其他存储资源池后才能使用数据。

项目通过对HDFS磁带存储资源池的建设,实现了HDFS的内存存储、闪存存储、磁盘存储、磁带存储等多种存储介质的有机整合。在企业层面的统一文件命名空间的前提下,实现了数据在不同存储资源池之间无缝流转。磁带存储资源池极大地提高了IT对业务的支持力度,满足了业务的低成本存储需求。相比其他存储介质存储资源池,磁带存储资源池有低成本、低功耗、高空间数据密度,绿色数据中心等特点,极大的降低企业对低频数据归档数据的存储成本。

当然HDFS磁带存储资源池建设还处于初级摸索阶段,项目建设过程中也遇到很多困难,踩过很多坑,整套系统还有很多需要完善的地方,在后续项目中会继续优化完善。由于磁带和带库的机械特性,整套系统不足以支持随机高并发数据访问请求,随机读数据性能也不是很高。在HDFS磁带存储资源池建设时,需要调研业务的IO需求特性,选择合适的使用场景。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/sVbDuhLEqof0W1pUD01Y
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券