大数据采集技术综述

        近年来,以大数据、物联网、人工智能、5G为核心特征的数字化浪潮正席卷全球。随着网络和信息技术的不断普及,人类产生的数据量正在呈指数级增长。大约每两年翻一番,这意味着人类在最近两年产生的数据量相当于之前产生的全部数据量。世界上每时每刻都在产生的大量的数据,包括物联网传 感器数据、社交网络数据、商品交易数据等等。 面对如此巨大的数据,与之相关的采集、存储、分析等等环节产生了一系列的问题。如何收集这些数据并且进行转换分析存储以及有效率的分析成为巨大的挑战。需要有这样一个系统用来收集这样的数据,并且对数据进提取、转换、加载。

        本节就介绍这样一个大数据采集技术。什么是大数据采集技术?大数据采集技术就是对数据进行ETL操作,通过对数据进行提取、转换、加载,最终挖掘数据的潜在价值。然后提供给用户解决方案或者决策参考。ETL,是英文 Extract-Transform-Load 的缩写,数据从数据来源端经过抽取(extract)、转换(transform)、加载(load)到目的端,然后进行处理分析的过程。用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据模型,将数据加载到数据仓库中去,最后对数据仓库中的数据进行数据分析和处理。数据采集位于数据分析生命周期的重要一环,它通过传感器数据、社交网络数据、移动互联网数据等方式获得各种类型的结构化、半结构化及非结构化的海量数据。由于采集的数据种类错综复杂,对于这种不同种类的数据。我们进行数据分析,必须通过提取技术。将复杂格式的数据,进行数据提取,从数据原始格式中提取(extract)出我们需要的数据,这里可以丢弃一些不重要的字段。对于数据提取后的数据,由于数据源头的采集可能存在不准确。所以我们必须进行数据清洗,对于那些不正确的数据进行过滤、剔除。针对不同的应用场景,对数据进行分析的工具或者系统不同,我们还需要对数据进行数据转换(transform)操作,将数据转换成不同的数据格式,最终按照预先定义好的数据仓库模型,将数据加载(load)到数据仓库中去。

在现实生活中,数据产生的种类很多,并且不同种类的数据产生的方式不同。对于大数据采集系统,主要分为以下三类系统:

        一、系统日志采集系统许多公司的业务平台每天都会产生大量的日志数据。对于这些日志信息,我们可以得到出很多有价值的数据。通过对这些日志信息进行日志采集、收集,然后进行数据分析,挖掘公司业务平台日志数据中的潜在价值。为公司决策和公司后台服务器平台性能评估提高可靠的数据保证。系统日志采集系统做的事情就是收集日志数据提供离线和在线的实时分析使用。目前常用的开源日志收集系统有Flume、Scribe等。 Apache Flume是一个分布式、可靠、可用的服务,用于高效地收集、聚合和移动 大量的日志数据,它具有基于流式数据流的简单灵活的架构。其可靠性机制和许多故障转移和恢复机制,使Flume具有强大的容错能力。Scribe是Facebook开源的日志采集系统。Scribe实际上是一个分布式共享队列,它可以从各种数据源上收集日志数据,然后放入它上面的共享队列中。Scribe可以接受thrift client发送过来的数据,将其放入它上面的消息队列中。然后通过消息队列将数据Push到分布式存储系统中,并且由分布式存储系统提供可靠的容错性能。如果最后的分布式存储系统crash时,Scribe中的消息队列还可以提供容错能力,它会还日志数据写到本地磁盘中。Scribe支持持久化的消息队列,来提供日志收集系统的容错能力。

        二、网络数据采集系统。通过网络爬虫和一些网站平台提供的公共API(如Twitter和新浪微博API)等方式从网站上获取数据。这样就可以将非结构化数据和半结构化数据的网页数据从网页中提取出来。并将其提取、清洗、转换成结构化的数据,将其存储为统一的本地文件数据。目前常用的网页爬虫系统有Apache Nutch、Crawler4j、Scrapy等框架。Apache Nutch是一个高度可扩展和可伸缩性的分布式爬虫框架。Apache通过分布式抓取网页数据,并且由Hadoop支持,通过提交MapReduce任务来抓取网页数据,并可以将网页数据存储在HDFS分布式文件系统中。Nutch可以进行分布式多任务进行爬取数据,存储和索引。由于多个机器并行做爬取任务,Nutch利用多个机器充分利用机器的计算资源和存储能力,大大提高系统爬取数据能力。Crawler4j、Scrapy都是一个爬虫框架,提供给开发人员便利的爬虫API接口。开发人员只需要关心爬虫API接口的实现,不需要关心具体框架怎么爬取数据。Crawler4j、Scrapy框架大大降低了开发人员开发速率,开发人员可以很快的完成一个爬虫系统的开发。

        三、数据库采集系统。一些企业会使用传统的关系型数据库MySQL和Oracle等来存储数据。除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。企业每时每刻产生的业务数据,以数据库一行记录形式被直接写入到数据库中。通过数据库采集系统直接与企业业务后台服务器结合,将企业业务后台每时每刻都在产生大量的业务记录写入到数据库中,最后由特定的处理分许系统进行系统分析。

        针对大数据采集技术,目前主要流行以下大数据采集分析技术。Hive是Facebook团队开发的一个可以支持PB级别的可伸缩性的数据仓库。这是一个建立在Hadoop之上的开源数据仓库解决方案。 Hive支持使用类似SQL的声明性语言(HiveQL)表示的查询,这些语言被编译为使用Hadoop执行的MapReduce作业。另外,HiveQL使用户可以将自定义的map-reduce脚本插入到查询中。该语言支持基本数据类型,类似数组和Map的集合以及嵌套组合。 HiveQL语句被提交执行。首先Driver将查询传递给编译器compiler,通过典型的解析,类型检查和语义分析阶段,使用存储在Metastore中的元数据。编译器生成一个逻辑任务,然后通过一个简单的基于规则的优化器进行优化。最后生成一组MapReduce任务和HDFS Task的DAG优化后的Task。 然后执行引擎使用Hadoop按照它们的依赖性顺序执行这些Task。Hive简化了对于那些不熟悉Hadoop MapReduce接口的用户学习门槛,Hive提供了一些列简单的HiveQL语句,对数据仓库中的数据进行简要分析与计算。

        在大数据采技术中,其中有一个关键的环节就是transform操作。它将清洗后的数据转换成不同的数据形式,由不同的数据分析系统和计算系统进行处理和分析。将批量数据从生产数据库加载到Hadoop HDFS分布式文件系统中或者从Hadoop HDFS文件系统将数据转换为生产数据库中,这是一项艰巨的任务。 用户必须考虑确保数据一致性,生产系统资源消耗等细节。使用脚本传输数据效率低下且耗时。Apache Sqoop就是用来解决这个问题,Sqoop允许从结构化数据存储(如关系数据库,企业数据仓库和NoSQL系统)轻松导入和导出数据。使用Sqoop,您可以将来自外部系统的数据配置到HDFS上,并将表填入Hive和HBase中。运行Sqoop时,被传输的数据集被分割成不同的分区,一个只有mapper Task的Job被启动,mapperTask负责传输这个数据集的一个分区。Sqoop使用数据库元数据来推断数据类型,因此每个数据记录都以类型安全的方式进行处理。

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/80584561