“大数据”可谓是近年来 IT 领域最热门的词汇之一,它不仅是研究领域的重点,同时也频繁的出现在人们日常生活,如新闻报道中,社交媒体中。那么什么是大数据?它都有哪些特性?如何处理大数据?如何搭建大数据平台?以及如何利用平台进行有效的数据分析?这些都是我们此次调研任务试图回答的问题。
本次调研采用了理论与实践相结合的方法,一边搜集行业信息、学习理论知识,一边动手搭建实验环境、测试算法程序,在此基础上形成调研报告,旨在总结大数据的概念、特性、发展现状、处理流程、平台搭建关键技术、数据分析方法等,为大数据的建设和研究工作打下基础。
调研报告结构如下:第一章介绍大数据的概念及特征;第二章概述大数据的处理流程;第三章是大数据技术的产生及选择;第四章详细描述Hadoop大数据平台的搭建及其关键组件;第五章重点介绍Spark分布式计算框架;第六章是总结。
一.大数据概念
随着互联网、计算机技术的飞速发展,人类活动所产生的数据规模呈指数级爆发增长,大数据的概念应运而生,大数据的形成有三个标志性的事件【0】:
ü2008年9 月,美国《自然》(Nature)杂志专刊——The next google,第一次正式提出“大数据”概念;
ü2011年2月1日,《科学》(Science)杂志专刊——Dealing with data,通过社会调查的方式,第一次综合分析了大数据对人们生活造成的影响,详细描述了人类面临的“数据困境”;
ü2011年5月,麦肯锡研究院发布报告——Big data: The next frontier for innovation, competition, and productivity,第一次给大数据做出相对清晰的定义:“大数据是指其大小超出了常规数据库工具获取、储存、管理和分析能力的数据集。”
大数据的数据来自于人类工作生活的各方各面,包括互联网产生的大量数据,比如各种社交平台、视频网站、交易平台等;传感器产生的大量机器数据,如道路监控系统等;还包括各行各业产生的各种生产数据,如科研系统数据,金融一卡通数据等等。这些数据通常都具有以下特点,即所谓的“3V”理论 :
ü体量大(Volume):数据以P(1000个T)、E(100万个T)甚至是Z(10亿个T)为单位;
ü速度快(Velocity):数据飞速增长,根据新摩尔定律,人类有史以来的数据总量,每18个月翻一番;
ü种类多(Variety):不仅包括结构化数据,还包括大量的半结构化或非结构化数据,如视频、音频、图片等;
大数据的这些特点,对于数据存储和处理都提出了新的要求,传统的数据处理方法,如数据库,已经无法满足现阶段的需求,于是大数据技术横空出世并在过去的十几年内得到了飞速的发展。
二.大数据处理
大数据蕴含着巨大的价值,这已经是一个大家普遍接受并已经得到证实的观点,如何利用大数据产生价值是业界关注的焦点。大数据的源头多且杂,如何收集数据并把它们转化为对人们有价值的信息,这个过程是非常复杂的,大致可以分为下面几个阶段:
图1. 大数据处理基本流程
2.1大数据的采集
大数据的采集负责从不同的源头获取数据,这些数据既包括生产数据,像业务系统产生的数据、交易数据,也包括行为数据,如日志数据,用户行为数据等。
大数据的采集工作是项目运行的第一步,也是至关重要的一步,海量真实数据是实现精准分析的基石。这里引用电子科大周涛教授在SMP 2017上列举的一个真实案例 - 感知区域发展现状,他们并没有使用以前分析经济常用的很多指标,如PPI、CPI、GDP等,因为这些指数本身可能会比较滞后而且掺杂一些虚假的东西,而是采集了大量的丰富的真实数据:
“首先,我们从公开的网站上爬到各个城市的航空、铁路和公路人口流量(只有四十多个城市有公路人口流量,其他的只有航空和铁路的人口流量),也就是有多少人坐飞机、火车经过这些城市。其次是在这些城市注册的公司招聘的职位数目、职位类型和薪资水平。再次是所有这些城市的信息化和科技创新水平。最后是用遥感数据观察这些城市正在进行的重大建设项目,看看地面有没有人和车辆频繁运动,地表有没有发生变化,从而推断这些项目是否正常进行。”
从技术角度看,数据采集的方式有多种,可以是数据导入,如通过数据库直接导入;也可以通过工具抓取,如通过Flume组件把日志信息导入到大数据平台,网络爬虫Nutch可以搜索网页信息,还有消息中间件Kafka等,后面的技术章节会介绍一下这些组件的使用。
2.2导入/预处理
采集来的数据往往是无法直接进行有效分析的,因为很多可能是不完整的,甚至是“脏”的数据,格式、存储方式等都不一致,需要将这些数据导入到统一的环境中,并进行一定的预处理,这些处理包括:
ü数据清理:主要是达到数据格式标准化、异常数据清除、数据错误纠正、重复数据的清除等目标;
ü数据集成:是将多个数据源中的数据结合起来并统一存储,建立数据仓库;
ü数据交换:通过平滑聚集、数据概化、规范化等方式将数据转换成适用于数据挖掘的形式;
ü数据规约:寻找依赖于发现目标的数据的有用特征,缩减数据规模,最大限度地精简数据量;
这个过程也经常被称作ETL(Extract,Transform,Load)常见的ETL工具包括IBM DataStage,Oracle ODI,Kettle等。经过预处理的数据就可以更好地进行下一步的操作了。
2.3统计与分析
经过预处理的数据可利用统计学的方法来做一些基本的分析和分类汇总,以满足大多数常见的分析需求。统计与分析常用的是R语言,它是一个开源软件,适用于统计计算和统计制图。
这里的统计与分析是一个常见概念,无论是生活中还是工作中都经常用到,许多公司,尤其是大公司,都有专业的数据分析师来做类似于商业智能(Business Intelligence)之类的工作。
2.4大数据挖掘
数据挖掘是创建数据挖掘模型的一组试探法和计算方法,通过对提供的数据进行分析,查找特定类型的模式和趋势,最终形成创建模型。数据挖掘由来已久,并不是新的概念,但是在大数据的浪潮下,数据挖掘焕发出了新生。一方面,大量数据的产生提供了巨大的样本空间;另一方面,大数据技术的发展使得复杂数学模型的计算更加便捷。
数据挖掘分为如下几类:
ü分类:一种重要的数据分析形式,根据重要数据类的特征向量值及其他约束条件,构造分类函数或分类模型,目的是根据数据集的特点把未知类别的样本映射到给定类别中。常见算法有朴素贝叶斯算法,支持向量机SVM算法等;
ü聚类:目的在于将数据集内具有相似特征属性的数据聚集在一起,同一个数据群中的数据特征要尽可能相似,不同的数据群中的数据特征要有明显的区别。常见算法有K-Means算法,K近邻算法等;
ü关联规则:检索系统中的所有数据,找出所有能把一组事件或数据项与另一组事件或数据项联系起来的规则,以获得预先未知的和被隐藏的,不能通过数据库的逻辑操作或统计的方法得出的信息。常见算法有FP-Growth算法等;
ü预测模型:一种统计或数据挖掘的方法,包括可以在结构化与非结构化数据中使用以确定未来结果的算法和技术,可为预测、优化、预报和模拟等许多业务系统所使用。常见算法有序贯模式挖掘SPMGC算法等;
2.5机器学习
机器学习(Machine Learning)也是数据挖掘中经常用到的算法,这里把它单独列出来是因为它是当前异常火爆的大数据人工智能里面的一个重要分支。它是数据通过算法构建出模型并对模型进行评估,评估的性能如果达到要求就拿这个模型来测试其他的数据,如果达不到要求就要调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的经验来处理其他的数据。机器学习通常分为监督学习和无监督学习【5】。
2.5.1监督学习
监督学习是从给定的训练数据集中学习一个函数(模型),当新的数据到来时,可以根据这个函数(模型)预测结果。监督学习的训练集要求包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注(标量)的。在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”、“非垃圾邮件”,对手写数字识别中的“1”、“2”、“3”等。在建立预测模型时,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断调整预测模型,直到模型的预测结果达到一个预期的准确率。常见的监督学习算法包括回归分析和统计分类。
2.5.2无监督学习
与监督学习相比,无监督学习的训练集没有人为标注的结果。在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法和k-Means算法。这类学习类型的目标不是让效用函数最大化,而是找到训练数据中的近似点。聚类常常能发现那些与假设匹配的相当好的直观分类,例如基于人口统计的聚合个体可能会在一个群体中形成一个富有的聚合,以及其他的贫穷的聚合。
数据挖掘(包括机器学习)都具有较强的理论性,要透彻的理解算法并变成实现算法用于大数据分析不是一件容易的事。好在现在很多软件都提供了数据挖掘或机器学习的算法包,例如Spark MLlib,上文中提到的很多算法都已实现并以API的形式提供给编程者调用。数据算法不再是数据科学家的专利,普通的编程人员也可使用,这也为大数据分析在各行各业的普及创造了条件。
至此,我们大概了解了大数据处理的基本流程。事实上,大数据处理的每一步实现都离不来相关技术的支持,下面我们就要从技术角度出发,来了解一下大数据的技术基础。
三.大数据技术
3.1大数据技术的产生
为了处理体量大、增速快、种类多的数据,大数据技术应运而生。大数据技术的核心思想是分布式,包括分布式存储(海量数据一台机器存不下,就放到多台机器上)和分布式计算(一台机器计算资源不够,就分发到多台机器上一起计算,再将结果合并)。
Google可以算是大数据的鼻祖,早期在处理海量web数据的时候就拥有丰富的经验。03,04年的时候,Google将其部分核心技术以学术论文的形式公之于众,其中《The Google File System》介绍了Google的分布式存储框架,《MapReduce: Simplied Data Processing on Large Clusters》介绍了Google的分布式计算框架,此后每一年,Google都会发表一篇学术论文,介绍其一项核心技术,所有人都可以通过互联网下载并阅读这些论文,这些文章也是大数据学习的重要参考资料。
Doug Cutting是一名程序员,他按照Google论文的启发,用java语言写出了一个大数据的软件,这个软件运行在linux之上,核心组件包括分布式存储HDFS和分布式计算MapReduce。Doug Cutting将这个软件命名为Hadoop,并把它捐给了开源社区Apache,供全世界人民共享。开源的hadoop于是蓬勃的发展起来了,越来越多的公司加入其中,为大数据贡献了很多优秀的组件。同时,人们习惯以hadoop代指整个大数据生态系统,Doug Cutting本人也被称作是Hadoop之父。
3.2大数据和云计算
云计算作为当前迅猛发展、势不可挡的另一项IT技术,与大数据是相辅相成。大数据并不依赖于云计算,但是它全面拥抱云计算。云计算在基础架构设计方面的种种优势,例如降低了存储和计算的成本,使得人们保存数据的成本也大大降低,数据计算的效率更加提高。可以说,云计算为大数据提供了良好的基础设施。
3.3大数据技术的选择
在开源Hadoop的基础上,国内国外都产生了大量的大数据公司,如Cloudera,它们有的侧重于hadoop基础平台,有的专注于大数据平台上的某一组件;也有很多实力雄厚的大公司,他们在借鉴开源软件的同时,也自主研发自己的大数据技术,比如阿里、腾讯等,都拥有自己的研发团队,研发大数据的存储、计算等。
对于我们学校来说,开源软件是最明智的选择,同时最好是一个商业发行版的软件,这样在稳定性等方面也会有保证。Cloudera在Hadoop中的地位就如同Red Hat在linux的地位,公司拥有众多开源社区的commiter,同时hadoop之父Doug Cutting也在公司担任高层,因此我们选择主流的cloudera作为我们的大数据软件,cloudera的hadoop版本被称为CDH(Cloudera Distributed Hadoop)。
四.大数据基础环境的搭建
Hadoop是一个大数据生态系统,包括很多组件,每个组件实现不同的功能,如用来存储大数据文件的HDFS,分布式算法的组件MapReduce。此次环境搭建的硬件资源我们采用虚拟化技术,使用3台虚拟主机搭建一个大数据集群,如下图所示:
图2. 大数据平台的硬件环境
同时,我们采用cloudera公司提供的Cloudera Manager来部署、管理、配置这些组件,使它们能够协同工作,下图是我们搭建的一个基础的大数据测试环境运行截图:
图3. 利用Cloudera搭建的大数据环境
下面我们就来依次认识一下这些大数据中的核心组件。
4.1HDFS
HDFS即Hadoop Distributed File System,是一个分布式的文件系统,也是整个大数据文件存储的基础。通过在大数据集群上安装HDFS组件,这三台主机上的本地存储打通形成了一个大的存储池,所有的大数据文件都存放在这样一个存储池中。
HDFS存储有这样一些特点:
ü块式存储:大数据平台上的文件以块为存储单位(默认是128M),例如一个300M的文件就分为3个块(128 + 128 + 44)存放在不同的节点上;
ü冗余:每一份数据都有副本(一份数据默认有两个副本),这样当数据所在的硬件发生故障时,副本数据会立刻启用,这样就保证了数据的完整性;
HDFS通过如下一些角色来实现文件的读写:
图4. HDFS中的角色
üDataNode(数据节点):存放具体文件数据的节点;
üNameNode(元数据节点):当一个文件被分成若干块存储在不同位置时,NameNode记录了所有这些位置信息,包括每一块数据副本的位置信息。当需要读文件时,通过访问NameNode可获知去哪个或者哪几个DataNode读文件;反之,写文件时,通过NameNode得到需要将文件写到哪个或哪几个DataNode;NameNode在整个大数据系统中只有一个;
üSecondaryNameNode(备用元数据节点):NameNode非常重要,一旦NameNode出问题,可以说整个文件系统就瘫痪了,所以要有一个备用的SecondaryNameNode,保证在NameNode出故障的情况下,元数据信息不丢失;此外,借助一些手段(如zookeeper)还可以实现NameNode的双活HA。
在虚机本地的操作系统中,可以方便的通过linux命令操作大数据文件系统文件,例如:
ühadoop fs –ls //查看大数据文件系统里的文件
ühadoop fs –put //将本地文件上传到大数据文件系统中
ühadoop fs –get //将大数据系统中的文件下载到本地
4.2YARN(MR2 Included)
在介绍分布式计算框架MapReduce之前,我们先来认识一下yarn组件。yarn是一个资源调度组件,MapReduce跑在yarn之上。在大数据集群上安装yarn组件后,每当来一个计算任务时,yarn会主动找到计算时需要用到的数据所在的节点,可能是一个节点,也可能是若干个节点,然后在这一个或若干个节点上起计算程序。数据在哪,计算就在哪,这也是大数据分布式计算的一个特点。
Yarn组件里有如下角色:
图5. yarn中的角色
üResourceManager(RM):RM是一个全局的资源管理器,负责整个系统的资源管理和分配;
üApplicationMaster(AM):当有一个计算任务启动时,RM随机指定一个节点启动一个临时的AM,AM联系NameNode,通过文件名找到元数据信息,再找到数据文件所在节点,然后通过NM在这些节点上启动计算程序;
üNodeManager(NM):NM是每个节点上的资源和任务管理器;
üJobHistory:记录任务完成情况和进度,当执行过程中有机器突然故障,别的节点可以接着完成任务;
MapReduce是大数据中经典的分布式计算框架,它将分布式计算过程分成两个阶段:
üMap阶段:并行计算的阶段,Mapper的数量与文件的block数相同;
üReduce阶段:将并行计算的结果合并并输出,Reducer的数量可由程序员指定;
Yarn(MR2 Included)组件屏蔽了底层分布式实现的细节,程序员只需专心于编写上层的逻辑,无需考虑分布式实现。
MapReduce组件有着一个致命的缺点:慢,因为它在运算过程中涉及大量的磁盘IO,因此运行效率较低。MapReduce 已渐渐的被新的分布式计算框架所取代,我们后文会有介绍。
4.3Hive
数据库技术在过去几十年里飞速发展,基于数据库的数据分析也是非常普遍,很多公司都有很多资深的业务数据分析师,他们非常精通SQL,但是却不会编程,于是大数据平台上需要一个SQL相关的组件,使得分析师们在大数据平台上也能做他们擅长的SQL数据分析。Hive就是这样一个组件,它是由Facebook开发,并捐给了开源的Apache组织。
Hive可以接收SQL语句,并把SQL语句转化为MapReduce作业运行在大数据平台上。
它的优点包括:
ü使用简单:通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析;
ü可以处理PB级别的大数据;
它的缺点也很明显:
ü基于MapReduce,因此运行起来比较慢;
üHive接受的sql语法是sql的一个子集,能做select和insert,delete和update一般不能做;
ü适合做批处理查询,不适合做交互式查询;
Impala是cloudera公司开发的高性能sql搜索引擎,针对hive的缺点,impala用的自己的计算引擎,sql速度快很多,可用于交互式sql
这里还要介绍一个Sqoop组件,Sqoop是Sql -> Hadoop的一个缩写,它可以轻松的将sql数据库中的表导入到大数据平台上(或者是hdfs上,或者是hive上)。
4.4Hbase
Hbase组件用于实现大数据平台上数据的增删改查,是一个NoSQL(Not only SQL)数据库,它与传统SQL数据库的对比如下:
对比项 | NoSQL | RDBMS |
范式 | 非范式设计 | 遵循范式设计 |
Join | 面向聚合设计,很少join | 面向关系设计,大量join |
磁盘I/O | 少 | 多 |
理论 | CAP、BASE | ACID |
数据量 | PB+ | TB |
分布式 | 易于实现 | 实现困难 |
成熟度 | 日渐完善 | 非常成熟 |
表1. NoSQL与传统关系型数据库对比
可以看出,NoSQL数据库在实现理念及方式上与传统的关系型数据库,如MySQL,Oracle等是截然不同的。NoSQL数据库的目标是使用分布式的方法来处理海量数据(PB+级别),面向聚合设计,项目中数据库表量极少(例如,项目中要实现一个web信息检索的功能,Hbase会以一张或有限的几张表来概括整个互联网信息),除此之外,在具体的表设计中还有以下一些特点:
ü单一索引:表中每一行有一个rowkey,表的信息只可以通过rowkey检索;
ü操作灵活:hbase中表结构松散、操作灵活,例如,想在一个movie中增加一列title属性,可直接通过语句实现(put 'movies','m1','desc:title','movie1‘),而这在传统数据库中是很难实现的;
ü内容稀疏:hbase表虽然很大,但是表中的很多行的很多项可能是空值
Hbase表的存储也与传统的关系型数据库有很大的不同,首先看一下Cloudera中Hbase组件包含的角色:
图6. Hbase中的角色
由上可见,Hbase的角色包括Master和RegionServer,这样的结构跟HDFS有一些相似之处,即也是分为元数据和数据,其中Hbase元数据存放在Master节点上,数据信息存放在RegionServer节点上。Hbase的数据信息被拆分成一个一个region的形式存放在region server上,每一个region按顺序存放从start row key到stop row key的所有信息;元数据存放在hbase:meta中,客户端每次先调用hbase:meta,找到数据所在的region,region server;每个region中的数据按列族存储,以HFile的形式存放在HDFS上,从而充分利用了hdfs的高可用性。
至此,一个大数据运行环境就搭建完成了,在这个环境上我们可以用HDFS测试大数据存储,MapReduce进行大数据计算,并用Hive或Hbase进行一些大数据的分析工作。当然这只是一个基础的环境,为了满足大数据处理高效性、可定制性等的要求,越来越多的组件正在被不断的研发出来,下一章节中介绍的Spark就是其中之一。
五.大数据处理框架Spark
分布式计算框架 MapReduce 基于Disk IO,运行效率低,现在已经较少使用了,取而代之的是以 Spark 为代表的新型的基于内存 IO 的分布式计算框架。Spark 出自 UC Berkeley在11年左右发表的一篇论文《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》,它的核心是RDD(Resilient Distributed Datasets)。简单来说,Spark可将数据(普通文件系统上的数据或者大数据文件系统上的数据等等)加载到RDD这样一个数据结构中,并保存在内存中,用于之后的计算,基于内存的IO可以大大提高程序的运行效率。Spark可以集成到CDH平台上。
Spark 可以说是大数据平台的编程入口,现在的发展也是非常迅猛。Spark 支持 4 种编程语言:Java,Scala,Python和 R,我们本次实验环境中选择的是 Python语言。
Spark中有两种基本操作:
üTransform:实现数据格式转化,如map, flatmap, reduceByKey
üAction:触发一个动作,如count,take
通过这些基本操作,就可以通过Spark在大数据平台上实现一系列功能,如日志的清洗、信息的统计等。但是,Spark的强大不限于此,它还有4个功能强大的库:Spark SQL,Spark Streaming,MLlib和 GraphX。
图7. Spark 功能模块
这些功能一起提供了强大的大数据平台编程接口。
5.1Spark SQL
Spark擅长处理非结构化的数据,如日志,但是对于一些结构化或半结构化的数据处理起来却不够灵活,为了弥补这一缺陷,引入了Spark SQL的包,专门用来处理一些带有结构信息的数据,如json,sql表等。
图8. Spark SQL
与RDD相对,Spark SQL里面常用的数据结构是DataFrame,并拥有各种函数来读取不同类型的数据,如spark.read.json,spark.read.text,spark.read.table,spark.read.format等。
5.2Spark Streaming
Spark Streaming 又称流式计算,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafk、Flume、Twitter、ZeroMQ、Kinesis 以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和现场仪表盘等。
图9. Spark Streaming
Spark Streaming在内部的处理机制是,接收实时流的数据,并根据一定的时间间隔拆分成一批批的数据,然后通过Spark Engine处理这些批数据,最终得到处理后的一批批结果数据。对应的批数据,在Spark内核对应一个RDD实例,因此,对应流数据的DStream可以看成是一组RDDs,即RDD的一个序列。通俗点理解的话,在流数据分成一批一批后,通过一个先进先出的队列,然后 Spark Engine从该队列中依次取出一个个批数据,把批数据封装成一个RDD,然后进行处理,这是一个典型的生产者消费者模型,对应的就有生产者消费者模型的问题,即如何协调生产速率和消费速率。
5.3MLlib
MLlib是Spark提供的关于机器学习的库,旨在让编程人员更加方便、高效的实现机器学习的一些算法和功能:
图10. MLlib支持的机器学习算法
机器学习算法一般都有很多个步骤迭代计算的过程,机器学习的计算需要在多次迭代后获得足够小的误差或者足够收敛才会停止,迭代时如果使用Hadoop的MapReduce计算框架,每次计算都要读/写磁盘以及任务的启动等工作,这回导致非常大的I/O和CPU消耗。而Spark基于内存的计算模型天生就擅长迭代计算,多个步骤计算直接在内存中完成,只有在必要时才会操作磁盘和网络,所以说Spark正是机器学习的理想的平台。【1】
Spark MLlib提供了丰富的算法库,在Spark的官方文档中对这些算法的使用都有详细的说明,比如详见的ALS推荐算法,就可以通过下面的代码实现:
代码1. ALS算法的Spark实现
5.4GraphX
Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。因为图像处理属于比较专业的领域,我们在此只了解一个概念,不做太多深入学习。【4】
5.5其他一些常用的组件
5.5.1Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。Flume功能包括:
ü日志收集:Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
ü数据处理:Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 。Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统),支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。【2】
5.5.2Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。【3】
5.5.3组件的联合使用
大数据系统是一个复杂的系统,它通过很多组件协同合作来实现功能。
这里举的是一个实时日志处理的例子,涉及组件包括:Flume,Kafka和Spark Streaming,其中Flume负责数据的采集,Kafka作为消息中间件,Spark Streaming负责消息的实时处理。
代码2. Flume + Kafka + Spark Streaming 联调
通过上面的配置文件和代码,flume实现监控日志文件夹,一旦有新的日志生成,就将新日志传给kafka,Spark Streaming从Kafka中提取数据作为数据源,进行实时分析。
通过本章的介绍,我们可以看出利用大数据平台上的各种组件,我们可以通过编程的方式实现各种功能,例如数据的采集、清洗、格式转化、实时处理以及数据挖掘等。至此,我们对大数据编程也有了更深一步的了解,
六.总结
通过前面章节的学习,我们对大数据的概念、特征、处理流程、关键技术等都有了一个基本的了解,概括起来说,大数据建设大致可以分为三块:
ü大数据基础平台搭建
ü大数据编程
ü大数据算法
其中,大数据平台搭建包括硬件基础设施建设和大数据软件的安装,这也是大数据运行的基础;大数据编程指在大数据平台上,利用编程语言,如python、java、scala等实现各种功能,包括数据清洗、统计分析等;大数据算法则更进一步,通过对算法的改进、研究或创新,实现更充分、更精准的数据挖掘,深度学习等现在流行的算法都属于这一范畴,这也是大数据最精华的部分所在。
参考文献
【1】http://www.cnblogs.com/shishanyuan/p/4747761.html
【2】https://baike.baidu.com/item/flume/6250098?fr=aladdin
【3】https://baike.baidu.com/item/Kafka/17930165?fr=aladdin
【4】http://www.cnblogs.com/shishanyuan/p/4747793.html
【5】http://www.cnblogs.com/shishanyuan/p/4747761.html