3.4 信息内容获取大数据结构存储
通过爬虫获取的信息内容数据,通常来说是海量的,那么在进行进一步的融合分析之前,需要使用合适的方式将其进行存储。首先,要根据采集的对象定义数据结构,用以描述获取的网络媒体信息。对于新闻、论坛、博客、微博等文本类数据存储的数据结构具体见表3-1。
表3-1 媒体信息常用数据格式
在定义数据结构的基础上,选择合适的大数据组件进行数据存储。这个阶段需要综合考虑整个融合分析的需求、访问量、信息的数量以及组件的特性。常用于大数据结构存储的组件有以Hadoop为代表的大数据平台,以及以Elasticsearch为代表的本地搜索引擎。典型的大数据存储架构如图3-17所示。
图3-17 典型大数据存储架构
其中,消息队列组件Kafka用于存储待进一步处理的海量数据。Kafka有高吞吐量、可定义的副本存储、分布式高可用等特性。作为数据入库的第一站,通常分布式的爬虫引擎通过互联网将数据采集回来后就写入Kafka,Kafka以主题(topic,即一组特色的消息)为单位定义作业组,例如,同一组关键词的采集信息可以存储同一个topic待后续处理。
借助Kafka可将数据采集和数据处理分开异步进行。对于存入Kafka的数据,可以以订阅方式使用Spark或者MapReduce进行批量的数据处理和入库。两者的区别在于,Spark侧重于内存和实时计算,而MapReduce需要很小的内存,适合离线计算。可以根据计算资源和场景来平衡选择。
对于数据存储,通常使用Hbase+Phoenix、YARN、HDFS、Elasticsearch等技术。HDFS作为Hadoop的核心组件,有着高可用、多副本自动备份、大容量的特性,适合存储原始的文件,用于离线分析和数据重构。Hbase是使用HDFS作为存储空间的NoSQL数据库,Phoenix作为Hbase SQL层的中间件,弥补了Hbase没有原生二级索引的缺点,同时支持JDBC的API,可以不用操作Hbase的shell而直接使用SQL来进行数据的查询和统计,支持高并发和高速的随机读/写,便于开发和接入第三方分析工具。Elasticsearch是分布式的全文检索引擎,同样支持海量的数据存储,非常适合列表查询和统计查询,如果有基于内容的模糊查询需求,几乎没有比Elasticsearch更合适的,但它的缺点是事务性能不佳。所以,数据存储通常会根据前台的功能或分析功能,将不同的数据存储在不同的数据仓储中。
其他的数据存储,如MySQL、Redis也经常使用。MySQL通常作为采集任务分配的后台数据库,也可以存储离线计算的统计数据,用于页面中统计图表的快速的数据调取。Redis作为内存数据库,通常用于存储需要高速查询的Key-Value,可以作为下发策略的存储或者采集的浏览器Cookie、会话ID(SessionID)、实时计算用到的关键词策略等频繁查询和读取的数据。
最后,大数据的资源调度组件是YARN。YARN用于针对不同的用户进行集群划分,从而实现不同的计算任务相互独立的并行运行。Spark、MapReduce均可依赖YARN进行计算资源调度和分配。YARN可面向不同的用户分配其能使用的大数据资源,从而避免不同用户竞争资源、造成集群运算效率的下降。