昨天去参加了场面试,本来觉得自己很厉害,后来觉得自己啥都不会。自己学习能力确实还行,在项目中遇到不会的东西通过粗略的学习马上就能用到项目中来,但是只知道用。所以感觉这次面试把原来飘在天上的我又拉回来了,是时候需要脚踏实地好好学习了。也为今年秋天去大厂的面试做做准备吧。
Spark 简介
1.Spark简介
1.1 简介与功能
Spark是基于内存计算的分布式计算引擎。正是因为基于内存计算,提高了大数据环境下数据处理的实时性,同时保证了数据的高容错性,和高可伸缩性,允许用户将Spark部署在大量廉价硬件上, 形成集群。
.分布式计算
.内存计算
.容错性
.多计算范式
Spark 是加州大学伯克利分校 AMP 实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark 在 2013 年 6 月进入 Apache 成为孵化项目,8 个月后成为Apache 顶级项目,速度之快足见过人之处,Spark 以其先进的设计理念,迅速成为社区的热门项目,围绕着 Spark 推出了 Spark SQL、Spark Streaming、MLLib 和 GraphX 等组件,也就是 BDAS(伯克利数据分析栈) ,这些组件逐渐形成大数据处理一站式解决平台。从各方面报道来看 Spark 抱负并非池鱼,而是希望替代 Hadoop 在大数据中的地位,成为大数据处理的主流标准,不过 Spark 还没有太多大项目的检验,离这个目标还有很大路要走。Spark 使用 Scala 语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中 Actor 通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型) 。在 Spark 官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。
1.1.1 运行速度快
Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
1.1.2 易用性好
Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。
1.1.3 通用性强
Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询1、MLlib或MLbase的机器学习和GraphX的图处理,它们都是由AMP实验室提供,能够无缝的集成并提供一站式解决平台。
1.1.4 随处运行
Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。
1.2 Spark历史
2009年:Spark诞生于AMPLab
2010年:开源
2013年6月:Apache孵化器项目
2014年2月:Apache顶级项目
2015年:Contributors>450人
演进时间表:
- 2009 年由 Berkeley’s AMPLab 开始编写最初的源代码
- 2010 年开放源代码
- 2013 年 6 月进入 Apache 孵化器项目
- 2014 年 2 月成为 Apache 的顶级项目(8 个月时间)
- 2014 年 5 月底 Spark1.0.0 发布
- 2014 年 9 月 Spark1.1.0 发布
- 2014 年 12 月 Spark1.2.0 发布
目前情况:
- 目前已经有 30+公司 100+开发者在提交代码
- Hadoop 最大的厂商 Cloudera 宣称加大 Spark 框架的投入来取代 Mapreduce
- Hortonworks
- Hadoop 厂商 MapR 投入 Spark 阵营
- Apache Mahout 放弃 MapReduce,将使用 Spark 作为后续算子的计算平台
1.3 BDAS生态系统
Spark 生态圈即 BDAS(伯克利数据分析栈)包含了 Spark Core、Spark SQL、Spark Streaming、 MLLib 和 GraphX 等组件, 这些组件分别处理 Spark Core 提供内存计算框架、SparkStreaming
的实时处理应用、Spark SQL 的即席查询、MLlib 或 MLbase 的机器学习和 GraphX 的图处理,它们都是由 AMP 实验室提供,能够无缝的集成并提供一站式解决平台。
Spark 生态圈 ,是伯克利 APMLab 实验室打造的,力图在算法(Algorithms) 、机器(Machines)
、人(People)之间通过大规模集成来展现大数据应用的一个平台。伯克利 AMPLab 运用大数据、云计算、通信等各种资源以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界。该生态圈已经涉及到机器学习、数据挖掘、数据库、信息检索、自然语言处理和语音识别等多个领域。
Spark 生态圈以 Spark Core 为核心,从 HDFS、Amazon S3 和 HBase 等持久层读取数据,以 MESS、YARN 和自身携带的 Standalone 为资源管理器调度 Job 完成 Spark 应用程序的计算。
这些应用程序可以来自于不同的组件,如 Spark Shell/Spark Submit 的批处理、Spark Streaming 的实时处理应用、Spark SQL 的即席查询、BlinkDB 的权衡查询、MLlib/MLbase的机器学习、GraphX
的图处理和 SparkR 的数学计算等等。
1.4 Spark与Hadoop差异
Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:
-
Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。
-
Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。
-
Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。
1.5 Spark的优势
- 计算范式支持
- 处理速度 轻量级快速处理
- 易用性 易于使用,分布式RDD抽象,Spark支持多种语言
- 兼容性 与HDFS等存储兼容
- 社区活跃度 社区活跃度高
1.6 Spark的适用场景
目前大数据处理场景有以下几个类型:
- 复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;
- 基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间
- 基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间
目前对以上三种场景需求都有比较成熟的处理框架,第一种情况可以用Hadoop的MapReduce来进行批量海量数据处理,第二种情况可以Impala进行交互式查询,对于第三中情况可以用Storm分布式处理框架处理实时流式数据。以上三者都是比较独立,各自一套维护成本比较高,而Spark的出现能够一站式平台满意以上需求。
通过以上分析,总结Spark场景有以下几个:
-
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小
-
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合
-
数据量不是特别大,但是要求实时统计分析需求
即席查询:是用户根据自己的需求,灵活的选择查询条件,系统能够根据用户的选择生成相应的统计报表。 即席查询与普通应用查询最大的不同是普通的应用查询是定制开发的,而即席查询是由用户自定义查询条件的。 ↩︎