文献标识码:A
DOI:10.16157/j.issn.0258-7998.2017.03.030
中文引用格式:余辉,黄永峰,胡萍. 微博舆情的Hadoop存储和管理平台设计与实现[J].电子技术应用,2017,43(3):120-123,131.
英文引用格式:Yu Hui,Huang Yongfeng,Hu Ping. Design and implementation of Hadoop based storage and management platform on the Weibo public opinion[J].Application of Electronic Technique,2017,43(3):120-123,131.
0 引言
随着Internet技术的迅速发展,全球各大互联网公司的网络舆情监控系统也蓬勃发展起来,网络舆情监控系统所获得的数据量急速膨胀。传统的网络计算、并行计算、分布式计算等数据处理的方式越来越不能满足快速查询、存储、处理日益增长的数据的需要[1]。在此基础上云计算的概念应运而生。云计算的新颖之处在于它几乎可以提供无限的廉价存储和计算能力,未来存储模式将改变目前的存储模式,不再存放在个人计算机及服务器上,而是存放在云服务器中,同时所有的计算、存储、处理工作也将在云服务器完成,这样给企业及各厂商带来很多便利,节省存储设备和软件应用的投入成本。本文将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,并且将关系型数据库和非关系型数据库联合应用,设计出一个快速检索查询、海量数据存储、批量数据处理的多层体系架构的系统,且对外提供数据存储和业务访问功能,保证数据的安全性,并节约存储空间[2]。
1 相关技术
基于微博舆情的Hadoop存储主要包括微博的数据结构和Hbase两个部分。
1.1 微博数据结构
(1)数据的语义不同,非结构化数据内容不一,描述不同的问题。现在对数据的非结构化管理通常以文件形式,保留原始的非结构化数据非常重要,可以针对不同的研究需求。但这导致对不同非结构化数据使用不同处理方案,最终时间会大大增加,无法快速获得重要信息。而且用户一般想专注于自己的研究模块,不希望进行文件的预处理工作。
(2)数据格式不同,各网站基于不同的框架产生大量不同格式的数据,从而形成大量不同的非结构化数据。无法使用统一的方式来管理和使用这些数据。
1.2 Hbase
HBase是一个基于分布式文件系统HDFS、面向列、开源的数据库。Hbase数据表由主键、列族、时间戳三部分组成。每个表都有一个主键、一个或多个列簇,每个列簇可以包含任意数量的列,且一个列族中的列名不能相同。HBase有多种数据导入方式,最直接的方法是在Java程序中获取Hbase中的HTable类执行Hbase的客户端API,进行数据的增、删、改、查[3]。
在Hbase的概念中,RegionServer对应于集群中的一个节点,而一个RegionServer负责管理多个Region。一个Region代表一张表的一部分数据,所以在Hbase中的一张表可能会需要很多个Region来存储其数据,但是每个Region中的数据并不是杂乱无章的,Hbase在管理Region时会给每个Region定义一个Rowkey的范围,落在特定范围内的数据将交给特定的Region,从而将负载分摊到多个节点上,充分利用分布式的优点[4]。另外,Hbase会自动的调节Region处在的位置,如果一个RegionServer变得Hot(大量的请求落在这个Server管理的Region上),Hbase就会把Region移动到相对空闲的节点,依次保证集群环境被充分利用。
2 基于Hadoop的微博数据存储管理平台的体系结构设计
本文根据微博数据的特点,采用Hadoop技术,建立了多层结构的存储和管理架构,如图1所示。基于Hadoop的微博数据存储管理平台的体系结构主要由五个层面组成:原始数据层、数据预处理层、数据存储层、NewSQL转换层、数据应用层。
(1)原始数据层:该主要是采集与保存新浪、搜狐、网易和腾讯等主流微博网站的原始数据。为保证微博数据的实时性,采用实时数据获取工具每个小时自动对微博网址进行爬取,获取前一个小时数据。
(2)数据预处理层:该层主要功能包括两部分工作。一是数据抽取,利用数据挖掘技术从原始数据中抽取出有效的信息,包括用户信息、微博信息以及用户微博之间的相互关系等;二是进行数据清洗,主要将一些采集过程中出现的错误数据和不一致性数据过滤。
(3)数据存储层:该层主要是用来存储结构化数据和元数据。因此,在该层引入了Mysql和Hbase两个数据库。对清洗后的微博数据进行分析设计,采用分割、建立索引等方法成功加载进Hbase和Mysql数据库。在具体实现中,使用HBase作为原始数据库,而Mysql作为元数据。通过Mysql中的用户信息和微博信息,快速获取Hbase对应的用户属性、用户关系、微博属性、微博关系。能在毫秒中提取相关信息,从而实现高效的实时查询。
(4)NewSQL层:该层主要为Hbase的客户端API和二级索引。NewSQL层是Hbase和Mysql的SQL引擎层,在此层实现Mysql查询Hbase数据的映射与转换工作。具体来讲在此层实现了两种功能:一是Mysql的数据库的独立查询,查询微博总数、用户总数、微博内容等基本信息;二是Mysql的数据库和Hbase的数据库联合查询,通过查询MySql中字段信息,调用Hbase的API查询HBase数据库,进行实时访问。通过此层对外提供各类包括用户属性、微博属性查询,以及用户间转发回复评论等关系在内的查询接口,实现数据查询的易用性目标[5]。
3 微博关系数据的存储表的设计与实现
Hadoop存储和管理平台采用了NewSQL存储结构,它将传统关系型数据库Mysql和非关系型数据库Hbase相结合,这种存储结构不仅获得了关系型数据库的查询速率快、支持复杂类查询同时支持事务处理等优点,也获得非关系型的优点,即极大的扩展性,可扩展到数十PB,以及建设成本低、数据安全的优点。
Mysql的设计上面采用分表存储,每一百万条记录存储到一张表中且建立索引,提升查询速率。Hbase的设计上面采用RowKey的MD5加密且分区,使数据平均的分布在每台RegionServer上面,防止数据倾斜到一台RegionServer。
最后,考虑到需要快速查找用户信息、用户之间的关系、微博信息、微博之间的关系,从而建立关键字索引表、用户属性表、用户关系表、微博属性表、微博关系表。
3.1 关键字索引表
表1为关键字索引表。采用Mysql设计,存储用户的微博主要内容。通过关键字查询用户感兴趣的内容,可以快速提取博文内容以及用户信息。
3.2 用户属性表
表2为用户属性表。采用Hbase设计,存储用户的基本属性。其中包括:1个Rowkey和2个列族,Rowkey为用户的唯一id,两个列族分别为用户属性列族、关系属性列族。
3.3 用户关系表
表3为用户关系表。采用Hbase设计,存储用户之间关系状态。关注关系分为两种:单向的关注关系和双向的好友关系。比如两个用户A和B之间,如果A关注B,而B没有关注A,这就是一种单向的关注关系;如果A关注了B,同时B也关注了A,那么双方是一种双向的好友关系。其中包括:1个Rowkey和1个列族,Rowkey为用户的唯一id,一个列族为用户关系属性列族。
3.4 微博属性表
表4为微博属性表。采用Hbase设计,存储微博文章的基本信息。其中包括:1个Rowkey和2个列族,Rowkey为微博URL作为唯一id,两个列族即微博属性列族和关系属性列族。
3.5 微博关系表
表5为微博关系表。采用Hbase设计,存储用户使用微博的发文、评论、转发、回复信息。其中包括:1个Rowkey和1个列族,Rowkey为用户的id,列族即微博关系属性列族。
4 存储管理平台的性能测试与分析
本节将搭建Apache版本Hadoop2.6分布式集群环境,对本平台系统性能进行实验测试和评估,通过SQL语句验证其实际应用中的性能。
4.1 实验环境及软件配置
表6为服务器集群环境及软件配置表。用7个服务器使用Apache版本Hadoop2.6分布式集群部署,其中一台服务器作为主节点Master,其余6台作为平台的数据节点Data,系统软硬件配置见表6。
4.2 实验数据
实验采用的是通过爬虫技术从新浪、网易、搜狐等主流微博获取的真实微博数据。通过去噪清洗,将一些采集过程中出现的错误和不一致性数据过滤并进行结构化处理后,获得用户节点数6 015万,用户关系数13 953万,微博节点数53 413万,用户微博关系数为44 012万。
表7为数据平台常用API查询用时。根据需求选取6 000万个重要人物在平台上对项目常用的API(用户节点查询、用户属性查询、用户关系查询、微博节点查询、微博属性查询、微博关系查询)进行SQL查询用时测试。由于数据需多次测试,且在Hbase查询中blockcache命中率对读性能影响十分大,对此将分开启和关闭缓存两组进行测试。
由表7可知,在已有数据下,项目常用API的利用SQL语句查询50%分位值用时皆在16 ms以内,99%分位值也均在20 ms以内,能够很好地满足平台的实时性要求。由图2数据可知,随着数据规模的增大,存储平台的数据查询用时并不出现显著增长。即使在用户节点数达到6 000万的规模下,不开启缓存也能保持功能查询平均用时在14 ms以内。特别是对指定重点人物的多次查询,在缓存命中的情况下能保持用时在8 ms以内。由于本存储系统基于HDFS文件系统搭建,其分布式架构本身具有良好的扩展性与可靠性。故本存储平台能够成功地满足实时性、可扩展性和易用性等要求。
5 结论
本文建立了一套面向微博舆情分析的Hadoop存储和管理系统。本系统可以安全、海量存储微博数据,通过关系型数据库Mysql和非关系型数据库Hbase两者的优点进行SQL交互,实现海量数据存储、实时数据查询、快速检索响应、可横向扩展等优点,有效解决了传统关系型数据库在存储数据单一、存储空间受限、不可横向扩展存储空间等缺点。
参考文献
[1] SULLIVAN J.China′s Weibo:Is faster different?[J].New Media & Society,2014,16(1):24-37.
[2] 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.
[3] 潘梦云,李国玉,李燕.基于Hadoop云计算平台的数据处理系统的研究与设计[J].通讯世界:下半月,2015(7):224-225.
[4] 万川梅.基于大数据下的NOSQL和Mysql融合的数据存储模型研究[J].数字技术与应用,2014,2(2):96-96.
[5] LEE C H,ZHENG Y L.Automatic SQL-to-NoSQL schema transformation over the MySQL and HBase databases[C].IEEE International Conference on Consumer Electronicstaiwan,2015:426-427.
作者信息:
余 辉1,黄永峰2,胡 萍3
(1.中国科学院大学,北京100043;2.清华大学 电子工程系,北京100084;
3.清华大学 网络科学与网络空间研究院,北京100084)