基于流式引擎的大数据分布式架构

2020-09-10 11:53柴志菲李翔
商业2.0-市场与监管 2020年7期

柴志菲 李翔

摘要:在人工智能流行的時代,数据量的增长速度也是无法估计的,网络上的留言也越来越多,也难免会有一些污秽的语言,所以净化网络环境是很重要的事情,我们可以利用自动化的网页抓取技术将网络上的留言保存下来,通过设计大数据架构对数据进行实时计算,然后分批装载进数据库,常见的流式处理技术像kafka[1]+spark streaming[2]+zookeeper[3]这样进行架构,然后再将处理后的数据存储进hive 或者HDFS这样的存储单元。

关键词:大数据架构,流式处理,实时计算

如今我们正处于人工智能的时代,大数据,人工智能,自动化等概念越来越深入人心,让我们对于这些词汇越来越有清晰的印象,而在数据挖掘,数据计算方面,整理一个思路清晰的架构思路也是非常重要的。

我们所出的网络环境,每天都会有很多人在上面发表自己的言论,这就会让网络成为一个自由的环境,但是也有很多不法分子在网络上污秽的言论污染了我们所在的空间,这是一种不好且存在的现象,而我们可以使用人工智能大数据的手段,快速识别这些污秽的词汇,从根本上杜绝这些情况的发生,这就需要设计一个可靠合理的大数据架构了。

1.数据集

我们使用自动化爬虫框架源源不断的去获取到数据源,从某网站上使用代理池ip不断替换身份,然后抓取网络的言论,最后保证获取到的数据大约是百万量级的。

最开始的时候,我们主要是从百度贴吧,新浪微博的客户端去进行获取,因为对于数据加密的算法不会很难,可以很容易的就获取到,然后将这些数据规范化,存储进我们的数据库,或者可以说是落盘与内存的一种中间状态进行存储。

2.设计架构

接下来,就是较为重要的架构设计了。

本文将架构的介绍按照数据流向的顺序进行介绍。

第一步,自动化爬虫获取到的数据我们是落盘到HDFS上的,如果想进行计算,就需要将HDFS分区上的内容读进内存,但是HDFS[6]上的数据是海量的,如果一次全部读进来,会堆栈溢出,所以此方案设计为按照block编号的顺序去进行读取,之后对接到flume[7],按照顺序去读取每个block上的评论信息。

第二步,被flume读取进来之后,直接对接到kafka的生产者阶段,此时系统整个过程都是需要使用zookeeper进行高可用保障的,这里使用的znode主要用来存储的是flume的配置信息,因为系统可以在不同流量的时候对应到不同的采集配置。

第三步,就是系统中的kafka了,它主要起到了解耦的效果,数据在爬取读入的过程,可以称之为生产数据,之后利用kafka内部的partition运送所产生的的数据到消费者端。由于此系统不需要过高的效率,所以这里将kafka的ack.require设置为exactly once,保证每一条信息的可靠传达。这里的消费者端也就是下面会提到的Sparkstreaming,在上层应用中,系统会通过测试判断当前系统可支持的运算能力,当超过可容纳的阈值的时候,会在消费者端使用阻塞队列保证系统的安全。

第四步,自然是最重要的SparkStreaming,此系统采用这项技术主要也是为了模拟batch运算,将生产者端运输进来的数据进行微批次的计算,预处理等操作,筛选掉有些可能没有价值的数据,将这些数据一并进行回收,最后将格式化的数据进行整理,放入到hive中,分库分表,以便于进行后续进行数据挖掘的同学进行相关的操作和使用数据。

3.测试调优

此项流程,主要是为了测试系统的各项阈值,例如kafka承受数据的阈值,消费者端与kafka进行TCP连接的句柄数阈值,spark层阻塞队列长度的阈值,内存,cpu,堆等等的阈值,分别进行测量与预估,制定优化方案,接着将平台的一些设计进行调整,令体验上升,性能更优。

而测试的过程,可以采用多种方案,比如说Apache Jmeter,Apache Bench等等,都可以满足我们的需求,实时监控当前状态各性能指标以及参数,是否满足我们预期的标准。

测试之后,发现当前系统存在一个问题,就是我们无法完成持久化,也就是说,如果在当前内存中出现宕机,那么正在运算的block的数据,会丢失,于是便根据这个问题设计了一个方案,参考Redis的RDB和AOF的混合持久化方式,每100条评论数据进行一次落盘,并且在加载当前数据的时候,启用AOF的手段保证数据的稳定性。

4.总结

此系统主要会考察一些团队针对于分布式架构体系的应用,将一些生活中常见的场景使用一些相关技术得到数据整理,以便人工智能算法可以得以落地,团队通过查阅资料,单元测试等方法将一些书上的案例得以应用,并且在此项目中,也确实拥有一定的商业价值,例如可以将此方案应用在社交平台上,净化社交媒体的网络环境,也可以应用在游戏中,以防双方因为情绪出现国际语言,也包括像微博,贴吧等地方,都可以应用。

引用:

[1]Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.

[2]By running on Spark, Spark Streaming lets you reuse the same code for batch processing, join streams against historical data, or run ad-hoc queries on stream state. Build powerful interactive applications, not just analytics.

[3]ZooKeeper aims at distilling the essence of these different services into a very simple interface to a centralized coordination service.

[4]The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware.

[5]Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.