时间:2024-07-28
谢 帆 彭玉涛
(井冈山大学网络信息中心,江西 吉安 343009)
面对海量大文件、小文件存储混乱的问题,引入基于Hadoop分布式架构的云存储系统、HBase数据库,并提出海量小文件存储的HPM优化方案。根据小文件体积不均匀、数量多的特征,通过创建不同类别的小文件索引,将MDS镜像文件与文件名拼接成字符串,完成多个小文件合并设置,并采用Ehcache缓存框架对需要访问的特定数据文件,缓存至云存储平台的客户端中,能够充分保证用户在与Hadoop集群交互、重复信息访问的效率,以及分布式数据存储的可靠性、容错性。
分布式存储是将分布式文件系统,部署于多个分散的云服务器中,并采用ScaleOut横向扩展架构,将不同的数据信息处理、存储任务,分布到多个低成本的网络节点,并可根据数据存储的需求添加节点,来扩展云服务存储容量、存储功能。[1]外部客户端可通过互联网,接入到分布式存储的云服务平台之中,对任意时间、任意地点、任意数据对象的存储行为,进行独立存储节点、数据存储任务的配置,提供面向客户端、按需的云存储服务。
存储虚拟化是指存储设备虚拟化、存储服务虚拟化、网络虚拟化,目的在于通过硬件及应用虚拟化、数据封装技术,解决不同计算机设备接口、存储容量间的差异问题,使得用户在数据信息处理、存储过程中,无需考虑后台的硬件配置、资源负载状况。
在PC主机上设置虚拟化层,虚拟出应用软件、虚拟存储管理设备,并通过映像技术虚拟出CPU、I/O通讯接口,以及NAS、SAN等虚拟网络存储,在数据信息处理与存储中共用同一传输信道,或者经由数据通道直接访问存储设备,实现底层硬件、上层存储业务的互相耦合。
数据容错技术为分布式云存储的故障处理技术,包括复制性数据容错、纠删码型数据容错等内容。其中复制性数据容错技术,是通过设置多个数据处理模块,用于不同网络节点的数据处理、存储控制,当某一模块损坏后可断开或隔离该模块,内部节点的其余模块可正常运行,但缺点是复制性数据容错技术需要建立副本,会占用大量的存储硬件资源。纠删码型数据容错技术、数据加密技术,则是采用存储数据的编码处理方式、TTL/SSL技术等进行编码加密、解码控制,用于防控外部用户攻击、病毒入侵,其占用的存储硬件资源较少,但缺陷是编解码过程对服务器设备的性能要求更高。
HadoopArchives作为数据文档或文件的合并工具,通常利用MapReduce模型编程、HAR文件元数据信息设置与合并,完成小的数据文件处理、归档存储等操作,并将归档后的文件添加至系统索引中。[2]如针对_index、_masterindex形式的小数据文件,可由HAR打包工具设置*.har的文件扩展名,其中包含了不同数据的文件名、位置等元数据信息,然后用part-*存放数据内容、用masterindex存放hashcode指针,归档处理后的har文件可压缩和解压,这样能够最大程度减少磁盘容量的占用。
SequenceFile与HAR的数据文件合并方案类似,是以[key value]键值对的二进制文件作为小文件合并的元数据信息处理方式,其中设置key为小文件名、value为小文件内容,以数据块为单位进行序列化合并,将小文件数据切为split格式的片,作为MapReduce并行计算、存储的输入值,使小文件合并降低NameNode内存开销。但缺陷是该文件格式不能建立索引,读取时需遍历整个源文件。因而这一数据文件合并方案,即使采取Block组织方式对key、value都进行压缩,也难以满足低延时随机访问的数据读取需求。
为解决这一问题,本文给出HPM分级处理的小文件优化方案,采用HPM方案改进现有的HDFS分布式存储架构,将其设置为包含用户层、数据处理层、存储层的多层结构,具体如图1所示。
图1 HPM方案改进的HDFS分布式存储架构
其中HPM分级处理模块位于数据处理层,该层级包含文件重复判定、文件大小判定、文件合并、缓存和预取等的子模块,根据服务器/客户机(C/S)模式传输的文件大小,HPM通过以上多个处理模块,完成不同文件名称字符串、MD5值的数据检索分析,判定文件大小、是否存在重复,将小文件通过合并模块的合并队列、临时队列进行合并,使合并文件大小满足系统数据块的阈值要求,降低NameNode的内存开销。同时,在索引子模块中创建索引文件,在HBase数据库中记录临时索引信息,将检索的同一类型的小文件合并;在缓存和预取子模块中,扫描数据文件的访问次数,记录访问频率更高的文件,并将该文件缓存于HDFS存储端,以便于用户端对数据文件的重复访问和读取。
在分布式存储系统构建之前,需要利用各节点主机、VMWare虚拟机、Hadoop集群,进行完全分布式系统架构的环境部署。选用6台PC机作为NameNode节点、DataNode节点、SecondaryNameNode节点的主机,分别命名为masterl、master2、slavel、……、slave4,各主机在不同节点上执行主机名修改,以及network-scripts目录的ifcfg-eth0文件修改、静态IP地址配置等任务,使Hadoop集群的多个节点名与节点IP地址相对应[3]。
而后对Hadoop分布式架构的Java编译运行环境进行配置,设置由ssh管理的免密钥登录节点,设定各节点的数据存放目录/opt/software、解压目录/opt/module,ssh免密钥配置的执行流程为:$ssh-keygen-trsa;$cd/root/.ssh;$ssh-copy-idslavel~4,即输入命令分别对应id_rsa.pub(公钥)、id_rsa(私钥)等文件,在master节点进入/root/.ssh目录,将公钥拷贝到可免密登录的slavel、……、slave4节点,由此只需通过sshroot@slavel~4命令验证,即可完成存储节点设置。
Hadoop环境变量的配置需打开etc目录,将profile文件的用户名$LOGNAME/.profile、登录目录$HOME/.profile变量,添加到数据存储的运行环境中,在profile文件末尾添加Hadoop路径vim/etc/profile,保存退出。而后对masterl节点、slaves节点的环境变量进行设置,将jdk安装路径加入至masterl节点,添加slave节点的IP地址,修改Hadoop核心配置文件来完成节点IP和端口设置。
基于Hadoop分布式集群环境,构建用于数据处理、存储的云服务管理系统,对系统内的文件大小、名称、长度、合并偏移值等元数据信息,以及数据文件的存储路径进行科学规范管理[4]。云存储系统模型的层次化组成结构,包括存储层、数据管理层、应用接口层、用户访问层等层级,具体如图2所示。
图2 分布式存储系统的组成架构
该分布式云存储系统模型以B/S(浏览器/服务器)模式,作为用户访问、数据处理与存储的功能实现方式,由应用服务器响应用户登录、文件上传/下载的执行命令,Hadoop集群节点存储大文件、小文件、合并文件。
存储层为系统最底层,通常包含HDFS存储器、Web服务器、存储硬盘等设备;数据管理层借助于Hadoop分布式集群、存储器装置,设置多个网络节点、虚拟出NAS、SAN存储装置,可提供数据读取、写入、浏览、删除的功能服务。
应用接口层为系统的网络连接层,包含API、webserver等接口,在数据接入、网络信道传输过程中,由Web服务器控制用户访问请求、文件处理与存储需求,安排Nginx反向代理向多个网络节点分配负载,并将处理后的数据写入至Hadoop集群、MySQL或HDFS存储数据库中。
用户访问层为系统最外层,由管理服务器分配与配置系统账号、登录密码,展示用于用户访问控制的注册、登录等操作页面。
网络云平台中的数据文件存储设置,通常围绕着用户层、数据处理层、存储层等系统层级,设置用于数据文件存储的大小判定模块、重复判定模块、合并模块、缓存及预读写模块,分级完成多个小文件数据的连续处理[5]。
(1)文件大小判定的功能模块。当前网络传输、存储数据文件大小的阈值设定,通常依照HDFS分布式文件存储的标准,默认数据块大小为64MB,小于64MB的存储数据文件被称为小文件,但这一文件阈值设定过高,将导致不必要的文件合并,过低又会增加合并后的小文件数量,因此本文设定小文件阈值为10MB。
(2)文件重复判定的功能模块。数据文件传输的重复性判定,通常使用MDS信息摘要算法,对不定长度数据信息,处理为具有固定字符串长度的数据元组,并输出由MDS算法处理后的结果A。当用户客户端上传文数据件后,查看数据信息的MDS值是否存在于HBase数据库中,若存在表明数据已被写入、无需重复写入,具体基于MDS算法的数据文件重复判定步骤如下:
第一,对数据长度为M的文件进行二进制数填充(包括1和n个0),直到字符串扩充为448+N*512(bit)的长度则停止填充。
第二,用64位字符串存储填充前的数据信息长度,按照64位求余的结果,追加长度为448+N*512+64=(N+1)*512(bit)的数据序列。
第三,设置32位初始化链路变量A、B、C、D,对输入数据分为字符串长度为512bit的信息块,进行多轮线性函数循环运算,求解公式为lib=(ABC)T+(ABD)T+(ACD)T+(BCD)T,得到lib1、lib2……等的相加求和结果lib,作为MDS值。将MDS值与HBase数据库中的文件名、文件内容字符串作对比,进行重复数据的筛除、过滤。
(3)文件合并的功能模块。HDFS分布式存储架构,可按照顺序进行大文件的存取、合并,但在大量小文件的处理、合并方面性能较差,而对缓存区队列设定阈值、遍历小文件的方式,虽然能完成大部分主流小文件的处理、合并存储操作,但以“文件体积”控制为主的合并,将造成合并后的数据体积不均、NameNode内存浪费问题。
根据以上数据文件大小判定标准,设定小文件阈值为10MB的体积最优模式,也即当传输文件体积大于10MB时不作处理,小于10MB时按照数据文件大小判定的要求,按照文件体积大小进行均匀分布,执行文件大小的判定算法(具体代码如图3所示)对其合并处理,并调用API接口上传大文件至DataNode集群中存储。这一基于体积最优的小文件合并算法,可最大化利用数据块的存储空间,避免合并小文件被分割、跨越数据块存储,降低NameNode节点的内存开销。
文件大小的判定算法如下:
(4)文件索引、缓存的功能模块。在HPM多处理器架构中,设置小文件读取分级模块、建立索引文件,使用HBase索引表、数据库存储临时的索引文件信息,包括数据文件名、块BlockID、存储路径、MDS值等的信息,以及合并后的小文件长度、偏移值信息。其中对不同类型的数据文件进行标记,大小数据文件分别记为flag=1、flag=0,合并文件记为flag=2,根据标记选择数据读取、索引的执行策略。
网络数据小文件缓存的主要目的,在于方便HDFS分布式存储系统的读写操作,也即“一次写入、多次读取”。依托于HBase索引表、HDFS分布式存储器与I/O接口,可针对外部用户客户端访问的NameNode请求,设置元数据文件的缓存机制、置换策略,响应请求后将大文件、合并文件的元数据信息,以及将小文件的文件名、长度和偏移值等信息,缓存到HDFS存储器之中,当目标文件被访问时,直接检索HDFS存储器的元数据信息即可[6]。这里小文件缓存信息与
分布式云存储是基于多台PC主机、服务器及数据库,将网络数据处理的任务程序,拆分为多个动态资源分配的小程序,为不同用户分配动态的资源池,完成数据存储的按需资源配置、功能扩展。因而对于不同数据信息的分布式云存储,借助于Hadoop分布式架构、HDFS存储器、HBase数据库、PC主机、VMWare虚拟机等软硬件设备,搭建起虚拟化云存储服务平台,提供分布式接入、全局访问、虚拟化处理与存储的服务,可完成对大小数据文件的分布式存储、存储虚拟化及数据容错处理。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!