`

基于HBase的海量微博数据高效存储解析

 
阅读更多
通过分析HBase的特点,提出了一种基于HBase的海量微博数据高效存储方案。该方案通过建立合适的数据存储模型、预建Region,提出行关键字生成规则和跳过坏记录的方法,使得数据能够利用MapReduce模型高效且不间断地导入HBase数据库。实验结果表明,该方法能够提高海量数据导入HBase的效率。
AD:【线下活动】三大新锐HTML 5企业汇聚51CTO—大话移动前端技术
通过分析HBase的特点,提出了一种基于HBase的海量微博数据高效存储方案。该方案通过建立合适的数据存储模型、预建Region,提出行关键字生成规则和跳过坏记录的方法,使得数据能够利用MapReduce模型高效且不间断地导入HBase数据库。实验结果表明,该方法能够提高海量数据导入HBase的效率。

随着网络技术的快速发展,互联网用户激增,同时产生了海量的互联网数据。微博的使用人群数量基数大,状态信息更新频繁,信息传播迅速,这为研究网络用户行为与心理提供了充足的资源,也带来了挑战。

面对如此海量的微博数据,如何将其高效的存储与管理,已经成为一个迫切需要解决的问题。云计算技术的出现,为解决这一问题提供了新的途径和思路。目前谷歌、亚马逊、微软、IBM等知名企业纷纷推出云计算解决方案。Apache的Hadoop[1]是一个开源的云计算平台,其核心是HDFS、 MapReduce和Hbase。Hbase是一个开源的、面向列的分布式数据库,它是基于HDFS的,可以利用集群处理大数据。

目前已有105万个新浪微博用户以JSON[2]格式保存的文本数据,数据容量为8.9 TB。如此大量的数据使用单台计算机进行结构化存储和处理是极其耗费时间的。本文主要研究基于MapReduce模型解析JSON格式的微博数据,并将其高效地导入Hbase数据库,为海量数据的高效存储提供一种解决方案。

1 HBase概述和MapReduce模型

HBase[3]是一个基于HDFS的、开源的、面向列的分布式数据库。HBase是基于列簇存储的,不同的列簇对应HDFS上的不同的目录文件,此目录文件中存储的是HBase底层存储文件(HFile文件),当目录中HFile文件数量过多时,HBase会进行compact操作,合并HFile文件。HBase的每个表都有一个或几个列簇,每个列簇可以包含任意数量的列,且每行的列不必相同。HBase表中的每一行由行关键字、时间戳和列簇组成。

HBase有多种数据导入方式,最直接的方法是在MapReduce任务中用TableOutputFormat导入或者直接使用正常的客户端API导入。但是这些都不是最高效的方法。BulkLoad可以通过MapReduce任务直接生成HFile文件,然后导入HBase的表中,适合大数据的快速导入。因此在本文中主要针对BulkLoad方法进行改进。

MapReduce[4]是一个处理数据的编程模型。它有两个重要的函数:Map和Reduce。这两个函数是顺序执行的,Map执行完毕后,开始执行reduce。Map负责分解任务,Reduce负责把各Map任务的结果汇总。

2 微博数据高效存储方案

2.1 微博数据的存储模型

HBase数据库存储微博用户的信息以及微博内容信息,数据库表设计如表1和表2所示。HBase有多种数据导入方式,最直接的方法是在 MapReduce任务中用TableQutputFormat导入或者直接使用正常的客户端API导入。但这些都不是最高效的方法。 basic_info列簇存储微博用户的基本信息,statuses_id列簇存储微博的id,即表2中的行关键字,列名“statuses_id”指的是微博的id,用列名存储用户发布的所有微博信息,”user_id”也是如此。sina_relationship列簇用于存储微博用户关系。在表2 中,basic_info列簇用于存储常用的微博内容的基本信息,other_info列簇用于存储不常用的微博内容的信息,这样划分是考虑到HBase 是按列簇存储的,避免造成I/O浪费。text_info列簇存储的是微博的文本内容。

基于HBase的海量微博数据高效存储方案解析

微博内容信息表中的basic_info:user_id和微博用户信息表中的statuses_id:“statuses_id”形成二级索引,用于关联两个表。

2.2 微博数据存储的优化

2.2.1 预创建Region

HBase在建表时,默认只有一个Region。当使用BulkLoad[5]导入数据时,当数据达到一定的规模(默认是256 MB,设置为200 GB)时,Region会被分割,这将严重影响导入性能。

因此可以预创建一定数量的空Region,至于Region的数量可以参考数据量、Region设定的容量和RegionServer的数量来决定。 Region的数量最好是RegionServer的整数倍,这有利于HBase使用MapReduce进行数据处理。数据量除以预创建Region的数量应当小于Region的设定容量,这可以避免在数据导入时,Region进行split操作。

运行MapReduce程序生成的每个 HFile文件中的行关键字不属于独立的Region时,导入时会发生文件分割。通过实验得知,将总大小为115 GB的HFile文件导入到有32个Region的表中,耗时130 min,而且由于分割HFile文件的过程中会生成较多的临时文件,需要较大的额外存储空间。

为了解决这一问题,需要使得生成的每个HFile文件属于单个Region,因此需要制定行关键字生成规则。

2.2.2 行关键字生成规则

HBase按照行关键字的字典序来存储数据。Hbase提供了多种数据查询方式:根据行关键字调用get接口查询,调用scan查询,全表扫描等。

为了提高数据导入效率和查询效率,提出了行关键字的生成规则。为了满足HFile文件所属Region的唯一性,需要行关键字有Region识别的功能,因此行关键字中需要包含Region识别字段。为了保证查询效率,对于微博内容信息表,需要将同一个微博用户的微博在HBase中连续存储,这就要求行关键字中包含用户信息字段,以保证将所需微博聚集在一起。为了保证行关键字的唯一性,行关键字需要包含微博内容的关键字。式(1)是微博内容信息表的行关键字生成规则。式(2)是微博用户信息表的行关键字生成规则。

行关键字=Region识别字段+微博用户ID+微博内容ID(1)

行关键字=Region识别字段+微博用户ID(2)

2.2.3 跳过坏记录

由于下载的微博数据是JSON格式的,因此首先需要对微博数据进行解析,然后导入HBase数据库。由于数据量大,因此需要使用MapReduce编程模型来解析数据。

MapReduce需要所有的Map任务都结束后,才能进行接下来的工作。如果有一个Map任务执行多次(默认是4次)均失败,则整个 MapReduce任务失败,从而造成了时间和资源的浪费。例如,下载的微博数据中有损坏的,也有JSON格式不完整的,还有文件过大导致内存溢出的等,这都会导致MapReduce任务失败。

MapReduce有Skipipng mode,设置开启后,可以跳过坏记录,但是这种模式会大大影响效率,而且对于内存溢出错误无法处理,也不能对跳过坏记录的文件进行标记。

基于HBase的海量微博数据高效存储方案解析

为了能够跳过程序运行过程中的错误,并将坏记录所在文件保存到指定文件目录中,提出重写RecordReader的方法,称之为SK-bad。由于将整个文件作为数据分片,可以在RecordReader中获得数据分片的文件名。然后获得任务ID,分析任务ID得出任务的执行次数,当执行次数达到一定数值时(此数值需要自己指定,且要小于任务失败最大重复执行次数,否则不会起作用),将此文件移动到指定文件目录,与此同时将此记录标记为已处理,从而能够保证跳过任何原因引起的坏记录。核心程序代码如下。

public class WholdeFileRecordReader

extends RecordReader{

……

public void initialize{InputSplit split,TaskAttempt Context context)}

……

String[]strtaskid=

context.getTaskAttemptid().tostring().trim().split(“_”)

String reindex=

straskid[strtaskid.length-1];

if(integer.parseitn(reidex)>4){|

……

}

……

}

}
3 实验

3.1 实验环境

利用6台计算机作为宿主机,其中有4台Dell OptiPlex 990,配置均为:CPU为Intel酷睿i3 2120,内存12 GB,千兆以太网卡。一台Dell T3500,配置为:CPU为Xeon W3565,内存24 GB,千兆以太网卡。一台浪潮NP3060,配置为:CPU为Xeon E5506,内存16 GB,集成双千兆网卡。每台宿主机均安装Xen虚拟机,每台Dell OptiPlex 990虚拟出3台虚拟机。Dell T3500虚拟出6台虚拟机,浪潮NP3060虚拟出4台虚拟机。总共有22台虚拟机,每台虚拟机的操作系统均为64 bit Centos 6.2。

每台虚拟机安装Hadoop 1.0.4和HBase 0.94.5,其中一台作为Master运行NameNode,JobTracker和Hmaster,一台运行SecondNamenode,其余20 台为Slaves运行DataNode,TaskTracker和RegionServer。

解析JSON数据使用的是第三方工具包Jackson[6]。

实验使用的数据是以文本文件保存的JSON格式的微博数据,每个文件大小在100 MB~180 MB之间,含有105万用户的信息。总的数据容量为8.9 TB。

3.2 实验结果及分析

使用10 000个微博数据文件,每2 000个文件作为一次测试中MapReduce任务的输入,共5次测试。用于测试MapReduce任务在使用SK-bad方法时任务失败次数,同时测试 MapReduce任务在未使用SK-bad方法时的失败次数和开启Skipping mode时的失败次数来进行比较。引起的原因有数据过大导致内存溢出、文件不完整、错误的JSON格式和文件校验码错误等。实验结果如表3所示,对于读取文件的过程中发生的错误,Skipping mode无法处理,5次测试的结果表明SK-bad方法能够保证MapReduce任务的顺利执行。

接下来的测试均使用SK-bad方法,Region最大容量设置为200 GB,预创建Region数量为120个。分别测试在未预创建Region且不使用行关键字生成规则的情况下(情况一),预创建Region且不使用行关键字生成规则的情况下(情况二)和预创建Region且使用行关键字生成规则情况下(情况三)的存储性能。

实验结果如图1所示,存储9 000个用户的数据时,在情况一下,由于数据量较小,Region不会split,所以存储性能与情况三下的存储性能相近。在情况二下,MapReduce任务所生成的HFile文件不属于单个Region,且Region数量较多,因此HFile会进行多次split操作,这严重影响了存储性能。在存储30 000个用户的数据时影响性能的因素与存储9 000个用户的数据时相似;在存储60 000个用户的数据时,对于情况一,由于数据量较大会使Region做split操作,这严重影响存储性能;在存储90 000个用户的数据时影响性能的因素与存储60 000个用户的数据时相似;在存储120 000个用户的数据时,在情况一下,由于数据量较大会使Region再次做split操作,使得Region数量增多,这更加影响存储性能,并且随着用户数据的增多,Region数量也会增加,存储性能会随之降低。在情况三下,由于Region不需要做split操作,且生成的每个HFile属于唯一的 Region,因此随着数据量的增长,存储时间接近线性增长。

在预创建Region且使用行关键字生成规则的情况下,存储所有8.9 TB共1 068 090个微博用户的数据,耗时65 h 34 min。

本文通过分析HBase和MapReduce模型,提出了一种通过预创建Region、行关键字生成规则,利用MapReduce模型将微博数据高效导入HBase数据库的方案,并提出了能够处理各种运行错误的SK-bad方法。

未来要做的工作是优化MapReduce对HBase的访问效率,利用HBase数据库中的数据进行网络用户行为分析方面的研究。

参考文献

[1] Hadoop[EB/OL]. [2013-07-01]. http://hadoop.apa-che.org/.

[2] Introducing JSON[EB/OL]. [2005]. http://www.j-son.org/.

[3] HBase:Bigtable-like structured storage for Hadoop HDFS[EB/OL].[2012-08-24].http://wiki.apache.o-rg /hadoop/Hbase/.

[4] 李建江,崔健,王聃.MapReduce并行编程模型研究综述[J].电子学报,2011,39(11):2635-2642.

[5] GEORGE L. HBase: the definitive guide[M]. USA: O′Reilly Media, 2011.

[6] Jackson: High-performance JSON processor[EB/OL].[2013-04-30]. http://jackson.codehaus.org.



摘自:http://cloud.51cto.com/art/201505/476391_all.htm
分享到:
评论

相关推荐

    HBase视频教程下载|基于微博数据应用的HBase实战开发

    在大数据热潮中,推出了NoSQL数据库,这种天生就为分布式存储而设计的技术,尤其以Apache HBase为代表,占领海量数据存储技术的大半壁江山。本教视从实战角度出来,向学员们手把手掌握HBase使用精髓,让学员达到如下...

    基于HBase的遥感数据分布式存储与查询方法研究.pdf

    本研究文档题为《基于HBase的遥感数据分布式存储与查询方法研究》,它针对遥感数据处理中的关键问题,如单节点故障、扩展性低和处理效率低,提出了一种新的数据分布式存储与查询方案。以下是对文档内容的详细解析和...

    基于MapReduce和HBase的海量网络数据处理.pdf

    基于MapReduce和HBase的海量网络数据处理 ...本文提出了一种基于MapReduce和HBase的海量网络数据处理系统,可以实现对海量网络数据的高效处理和分析,为大数据时代的网络数据处理提供了一种良好的解决方案。

    hbase备份和数据恢复

    在大数据领域,HBase是一个基于Hadoop的分布式数据库,它为海量结构化和半结构化数据提供了高可靠性、高性能的存储方案。HBase备份和数据恢复是系统运维中至关重要的一环,确保了业务连续性和数据安全性。同时,...

    基于HBASE分布式存储的通用海量日志系统设计方法研究.pdf

    基于HBASE分布式存储的通用海量日志系统设计方法研究涉及的关键技术主要包括分布式存储系统HBASE和REDIS分布式缓存技术,以及海量日志数据的高效存储与查询处理。以下详细解析了文章中提到的关键知识点。 HBASE...

    行业分类-设备装置-基于HBase数据库对数据的写操作方法及装置.zip

    HBase,全称为Hadoop Distributed File System上的Base,是一种基于Google Bigtable模型的开源NoSQL数据库,设计用于存储海量结构化数据。它与传统的关系型数据库不同,HBase是列族式数据库,适合处理半结构化或非...

    冠字号查询系统数据

    6. **监控和性能优化**:监控HBase集群的性能,定期进行数据分片和负载均衡,确保系统的稳定性和高效性。 在实际应用中,这样的系统还有可能结合大数据分析工具(如Spark或Flink)来挖掘冠字号数据的潜在价值,例如...

    Hbase实验报告.pdf

    在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源NoSQL数据库,广泛应用于大数据存储场景。实验旨在让参与者熟练掌握HBase的Shell操作,包括创建表、输入数据以及进行特定查询。以下是详细步骤...

    HBASE架构和原理解析

    1. **大规模存储**:一个HBase表可以包含数十亿行和上百万列,这使得HBase能够高效地处理海量数据。 2. **面向列族**:HBase表中的数据按照列族进行组织,而非传统的行或列方式。这意味着同一列族中的列会被存储在...

    毕业设计-基于HBase实现的手机数据备份系统,实现了手机关键信息的备份,如短信、联系人、重要文件等。.zip

    本项目是基于HBase实现的手机数据备份系统,名为"PhoneCloud-Java-master",旨在为用户提供一个安全、高效的数据存储平台,以便备份和恢复手机中的关键信息,如短信、联系人以及重要的文件。HBase作为核心存储组件,...

    java 通过thrift-0.9.1读取hbase表数据

    HBase是一个基于Google Bigtable设计的开源NoSQL数据库,它构建在Hadoop之上,提供高可靠性、高性能、分布式的行存储。HBase支持实时读写,并能够处理海量数据。然而,由于HBase的原生API是用Java编写的,对于非Java...

    HBase专场:阿里云HBase产品体系架构及特性解析(封神).pdf

    例如,HDFS作为Hadoop的分布式文件系统,能够提供稳定的海量数据存储解决方案,为HBase提供了可靠的底层存储支持。LSM-Tree结构是HBase存储引擎的核心,优化了数据的写入速度和存储效率。而Phoenix和Kylin是HBase上...

    mysql中数据经处理导入到hbase中

    而HBase则是一种非关系型分布式数据库(NoSQL),特别适合处理海量半结构化或非结构化数据。本文将详细介绍如何将MySQL中的数据处理成JSON格式并导入到HBase中。 首先,我们需要了解MySQL的基本操作。MySQL是一个...

    HBase MapReduce完整实例.rar

    当这两个强大的工具结合在一起时,可以实现对海量数据的高效分析和处理。 HBase,全称为Hadoop Database,是构建在Hadoop文件系统(HDFS)之上的分布式数据库。它以表格的形式存储数据,支持实时查询,适用于处理PB...

    HBase架构解析——维基百科[归纳].pdf

    《HBase架构解析——维基百科[归纳].pdf》这篇文档是关于Apache HBase的架构解析,主要介绍了HBase的基本概念、数据模型以及架构组成部分。HBase是一个开源项目,其目标是在Hadoop分布式计算环境中提供类似Google ...

    \"HBase_介绍和HBase云存储\"分享总结

    在本分享总结中,我们将深入探讨“HBase_介绍”和“HBase云存储”的相关主题,这将涵盖HBase的基础知识、其架构原理、在云计算环境中的应用以及相关的源码解析。首先,我们从HBase的基本概念和功能入手。 HBase是一...

    5-2+快手HBase在千亿级用户特征数据分析中的应用与实践.pdf

    《5-2+快手HBase在千亿级用户...总结来说,本文深入解析了快手如何借助HBase应对海量用户特征数据分析的挑战,揭示了大数据处理的技术趋势和实践经验,对于从事大数据领域和分布式存储研究的人员具有很高的参考价值。

    基于hbase + spark 实现常用推荐算法(主要用于精准广告投放和推荐系统).zip

    HBase是构建于Hadoop之上的分布式列式数据库,能够处理海量数据并提供实时查询能力。在推荐系统中,用户行为数据、商品信息等需要快速访问和存储,HBase凭借其高并发、低延迟的特性成为理想选择。通过预定义的列族和...

    基于预分区策略的装备数据分布式存储方法.pdf

    在文中提到的分布式数据存储方法中,对HBase的预分区机制进行了研究,通过深入分析装备数据的模型特点,提出了一个快速存储海量装备数据的有效策略。 3. HBase与列式存储:HBase是一个分布式、可扩展的大数据存储...

Global site tag (gtag.js) - Google Analytics