课程概述
- 介绍如何使用Spark分析大数据
- 介绍Spark和Scala中数据处理的基础知识
本课程结束时,学生应能够:
- 了解大数据和大数据分析的概念
- 理解Spark和Scala的基本知识
- 应用机器学习方法分析Spark中的大数据
讲座材料:Sandy Ryza, “Advanced Analytics with Spark”, 2ndedition,O’REILLY,2017
学习流程:基础知识科普 + 运行代码并进行分析(运行时间、运行结果等)
学习目标:了解大数据分析的过程,体会大数据分析的意义
PS: Scala是相对于Java、Python等当红编程语言较冷门的程序语言,本科目以大数据分析为核心,而不以Scala语言为核心。实验过程中,对于Scala不要求掌握。
简言
- 在互联网技术发展到至今阶段,大量日常,工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前传统的数据处理技术已经无法胜任,一套用来处理海量数据的技术应运而生,这就是大数据技术。
- 大数据分析的整体过程中,从对数据整体的统计处理到复杂的机器学习的方法(method),具有非常多样的算法。
- 每章节都以一个新的主题为中心,进行理论和实验兼并的学习方式。
- 本专栏预计将要涉及的内容如下
介绍大数据 大数据分析的例子:
- 建立一个模型,利用数以千计的特征和数十亿的交易事件来检测、推测、模拟信用卡欺诈,从而防微杜渐、未雨绸缪
- 智能推荐数百万产品给数百万用户:QQ看点,百度贴吧、抖音等现代化娱乐APP中可以直接感受到
- 通过模拟包括数百万种工具的投资组合来估计金融风险
- 轻松操作来自数千个人类基因组的数据,以检测与疾病的基因关联
以前所未有的规模收集、存储和处理信息是我们的工具。多亏了开源软件的生态系统,利用商品计算机集群来存储和处理大量数据成为了可能,比如Apache of data.
数据科学:
- 在使用工具收集、处理数据与用这些数据做成某些具有实际意义的事之间,存在着差距。
- 非数据科学家可能会关心将原始数据转化为的有用的东西的实践,对于实际生活中的应用而言,收集到的大量数据如果不能转换为某种有用的东西,则本身意义不大,而从数据收集到数据处理并总结出“有用”的东西,这就是大数据分析的初衷。
小数据集群:
- 开源框架R, PyData stack, Octave等,具有在小数据集上快速分析和建模的能力
思考:对于小的数据集,一个能让计算机集群在大的数据集上达到相同结果的等价过程应该是什么呢? 简单地为小型数据集扩展框架以在多台机器上运行可行吗?
分布式计算的挑战:
重新考虑我们依赖于单节点系统的许多基本假设
网络传输速度
·数据必须跨集群中的多个节点进行分区
·网络传输速率比内存访问速度慢
·因此,具有广泛数据依赖性的算法将受到影响
*网络传输是尽可能交付,网络层本身就具备不可靠性,需要传输层来提供可靠传输。因此多节点在某集群中数据交互势必会受到网络状况的影响。
*集群计算本质就是将数据读入内存中,在内存中以进程或线程的形式运行。随着不断发展,硬件质量越来越好,相对于当前阶段的网络传输,硬件读取的速度要快速且稳定的多。
节点故障
·当处理问题的机器数量增加时,发生故障的概率也会增加。某一个节点死亡本质就是某台计算机出现了故障,此时分布式计算该分区内的所有数据都会随之无法运行。
因此需要对分布式计算的特性敏感的编程范例。
分布式计算是一种计算方法,和集中式计算是相对的。
随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。
分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。
对数据科学的挑战
- 数据混乱需要筛选、过滤、重组、调优等
*收集的混乱数据一般称为脏数据。我们需要对其进行‘清理’。脏数据的定义是获得的数据混乱无序、有乱码;存在多组重复数据;存在相同意义不同表现的多组数据等。对脏数据进行归类整合简化,这一步骤是最最重要也是最耗时费力的步骤,该步骤不能妥善处理的话,绝对无法得到一个好的数据分析结果。
- 大型数据集不适合被人类直接检查并分析,甚至需要计算方法来发现需要哪些预处理步骤
- 为了优化模型性能,针对特性的工程选择选择比编写算法需要更多的时间
例子:检测网站上的欺诈性购买。首先,从各种各样的潜在特征中进行选择(采购订单,IP位置信息,登录时间,点击日志,导航日志),然后,将这些选择的特征转化为适合机器学习算法的向量。
- 数据科学的基础部分
- 需要多次传递相同的数据,以建模和分析该数据
由于机器学习算法和统计程序的特点
重复扫描输入数据以达到收敛
- 如果一个框架需要每次从磁盘读取相同的数据集
由于磁盘IO延迟而使进程变慢
- 数据科学的观点
·让数据对非数据科学家有用
·所以,当一个表现良好的模型被建立起来时,任务还没有结束
- 例如:推荐引擎,欺诈检测系统
- 模型是生产服务的一部分
·需要定期甚至实时重建
- 实验室分析与工厂分析的区别
·实验室:探索性分析(理解数据、测试理论、实验)
·工厂:操作分析(包装模型,提高准确性,关心SLA和正常运行时间)
·一般使用R或Python进行探索性分析,使用Java或c++进行操作分析
需要一个框架,使建模容易,但也适合生产系统,以节省时间
介绍Spark
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
Apache Hadoop MapReduce
- 通过在数百到数千台机器上并行执行,对巨大数据集的革命性计算
- 实现接近线性可伸缩性
·随着数据量的增加,我们可以用更多的计算机来完成任务,而任务在相同的时间内完成
- 把工作分成小任务,可以适应任务失败而不影响工作
- MapReduce和Spark之间的相似性:维护MapReduce的线性可扩展性和可容错
- Spark相对于MapReduce的改进:
- 与其依赖于严格的“先图后减”格式,Spark可以执行更通用的有向无环图(DAG)。
·MapReduce必须将中间结果写入分布式文件系统
·Spark可以将它们直接传递到管道中的下一个步骤
- 丰富的转换集,使用户能够更自然地表达计算
·一个专注于开发人员的强大的流线型API,可以用几行代码表示复杂的管道
3.内存中处理
·“Dataset”和“DataFrame”抽象使开发人员能够跨集群将处理管道中的任何点物化到内存中
·当需要处理相同的数据集时,Spark不需要重新计算或从磁盘重新加载
·非常适合高度迭代算法和快速响应用户查询的反应性应用程序
小结
- 数据科学:把原始数据变成非数据科学家可能关心的有用的东西
- 大数据分析:以前所未有的规模收集、存储和处理信息,需要分布式计算。
- 数据科学的面临的挑战:数据预处理、迭代、数据应用
- Apache Spark:一个快速和通用的集群计算系统,具有线性可扩展性和可容错性
- Spark的优点:Spark直译为火花。更通用的有向无环图(DAG),而不是“先图后约简”;关注开发人员,简化api;内存中处理
|