从开始制作大数据版图的MattTurck这个月刚刚发布了最新的年大数据版图。年无疑是机器学习之年,机器学习正在迅速成为许多应用的关键建构块。相应地,一个新兴的技术栈正在出现,在这个技术栈里面,大数据被用于处理核心的数据工程挑战,而机器学习则用于以分析洞察或者行动的形式从数据中析取出价值。一言蔽之,大数据提供管道,AI提供智能。
大数据+AI=新技术栈
当下,大数据的生态基本可以分为四个层,从下至上分别是大数据平台基础设施层、分析工具层、企业应用和行业服务层。大数据基础设施层提供了存储、计算、分析和挖掘等功能的软件和硬件设施,它就像大数据时代的操作系统一样,不仅仅是分布式数据库软件,还包括了实时流处理引擎、NoSQL数据库、机器学习、搜索引擎、图计算等。
具体可以参见:从大数据版图看大数据的技术架构
本次课程主要介绍大数据的技术架构,包括以下几个内容:
数据感知技术
数据存储技术
数据计算技术
大数据分析
数据可视化技术
1、数据感知技术
早期人类得到的数据途径,其中一个很重要的来源是对现象的观察。从观察中总结出数据,是人类和动物的重要区别,后者具有观察能力,却无法总结出数据,但是人类有这个能力。得到数据和使用数据的能力,是衡量文明发展水平的标准之一。这个想必大家应该可以达成共识了。
数据的生成模式大概经历了3个阶段(信息化阶段、互联网阶段、万物互联阶段)。数据的来源可以初略地分成两大类:一类来自物理世界,另一类来自人类社会。前者多半是科学实验数据或传感数据,后者与人的活动有关系,特别是与商业和互联网有关的。
我们以科学研究、商业和网络这三个领域为例来进一步说明大数据的来源。首先,科学研究会产生大量的数据,高效的数据分析将帮助科学家们发现基本原理,促进科学发展;其次,大数据和商业活动联系紧密,许多大数据工具已经被开发并广泛使用;再次,大部分的数据还是由互联网、移动网络和物联网产生的。这三个领域在对数据的处理方面具有不同的技术需求。
数据获取阶段的任务是以数字形式将信息聚合,以待存储和分析处理,数据获取过程可分为三个步骤:数据采集、数据传输和数据预处理。
(1)数据采集
数据采集是指从真实世界对象中获得原始数据的过程。不准确的数据采集将影响后续的数据处理并最终得到无效的结果。数据采集方法的选择不但要依赖于数据源的物理性质,还要考虑数据分析的目标。有3种常用的数据采集方法:传感器、日志文件和Web爬虫。
传感器
传感器常用于测量物理环境变量并将其转化为可读的数字信号以待处理。传感器包括声音、振动、化学、电流、天气、压力、温度和距离等类型。通过有线或无线网络,信息被传送到数据采集点。
日志文件
日志是广泛使用的数据采集方法之一,由数据源系统产生,以特殊的文件格式记录系统的活动。几乎所有在数字设备上运行的应用使用日志文件非常有用,例如Web服务器通常要在访问日志文件中记录网站用户的点击、键盘输入、访问行为以及其他属性。
Web爬虫
爬虫是指为搜索引擎下载并存储网页的程序。爬虫顺序地访问初始队列中的一组URLs,并为所有URLs分配一个优先级。爬虫从队列中获得具有一定优先级的URL,下载该网页,随后解析网页中包含的所有URLs并添加这些新的URLs到队列中。这个过程一直重复,直到爬虫程序停止为止。Web爬虫是网站应用如搜索引擎和Web缓存的主要数据采集方式。
除了上述方法,还有许多和领域相关的数据采集方法和系统。例如,*府部门收集并存储指纹和签名等人体生物信息,用于身份认证或追踪罪犯等。
(2)数据传输
原始数据采集后必须将其传送到数据存储基础设施如数据中心等待进一步处理。数据传输过程可以分为两个阶段,IP骨干网传输和数据中心传输。
(3)数据预处理
由于数据源的多样性,数据集由于干扰、冗余和一致性因素的影响具有不同的质量。从需求的角度,一些数据分析工具和应用对数据质量有着严格的要求。因此在大数据系统中需要数据预处理技术提高数据的质量。
2、数据存储技术
数据存储是指数据以某种格式记录在计算机内部或外部存储介质上。数据存储的方案一般包含两个方面:数据的存储结构和数据的储存方式。
所谓数据的存储结构就是数据存在的形式。例如:穿孔结构(非数字化)、文件(Text、Excel、XML、JSON)、数据库(关系模型)、对象图、属性列表等。
而数据的存储方式主要指数据存储的物理介质,包括纸带、磁带、光盘和目前主流的几种数字存储:随机存取存储器(Randomaccessmemory,RAM)、磁盘(HDD)(包括磁盘阵列)、以及存储级存储器(闪存、SSD)等。
归纳起来,无论是传统数据的存储,还是大数据的存储,数据存储系统都具有如下两个方面特征:
存储基础设施应能持久和可靠地容纳信息;
存储子系统应提供可伸缩的访问接口供用户查询和分析巨量数据。
为了适应大数据系统的特性,存储基础设施应该能够向上和向外扩展,以动态配置适应不同的应用。传统数据存储解决方案(DAS、NAS、SAN等)最大的问题是计算与存储相分离,导致数据是围绕计算来展开的;而随着大数据时代的到来,海量数据成为了主要矛盾,必须让计算围绕数据来展开。工业界给出了这个问题的答案:即分布式文件系统,我们在第4节中详细介绍。这里我们先从大数据的总体管理角度上看看。
总体上,按数据类型与存储方式的不同,面向大数据的存储与管理系统大致可以分为三类:MPP并行数据库和内存数据库、基于Hadoop开源体系的大数据系统和MPP并行数据库与Hadoop的混合集群。
具体可以参考:大数据系统发展的技术路线
3、数据计算技术
大数据的计算一般都采用分布式计算框架来完成大数据的处理和分析任务。作为分布式计算框架,不仅要提供高效的计算模型、简单的编程接口,还要考虑可扩展性和容错能力。同时,作为大数据计算与处理的框架,很多场景还需要有高效可靠的输入输出(IO),满足数据实时处理的需求。
我可以先给出一个很摩登的对计算概念的理解:广义上讲,一个函数变化如把x变成了f(x)就是一个计算!如果我们把一切都看作是信息,那么更精确的讲,计算就是对信息的变换!如果采用这种观点,你会发现,其实自然界充满了计算!如果我们把一个小球扔到地上,小球又弹起来了,那么大地就完成了一次对小球的计算。因为你完全可以把小球的运动都抽象成信息,它无非是一些比如位置、速度、形状等等能用信息描述的东西嘛,而大地把小球弹起来就无非是对小球的这些信息进行了某种变换,因而大地就完成了一次计算!你可以把整个大地看作是一个系统,而扔下去的小球是对这个系统的输入,那么弹回来的小球就是该系统的输出,因而也可以说,计算就是某个系统完成了一次从输入到输出的变换!
更有意思的是,我们可以把若干个计算系统进行合并构成更大的计算系统。比如还是那个小球吧,如果往地上放了一个跷跷板,这样小球掉到地上会弹起这个跷跷板的另一端,而跷跷板的另一边可能还是一个小球,于是这个弹起的小球又会砸向另一个跷跷板……。
这样理解不要紧,你会发现,现实世界到处都是计算了!因为我们完全可以把所有的自然界存在的过程都抽象成这样的输入输出系统,所有的大自然存在的变量都看作是信息,因而计算无处不在!也的确,正是采取了这样的观点,国外才有可能发明什么DNA计算机、生物计算机、量子计算机这些新鲜玩艺!因为人家把DNA的化学反应、量子世界的波函数变换都看作是计算了,自然就会人为地把这些计算组合起来构成计算机了。
而狭义的讲,计算的本质是一个黑箱,我们把数据放入黑箱,黑箱按照人们规定的过程一步一步(即元运算)执行下去,然后得出结果。
因此,如果从大数据这个语境中,计算就是对大数据的变换!在大数据系统中,从数据的输入到输出的变换!
计算模式的出现也有力推动了大数据技术和应用的发展,使其成为目前大数据处理最为成功、最广为接受使用的主流大数据计算模式。然而,现实世界中的大数据处理问题复杂多样,难以有一种单一的计算模式能涵盖所有不同的大数据计算需求。研究和实际应用中发现,由于MapReduce主要适合于进行大数据线下批处理,在面向低延迟和具有复杂数据关系和复杂计算的大数据问题时有很大的不适应性。因此,近几年来学术界和业界在不断研究并推出多种不同的大数据计算模式。
所谓大数据计算模式,即根据大数据的不同数据特征和计算特征,从多样性的大数据计算问题和需求中提炼并建立的各种高层抽象(abstraction)或模型(model)。例如,MapReduce是一个并行计算抽象,加州大学伯克利分校著名的Spark系统中的“分布内存抽象RDD”,CMU著名的图计算系统GraphLab中的“图并行抽象”(GraphParallelAbstraction)等。传统的并行计算方法,主要从体系结构和编程语言的层面定义了一些较为底层的并行计算抽象和模型,但由于大数据处理问题具有很多高层的数据特征和计算特征,因此大数据处理需要更多地结合这些高层特征考虑更为高层的计算模式。根据大数据处理多样性的需求和以上不同的特征维度,目前出现了多种典型和重要的大数据计算模式。与这些计算模式相适应,出现了很多对应的大数据计算系统和工具。
大数据的计算模式大致分为以下几类:
批量计算模式
流式计算模式
交互式计算模式
图计算模式
在大数据基础上的便捷交互式计算模式的出现,应该说是大数据处理技术积累到一定程度后的历史必然。Hadoop提供的MR还是面向技术人员的底层编程接口,需要便捷的交互式查询与分析功能。作为交互式计算模式的集大成者,SQLonHadoop成为一个备受瞩目的解决方案。
为了描述方便,可以大致将SQLonHadoop分为以下四类:
Hive系:Hadoop上的数据仓库、HiveOnSpark
Shark系:Spark上的数据仓库、SparkSQL
Dremel系:Dremel、Impala、PowerDrill
混合系:关系数据库+Hadoop,HadoopDB
4、大数据分析
数据分析处理来自对某一兴趣现象的观察、测量或者实验的信息。数据分析目的是从和主题相关的数据中提取尽可能多的信息。主要目标包括:
推测或解释数据并确定如何使用数据;
检查数据是否合法;
给决策制定合理建议;
诊断或推断错误原因;
预测未来将要发生的事情。
由于统计数据的多样性,数据分析的方法大不相同。可以将根据观察和测量得到的定性或定量数据,或根据参数数量得到的一元或多元数据进行分类。根据数据分析深度将数据分析分为三个层次:描述性(descriptive)分析,预测性分析和规则性(prescriptive)分析。
描述性分析:基于历史数据描述发生了什么。例如,利用回归技术从数据集中发现简单的趋势,可视化技术用于更有意义地表示数据,数据建模则以更有效的方式收集、存储和删减数据。描述性分析通常应用在商业智能和可见性系统。
预测性分析:用于预测未来的概率和趋势.。例如,预测性模型使用线性和对数回归等统计技术发现数据趋势,预测未来的输出结果,并使用数据挖掘技术提取数据模式(pattern)给出预见。
规则性分析:解决决策制定和提高分析效率。例如,仿真用于分析复杂系统以了解系统行为并发现问题,而优化技术则在给定约束条件下给出最优解决方案。
大数据的分析技术主要依靠四个方面:统计分析、数据挖掘、机器学习和可视化分析。
统计分析:统计分析是基于统计理论,是应用数学的一个分支。在统计理论中,随机性和不确定性由概率理论建模。统计分析技术可以分为描述性统计和推断性统计。描述性统计技术对数据集进行摘要(Summarization)或描述,而推断性统计则能够对过程进行推断。更多的多元统计分析包括回归、因子分析、聚类和判别分析等。
数据挖掘:数据挖掘可以认为是发现大数据集中数据模式的一种计算过程。许多数据挖掘算法已经在人工智能、机器学习、模式识别、统计和数据库领域得到了应用,年ICDM国际会议上总结了影响力最高的10种数据挖掘算法,包括C4.5、k-means、SVM、Apriori、EM、PageRank、AdaBoost、kNN、朴素贝叶斯和CART,覆盖了分类、聚类、回归和统计学习等方向。此外,一些其他的先进技术如神经网络和基因算法也被用于不同应用的数据挖据。有时候,几乎可以认为很多方法间的界线逐渐淡化,例如数据挖掘、机器学习、模式识别、甚至视觉信息处理、媒体信息处理等等,“数据挖掘”只是作为一个通称。
机器学习:机器学习是一门研究机器获取新知识和新技能,并识别现有知识的学问,其理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法从数据中自动分析获得规律,并利用规律对未知数据进行预测。在大数据时代,人们迫切希望在由普通机器组成的大规模集群上实现高性能的以机器学习算法为核心的数据分析,为实际业务提供服务和指导,进而实现数据的最终变现。与传统的在线联机分析处理OLAP不同,对大数据的深度分析主要基于大规模的机器学习技术。因而与传统的OLAP相比较,基于机器学习的大数据分析具有自己独特的特点,包括迭代性、容错性、参数收敛的非均匀性等。这些特点决定了理想的大数据分析系统的设计和其他计算系统的设计有很大不同,直接应用传统的分布式计算系统应用于大数据分析,很大比例的资源都浪费在通信、等待、协调等非有效的计算上。
可视化分析:可视化分析与信息绘图学和信息可视化相关。数据可视化的目标是以图形方式清晰有效地展示信息。一般来说,图表和地图可以帮助人们快速理解信息。但是,当数据量增大到大数据的级别,传统的电子表格等技术已无法处理海量数据。大数据的可视化已成为一个活跃的研究领域,因为它能够辅助算法设计和软件开发。
前三个数据分析技术之间的关系,简单来看,统计学主要是通过机器学习来对数据挖掘发挥影响,而机器学习和数据库则是数据挖掘的两大支撑技术。
数据分析的语言和工具千万种,综合起来万变不离其宗。无非是数据获取、数据存储、数据管理、数据计算、数据分析、数据展示等几个方面。而被提到频率最高的如Excel、R、Python、SPSS、SAS、SQL等。对于大数据来说,最常用的语言一共有三个:SQL、R和Python。
R是一款优秀的开源统计应用语言,它直观、易用、低成本,而且还有庞大的社区支持,随着数据挖掘技术的兴起,R语言得到了广泛的应用。
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R语言是主要用于统计分析、绘图的语言和操作环境。R本来是由来自新西兰奥克兰大学的RossIhaka和RobertGentleman开发(也因此称为R),现在由“R开发核心团队”负责开发。R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。
与其说R是一种统计软件,还不如说R是一种数学计算的环境,因为R并不是仅仅提供若干统计程序、使用者只需指定数据库和若干参数便可进行一个统计分析。R的思想是:它可以提供一些集成的统计工具,但更大量的是它提供各种数学计算、统计计算的函数,从而使使用者能灵活机动的进行数据分析,甚至创造出符合需要的新的统计计算方法。
Python在这些工具里面是综合功能最强大的,但是这些功能分散在第三方库里面,没有得到有机的整合,所以学习成本还是比较高的。Python与R不同,Python是一门多功能的语言。数据统计是更多是通过第三方包来实现的。
5、数据可视化技术
数据可视化,是利用计算机图形学和图像处理技术,将数据转换为图形或者图像在屏幕上显示出来进行交互处理的理论方法和技术。当然这是最基本的理解,进一步来说,数据可视化毫无疑问是基于数据的,我们很幸运地处于这样一个让我们兴奋的时代,数据科学让我们越来越多地从数据中发现人类社会中的复杂行为模式,以数据为基础的技术决定着人类的未来,但并非是数据本身改变了我们的世界,起决定作用的是我们可用的知识。大数据已经改变了我们生活工作的方式,也对我们的思维模式带来影响。随着体量多,类型复杂的大数据更加接近我们,传统的数据处理方法显然无法适应,而数据可视化是一种能很好展示大数据,处理大数据的方法。同时现在随着图形图像处理的快速发展,渲染引擎提高,可视化能更好的使用。当然,数据可视化不只是只各种工具,新颖的技术,同时作为一种表达数据的方式,它是对现实世界的抽象表达。它像文字一样,为我们讲述各种各样的故事。
为什么要进行数据可视化?
(1)我们利用视觉获取的信息量,远远比别的感官要多得多
如图所示,视觉器官是人和动物利用光的作用感知外界事物的感受器官,光作用于视觉器官,使其感受细胞兴奋,其信息经过视觉神经系统加工后产生视觉。通过视觉,人和动物感知到画面的大小,明暗,颜色,变化趋势,人的知识中至少百分十八十以上的信息经过视觉获得,所以,数据可视化可以帮助我们更好的传递信息,毕竟人对视觉获取的信息比较容易。
(2)数据可视化能够帮助我们对数据有更加全面的认识
对该解释有一个经典的例子。F.J.Ans