论文部分内容阅读
摘要:HBase解决了大规模数据的结构化存储和实时的随机读写访问,但HBase提供的API在大规模数据批量写入等方面存在着性能瓶颈,不能很好地满足应用需求。本文提出了基于MapReduce架构实现HBase的性能优化方案,并设计了分布式程序进行验证,实验表明在海量数据应用条件下采用MapReduce计算框架能够利用HBase集群的计算性能,相比传统的单线程和多线程数据写入方式具有更好的实用性和有效性,同时结合这三类数据写入方式的性能特征提出了以写入数据量为依据的选择策略。
关键词:MapReduce,Hadoop,HBase,海量数据
中图分类号:TP392 文献标识码:A 文章编号:1009-3044(2019)06-0009-05
Testing and optimization of HBase writing performance based on massive data
QING Xin1,, WEN Wei-jun1, JIN Xing1, JIANG Zhen1
(75837 Troops, Guangzhou 510000, China)
Abstract: HBase solves the structured storage of massive data and real-time random read and write access. But, There is a performance bottleneck of HBase API in large scale data batch write, and it cannot meet the demands of application. This paper realized performance optimization of HBase based on MapReduce architecture, and designs the distributed programs. The Experiments show that in the massive data application condition, MapReduce can take the advantage of the calculating capacity of HBase cluster, and more practical and effective than traditional single thread and multi-thread data writing method. Combined with The performance characteristics of the three types of data write mode, this paper proposed a selection policy based on data amount.
Key words: MapReduce; Hadoop; HBase; massive data
云計算[1][2]实际是以商业应用为背景结合了之前学术界所提到的如“网格计算”、“互联网计算”、“按需计算”等概念发展而来的一种分布式计算模式,也正是因为其以商业应用为依托,云计算在近几年提到了快速的发展。云计算因其实用价值在工业界和学术界得到了一致的认可。作为一种全新的应用模式,云计算已成为人们提供服务、存储数据、进行数据挖掘等应用和研究的主要方式。
云数据库HBase[3][4][17]是Hadoop[5]的Apache顶层项目,它是BigTable[6]的开源实现。作者在实验室搭建了一个基于HBase的数据注册和发布的管理平台,在应用中发现HBase在海量数据的写入时,由于HBase提供的API接口是单线程操作,不能有效的利用HBase集群的计算资源,不能满足平台的性能要求。
本文结合实际问题,为了能提高HBase数据管理系统的效率,特别是在海量数据条件下的写入性能,采用MapReduce[7]编程模型与HBase相结合的方法进行性能优化,并进行了读写性能的测试。实验结果表明,MapReduce计算模型充分利用HBase集群中各个节点的计算资源, HBase的数据写入性能得到了极大的提高。
1 相关知识
1.1 MapReduce编程模型
MapReduce是Google提出的在分布式集群中并行处理少量数据的编程模型,把在大规模的数据集的操作分发给主节点管理下的集群中的各个资源节点来完成,极大地简化了分布式程序的结构和编写。MapReduce执行一个任务的过程可以分解为Job的分解和结果的汇总,这处理过程被MapReduce抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果进行汇总,图1显示了MapReduce任务逻辑过程[8]。
从图中可以看出整个计算模型的核心部分是Map()和Reduce(),这两个函数的具体功能和操作是由用户根据需求自己来设计实现,只要能按用户自定义的规则,将输入的对转换成另一个或一批对输出。
在Map阶段,MapReduce框架首先将输入的数据分割成大小固定的数据块(Splits),随后将每个Split分解为一批键值对作为Map()的输入,经过处理计算得到中间结果,再按照key2进行排序,并把具有相同key值的value集中形成一个新列表,形成作为Reduce()的输入数据。
在Reduce阶段,Reduce()以为输入数据,按照用户自定义的操作进行计算,得到最终的结果并输出。
可以看出MapReduce计算过程充分地利用了分布式集群资源,使整个集群的计算具有了更高的效率。HBase是目前比较流行的云数据管理平台,具有分布式特性,那么利用MapReduce来进行性能优化是一个有效的选择。
1.2 HBase云数据库
HBase是基于HDFS的开源数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统,用于存储粗粒度的结构化数据。HBase以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族(Column Family)。表中由行和列确定的存储单元称为一个元素(Cell),每个元素保存了同一份数据的多个版本,由时间戳(Time Stamp)来标识,在逻辑上HBase是一张超大规模的稀疏表,如表1所示。
行键是数据行在表中的唯一标识,并作为检索记录的主键。在HBase中访问表中的行只有三种方式:通过单个行键访问、给定行键的范围访问和全表扫描。行键可以是任意字符串(最大长度64KB)[6],并按照字典序进行存储。
HBase是按照列存储的稀疏行/列矩阵,在物理存储中就是把逻辑模型中的一个行进行分割,并按照列族存储,同时表中的空值不会被存储。每个表被建立的时候都只有一个Region(HBase存储的单元),随着表中的记录数不断增加直到数据量超过Region定义的阈值时,Region就会被分割形成两个新的Region,每个Region存储大表中某个行范围的数据。所以当数据记录不断增加后,整个表将会由多个Region组成,而Region作为HBase分布式存储的最小单位,将会被分配到集群中各个Region服务器上,以达到负载均衡的目的。每个Region由一个或多个Store组成,每个Store保存一个列族的所有数据。每个Store又是由一个memStore和零个或多个StoreFile组成,StoreFile则是以HFile的格式存储在HDFS上的,如图2所示。
可以看到,HBase是以Region作为最小的单位实现负载均衡,多个Regions分配到集群中的各个资源节点从而使数据达到分布式存储的目的。并且在Region内部也是采用了分块存储的机制。那么,这种存储机制对于MapReduce的应用起到了很好的支撑作用,并且MapReduce能够识别每个Region的存储节点,从而把该Region的计算任务分配它存储的节点,达到了移到计算而不移动数据的目的,经证明这种方式能最大程度的利用集群性能和节约开销。
2 HBase写入性能测试与优化
HBase数据写入功能可以分为单数据写入和批量数据导入,其运用场景分别为数据注册和发布的管理平台中普通用户数据发布与注册、用户注册和数据修改等和传统RDBMS向云数据库的数据转移以及批量数据导入,本文对HBase这两种方式的性能进行了测试。
2.1 集群结构
首先在实验室搭建了HBase集群,并设计了针对性的应用,来对比使用MapReduce前后的性能差异。
实验环境中共有6台服务器,搭建完全分布式HDFS与HBase环境,采用的Hadoop与HBase版本为hadoop0.20.2[9]与HBase0.92.0[10],其中一台节点做为NameNode和Master,另一台做为Master备份节点,剩余四台则做为DataNode和RegionServer节点,并且在其上运行Zookeeper服务,整个实验环境结构如图3所示。
2.2 单线程数据写入性能
2.2.1 单个数据写入
单个数据写入实验的目的在于测试一条随机数据的写入性能,从而模拟用户在使用数据注册和发布管理平台时的数据写入操作,检测HBase性能是否满足平台设计要求,实验结果如图 4所示。
经过测试分析单个数据写入时间在200ms左右,可以看出测试性能完全满足实际运用,保证了系统性能良好。对其过程进行跟踪分析,发现数据写入时间主要消耗在客户端与HBase服务器建立数据连接,而實际的一条数据写入时间为1至2毫秒。
2.2.2 大数据的批量导入
数据注册和发布的管理平台[15][16]除了对普通用户提供数据访问外,还要对外部程序或系统提供批量数据写入和同步功能,实验测试了HBase导入不同规模数据所用的时间,导入数据为根据数据表格式随机生成的数据,其规模从10000条到1000万条,这样能够很好地测试HBase在各种条件下批量数据导入所需要时间。
生成数据为TXT文档,命名为MetaData 数据量。实验中记录用HBase提供的单线程API将各数据集写入HBase所用时间,结果如表2所示。
实验结果表明,数据写入时间随着数据集增大线性增加,经过计算,数据的写入速度平均为600条/秒(单次数据写入只需建立一个HBase数据连接)。如表中所示,在海量数据写入时将需要大量时间,当导入1000万条数据时要16688秒(4小时38分钟)。
2.2.3 结果分析
在HBase数据写入性能实验中,本文就HBase提供两种数据写入方式的性能进行了详细测试。一是单个数据的写入性能,在HBase集群中重复数据写入操作并记录所需时间,结果表明HBase的单个数据写入性能非常稳定,大约为200毫秒,能满足分布式资源虚拟化整合平台的性能要求。二是批量数据写入性能,由于HBase提供的数据写入API是单线程的,不能很好地利用HBase的集群计算资源,在海量数据条件下其性能较差,不能要求系统对海量数据处理的要求。
2.3 基于多线程的HBase写入性能优化
采用多线程对数据批量导入性能进行优化,本文主要测试了数据量和线程数量这两个条件对性能的影响。 实验结果表明在实现分布式资源虚拟化整合平台的过程中,必须结合系统功能和性能需求,合理选择数据处理方法,这样才能使系统性能达到最优。
4 总结
本文对HBase数据写入性能进行详细测试,全面了解其性能特性。通过测试找到了HBase的不足,并根据HBase数据库存在的性能缺陷。提出了采用多线程和MapReduce计算框架的并行处理方法来提高其性能,并对实验结果进行总结分析,提出根据不同应用场景综合运用不同数据处理方法的策略。
参考文献:
[1]Armbrust M, Fox A, Griffith R, et al. A view of cloud computing[J]. Communications of the ACM, 2010, 53(4): 50-58.
[2]陈全, 邓倩妮. 云计算及其关键技术[J]. 计算机应用, 2009, 29(9): 2562-2567.
[3]George L. HBase: the definitive guide[M]. O’Reilly Media, Incorporated, 2011.
[4]HBase [EB/OL], https://zh.wikipedia.org/wiki/HBase, 2013-04-10.
[5]Hadoop [EB/OL], https://zh.wikipedia.org/wiki/HBase, 2013-04-10.
[6]Chang F, Dean J, Ghemawat S, et al. Bigtable: A distributed storage system for structured data[J]. ACM Transactions on Computer Systems (TOCS), 2008, 26(2): 4.
[7]Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1): 107-113.
[8]李明, 胥光辉, 戢瑶. MapReduce 编程模型在网络I/O密集型程序中的应用研究[J]. 计算机应用研究, 2011, 28(9):3372-3374.
[9]http://hadoop.apache.org/docs/r0.20.0/releasenotes.html, 2011-03-13
[10]https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310753
关键词:MapReduce,Hadoop,HBase,海量数据
中图分类号:TP392 文献标识码:A 文章编号:1009-3044(2019)06-0009-05
Testing and optimization of HBase writing performance based on massive data
QING Xin1,, WEN Wei-jun1, JIN Xing1, JIANG Zhen1
(75837 Troops, Guangzhou 510000, China)
Abstract: HBase solves the structured storage of massive data and real-time random read and write access. But, There is a performance bottleneck of HBase API in large scale data batch write, and it cannot meet the demands of application. This paper realized performance optimization of HBase based on MapReduce architecture, and designs the distributed programs. The Experiments show that in the massive data application condition, MapReduce can take the advantage of the calculating capacity of HBase cluster, and more practical and effective than traditional single thread and multi-thread data writing method. Combined with The performance characteristics of the three types of data write mode, this paper proposed a selection policy based on data amount.
Key words: MapReduce; Hadoop; HBase; massive data
云計算[1][2]实际是以商业应用为背景结合了之前学术界所提到的如“网格计算”、“互联网计算”、“按需计算”等概念发展而来的一种分布式计算模式,也正是因为其以商业应用为依托,云计算在近几年提到了快速的发展。云计算因其实用价值在工业界和学术界得到了一致的认可。作为一种全新的应用模式,云计算已成为人们提供服务、存储数据、进行数据挖掘等应用和研究的主要方式。
云数据库HBase[3][4][17]是Hadoop[5]的Apache顶层项目,它是BigTable[6]的开源实现。作者在实验室搭建了一个基于HBase的数据注册和发布的管理平台,在应用中发现HBase在海量数据的写入时,由于HBase提供的API接口是单线程操作,不能有效的利用HBase集群的计算资源,不能满足平台的性能要求。
本文结合实际问题,为了能提高HBase数据管理系统的效率,特别是在海量数据条件下的写入性能,采用MapReduce[7]编程模型与HBase相结合的方法进行性能优化,并进行了读写性能的测试。实验结果表明,MapReduce计算模型充分利用HBase集群中各个节点的计算资源, HBase的数据写入性能得到了极大的提高。
1 相关知识
1.1 MapReduce编程模型
MapReduce是Google提出的在分布式集群中并行处理少量数据的编程模型,把在大规模的数据集的操作分发给主节点管理下的集群中的各个资源节点来完成,极大地简化了分布式程序的结构和编写。MapReduce执行一个任务的过程可以分解为Job的分解和结果的汇总,这处理过程被MapReduce抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果进行汇总,图1显示了MapReduce任务逻辑过程[8]。
从图中可以看出整个计算模型的核心部分是Map()和Reduce(),这两个函数的具体功能和操作是由用户根据需求自己来设计实现,只要能按用户自定义的规则,将输入的
在Map阶段,MapReduce框架首先将输入的数据分割成大小固定的数据块(Splits),随后将每个Split分解为一批键值对
在Reduce阶段,Reduce()以
1.2 HBase云数据库
HBase是基于HDFS的开源数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统,用于存储粗粒度的结构化数据。HBase以表的形式存储数据,每个表由行和列组成,每个列属于一个特定的列族(Column Family)。表中由行和列确定的存储单元称为一个元素(Cell),每个元素保存了同一份数据的多个版本,由时间戳(Time Stamp)来标识,在逻辑上HBase是一张超大规模的稀疏表,如表1所示。
行键是数据行在表中的唯一标识,并作为检索记录的主键。在HBase中访问表中的行只有三种方式:通过单个行键访问、给定行键的范围访问和全表扫描。行键可以是任意字符串(最大长度64KB)[6],并按照字典序进行存储。
HBase是按照列存储的稀疏行/列矩阵,在物理存储中就是把逻辑模型中的一个行进行分割,并按照列族存储,同时表中的空值不会被存储。每个表被建立的时候都只有一个Region(HBase存储的单元),随着表中的记录数不断增加直到数据量超过Region定义的阈值时,Region就会被分割形成两个新的Region,每个Region存储大表中某个行范围的数据。所以当数据记录不断增加后,整个表将会由多个Region组成,而Region作为HBase分布式存储的最小单位,将会被分配到集群中各个Region服务器上,以达到负载均衡的目的。每个Region由一个或多个Store组成,每个Store保存一个列族的所有数据。每个Store又是由一个memStore和零个或多个StoreFile组成,StoreFile则是以HFile的格式存储在HDFS上的,如图2所示。
可以看到,HBase是以Region作为最小的单位实现负载均衡,多个Regions分配到集群中的各个资源节点从而使数据达到分布式存储的目的。并且在Region内部也是采用了分块存储的机制。那么,这种存储机制对于MapReduce的应用起到了很好的支撑作用,并且MapReduce能够识别每个Region的存储节点,从而把该Region的计算任务分配它存储的节点,达到了移到计算而不移动数据的目的,经证明这种方式能最大程度的利用集群性能和节约开销。
2 HBase写入性能测试与优化
HBase数据写入功能可以分为单数据写入和批量数据导入,其运用场景分别为数据注册和发布的管理平台中普通用户数据发布与注册、用户注册和数据修改等和传统RDBMS向云数据库的数据转移以及批量数据导入,本文对HBase这两种方式的性能进行了测试。
2.1 集群结构
首先在实验室搭建了HBase集群,并设计了针对性的应用,来对比使用MapReduce前后的性能差异。
实验环境中共有6台服务器,搭建完全分布式HDFS与HBase环境,采用的Hadoop与HBase版本为hadoop0.20.2[9]与HBase0.92.0[10],其中一台节点做为NameNode和Master,另一台做为Master备份节点,剩余四台则做为DataNode和RegionServer节点,并且在其上运行Zookeeper服务,整个实验环境结构如图3所示。
2.2 单线程数据写入性能
2.2.1 单个数据写入
单个数据写入实验的目的在于测试一条随机数据的写入性能,从而模拟用户在使用数据注册和发布管理平台时的数据写入操作,检测HBase性能是否满足平台设计要求,实验结果如图 4所示。
经过测试分析单个数据写入时间在200ms左右,可以看出测试性能完全满足实际运用,保证了系统性能良好。对其过程进行跟踪分析,发现数据写入时间主要消耗在客户端与HBase服务器建立数据连接,而實际的一条数据写入时间为1至2毫秒。
2.2.2 大数据的批量导入
数据注册和发布的管理平台[15][16]除了对普通用户提供数据访问外,还要对外部程序或系统提供批量数据写入和同步功能,实验测试了HBase导入不同规模数据所用的时间,导入数据为根据数据表格式随机生成的数据,其规模从10000条到1000万条,这样能够很好地测试HBase在各种条件下批量数据导入所需要时间。
生成数据为TXT文档,命名为MetaData 数据量。实验中记录用HBase提供的单线程API将各数据集写入HBase所用时间,结果如表2所示。
实验结果表明,数据写入时间随着数据集增大线性增加,经过计算,数据的写入速度平均为600条/秒(单次数据写入只需建立一个HBase数据连接)。如表中所示,在海量数据写入时将需要大量时间,当导入1000万条数据时要16688秒(4小时38分钟)。
2.2.3 结果分析
在HBase数据写入性能实验中,本文就HBase提供两种数据写入方式的性能进行了详细测试。一是单个数据的写入性能,在HBase集群中重复数据写入操作并记录所需时间,结果表明HBase的单个数据写入性能非常稳定,大约为200毫秒,能满足分布式资源虚拟化整合平台的性能要求。二是批量数据写入性能,由于HBase提供的数据写入API是单线程的,不能很好地利用HBase的集群计算资源,在海量数据条件下其性能较差,不能要求系统对海量数据处理的要求。
2.3 基于多线程的HBase写入性能优化
采用多线程对数据批量导入性能进行优化,本文主要测试了数据量和线程数量这两个条件对性能的影响。 实验结果表明在实现分布式资源虚拟化整合平台的过程中,必须结合系统功能和性能需求,合理选择数据处理方法,这样才能使系统性能达到最优。
4 总结
本文对HBase数据写入性能进行详细测试,全面了解其性能特性。通过测试找到了HBase的不足,并根据HBase数据库存在的性能缺陷。提出了采用多线程和MapReduce计算框架的并行处理方法来提高其性能,并对实验结果进行总结分析,提出根据不同应用场景综合运用不同数据处理方法的策略。
参考文献:
[1]Armbrust M, Fox A, Griffith R, et al. A view of cloud computing[J]. Communications of the ACM, 2010, 53(4): 50-58.
[2]陈全, 邓倩妮. 云计算及其关键技术[J]. 计算机应用, 2009, 29(9): 2562-2567.
[3]George L. HBase: the definitive guide[M]. O’Reilly Media, Incorporated, 2011.
[4]HBase [EB/OL], https://zh.wikipedia.org/wiki/HBase, 2013-04-10.
[5]Hadoop [EB/OL], https://zh.wikipedia.org/wiki/HBase, 2013-04-10.
[6]Chang F, Dean J, Ghemawat S, et al. Bigtable: A distributed storage system for structured data[J]. ACM Transactions on Computer Systems (TOCS), 2008, 26(2): 4.
[7]Dean J, Ghemawat S. MapReduce: simplified data processing on large clusters[J]. Communications of the ACM, 2008, 51(1): 107-113.
[8]李明, 胥光辉, 戢瑶. MapReduce 编程模型在网络I/O密集型程序中的应用研究[J]. 计算机应用研究, 2011, 28(9):3372-3374.
[9]http://hadoop.apache.org/docs/r0.20.0/releasenotes.html, 2011-03-13
[10]https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310753