Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 23

Spark 分享

Java-liao
1.What is spark
2. Spark VS Hadoop VS Hive VS Storm
3. Spark 1.x VS Spark 2.x
4. Spark and me
What is spark?

Spark ,是一种“ One Stack to rule them all” 的大数据计算框架,


期望使用一个技术堆栈就完美地解决大数据领域的各种计算任
务。 Apache 官方,对 Spark 的定义就是:通用的大数据快速处理引擎

Spark 使用 Spark RDD 、 Spark SQL 、 Spark
Streaming 、 MLlib 、 GraphX 成功解决了大数据领域中,离线批处理
、交互式查询、实时流计算、机器学习与图计算等最重要的任务和问题

Spark 除了一站式的特点之外,另外一个最重要的特点,就是基于
内存进行计算,从而让它的速度可以达到 MapReduce 、 Hive 的数倍
甚至数十倍!
Spark 发展历程
• 2009 年, Spark 诞生于伯克利大学的 AMPLab 实验室。最出 Spark 只是
一个实验性的项目,代码量非常少,属于轻量级的框架。
• 2010 年,伯克利大学正式开源了 Spark 项目。
• 2013 年, Spark 成为了 Apache 基金会下的项目,进入高速发展期。第三
方开发者贡献了大量的代码,活跃度非常高。
• 2014 年, Spark 以飞快的速度称为了 Apache 的顶级项目。
• 2014 年 6 月 1 日的时候, Spark 宣布了不再开发 Shark ,全面转向 Spark
SQL 的开发。
• 2015 年, Spark 在国内 IT 行业变得愈发火爆,大量的公司开始重点部署
或者使用 Spark 来替代 MapReduce 、 Hive 、 Storm 等传统的大数据计算
框架。
• 2016 年 7 月 26 日, spark2.0 发布,提出了更简单、更快速、更智能的特
点。
Spark 在大数据技术中的地位
上层应用(数据存储 / 报表展示)
数据挖掘层
R/mahout
( 数据挖掘 )
zk 数据业务层
配 hive Spark on yarn Spark streaming
置 Storm( 实时编
Map reduce on yarn
管 ( 离线批量处理 ) 程)
理 数据存储层
/
zab HBase
bix HDFS

群 数据传输层
监 Sqoop/flume/nio/mq Kafka

数据来源层
半 / 非结构化数
结构化数据

(应用数据 / 关系型数据 实时流数据
(日志 / 视频 / 音
库)
频)
Why to use spark?

运行在分布式内存的特性,使得速度飞快。

简单易用,超过 80 种 API 接口供选择。


Why to use spark?

非常通用,基于 spark core 之上发布了多款组件,覆盖数据仓库、流式计算、机器学习等。

Spark 可以运行在多种文件系统之上,单机,集群等模式。
One Stack to rule them all
1.What is spark
2. Spark VS Hadoop VS Hive VS Storm
3. Spark 1.x VS Spark 2.x
4. Spark and me
Spark VS Hadoop (1)
Spark 并不是要成为一个大数据领域的“独裁者”,不是一个人霸占大数据
领域所有的“地盘”,而是与 Hadoop 进行了高度的集成,两者可以完美的
配合使用。 Hadoop 的 HDFS 、 Hive 、 HBase 负责存储, YARN 负责资源调度
; Spark 复杂大数据计算。

Spark 计算模
Map Reduce 型
YARN
Hadoop
HDFS

Spark 相较于 MapReduce 速度快的最主要原因就在于, MapReduce 的计算模


型太死板,必须是 map-reduce 模式,有时候即使完成一些诸如过滤之类的操作
,也必须经过 map-reduce 过程,这样就必须经过 shuffle 过程。
而 Spark 的 shuffle 虽然也要基于磁盘,但是其大量 transformation 操作
,比如单纯的 map 或者 filter 等操作,可以直接基于内存进行 pipeline 操作,
速度性能自然大大提升。
Spark VS Hadoop (2)
MapReduce 能够完成的各种离线批处理功能,以及常见算法(比如二次排序、 topn
等),基于 Spark RDD 的核心编程,都可以实现,并且可以更好地、更容易地实现。而
且基于 Spark RDD 编写的离线批处理程序,运行速度是 MapReduce 的数倍,速度上有非
常明显的优势。
但是, Spark 也有其劣势。由于 Spark 基于内存进行计算,虽然开发容易,但是
真正面对大数据的时候(比如一次操作针对 10 亿以上级别),在没有进行调优的情况
下,可能会出现各种各样的问题,比如 OOM 内存溢出等等。导致 Spark 程序可能都无法
完全运行起来,就报错挂掉了,而 MapReduce 即使是运行缓慢,但是至少可以慢慢运行
完。
此外, Spark 由于是新崛起的技术新秀,因此在大数据领域的完善程度,肯定不
如 MapReduce ,比如基于 HBase 、 Hive 作为离线批处理程序的输入输出, Spark 就远
没有 MapReduce 来的完善。实现起来非常麻烦。
Spark VS Hive (1)
Spark 1.0 版本开始,推出了 Spark SQL 。其实最早使用的,都是 Hadoop 自己的 Hive 查
询引擎;但是后来 Spark 提供了 Shark ;再后来 Shark 被淘汰,推出了 Spark SQL 。 Shark
的性能比 Hive 就要高出一个数量级,而 Spark SQL 的性能又比 Shark 高出一个数量级。
最早来说, Hive 的诞生,主要是因为要让那些不熟悉 Java ,无法深入进行
MapReduce 编程的数据分析师,能够使用他们熟悉的关系型数据库的 SQL 模型,来操作
HDFS 上的数据。因此推出了 Hive 。 Hive 底层基于 MapReduce 实现 SQL 功能,能够让数据
分析人员,以及数据开发人员,方便的使用 Hive 进行数据仓库的建模和建设,然后使用 SQL
模型针对数据仓库中的数据进行统计和分析。但是 Hive 有个致命的缺陷,就是它的底层基于
MapReduce ,而 MapReduce 的 shuffle 又是基于磁盘的,因此导致 Hive 的性能异常低下。
进场出现复杂的 SQL ETL ,要运行数个小时,甚至数十个小时的情况。
后来, Spark 推出了 Shark , Shark 与 Hive 实际上还是紧密关联的, Shark 底层很
多东西还是依赖于 Hive ,但是修改了内存管理、物理计划、执行三个模块,底层使用 Spark
的基于内存的计算模型,从而让性能比 Hive 提升了数倍到上百倍。
Spark VS Hive (2)
然而, Shark 还是它的问题所在, Shark 底层依赖了 Hive 的语法解析器、查询优化
器等组件,因此对于其性能的提升还是造成了制约。所以后来 Spark 团队决定,完
全抛弃 Shark ,推出了全新的 Spark SQL 项目。 Spark SQL 就不只是针对 Hive 中
的数据了,而且可以支持其他很多数据源的查询。

Spark SQL 的特点


1 、支持多种数据源: Hive 、 RDD 、 Parquet 、 JSON 、 JDBC 等。
2 、多种性能优化技术: in-memory columnar storage 、 byte-code
generation 、 cost model 动态评估等。
3 、组件扩展性:对于 SQL 的语法解析器、分析器以及优化器,用户都可以自己重
新开发,并且动态扩展。

在 2014 年 6 月 1 日的时候, Spark 宣布了不再开发 Shark ,全面转向 Spark SQL


的开发。
Spark SQL 的性能比 Shark 来说,又有了数倍的提升。
Spark VS Hive (3)
Spark SQL 的性能优化技术简介
1 、内存列存储( in-memory columnar storage )
内存列存储意味着, Spark SQL 的数据,不是使用 Java 对象的方式来进行存储
,而是使用面向列的内存存储的方式来进行存储。也就是说,每一列,作为一个数
据存储的单位。从而大大优化了内存使用的效率。采用了内存列存储之后,减少了
对内存的消耗,也就避免了 gc 大量数据的性能开销。
2 、字节码生成技术( byte-code generation )
Spark SQL 在其 catalyst 模块的 expressions 中增加了 codegen 模块,对于 SQL
语句中的计算表达式,比如 select num + num from t 这种的 sql ,就可以使用动态
字节码生成技术来优化其性能。
3 、 Scala 代码编写的优化
对于 Scala 代码编写中,可能会造成较大性能开销的地方,自己重写,使用更加
复杂的方式,来获取更好的性能。比如 Option 样例类、 for 循
环、 map/filter/foreach 等高阶函数,以及不可变对象,都改成了用 null 、 while 循
环等来实现,并且重用可变的对象。
Spark VS Storm (1)
Spark Streaming 与 Storm 都可以用于进行实时流计算。但是他们两者的区别是
非常大的。其中区别之一,就是, Spark Streaming 和 Storm 的计算模型完全不一
样, Spark Streaming 是基于 RDD 的,因此需要将一小段时间内的,比如 1 秒内的
数据,收集起来,作为一个 RDD ,然后再针对这个 batch 的数据进行处理。而
Storm 却可以做到每来一条数据,都可以立即进行处理和计算。因此, Spark
Streaming 实际上严格意义上来说,只能称作准实时的流计算框架;而 Storm 是真
正意义上的实时计算框架。
此外, Storm 支持的一项高级特性,是 Spark Streaming 暂时不具备的,即
Storm 支持在分布式流式计算程序( Topology )在运行过程中,可以动态地调整并
行度,从而动态提高并发处理能力。而 Spark Streaming 是无法动态调整并行度的

Spark VS Storm (2)
但是 Spark Streaming 也有其优点,首先 Spark Streaming 由于是基于 batch
进行处理的,因此相较于 Storm 基于单条数据进行处理,具有数倍甚至数十倍
的吞吐量。
此外, Spark Streaming 由于也身处于 Spark 生态圈内,因此 Spark
Streaming 可以与 Spark Core 、 Spark SQL ,甚至是 Spark MLlib 、 Spark GraphX
进行无缝整合。流式处理完的数据,可以立即进行各种 map 、 reduce 转换操
作,可以立即使用 sql 进行查询,甚至可以立即使用 machine learning 或者图
计算算法进行处理。这种一站式的大数据处理功能和优势,是 Storm 无法匹敌
的。
因此,综合上述来看,通常在对实时性要求特别高,而且实时数据量不
稳定,比如在白天有高峰期的情况下,可以选择使用 Storm 。但是如果是对实
时性要求一般,允许 1 秒的准实时处理,而且不要求动态调整并行度的话,选
择 Spark Streaming 是更好的选择。
1.What is spark
2. Spark VS Hadoop VS Hive VS Storm
3. Spark 1.x VS Spark 2.x
4. Spark and me
Spark 1.x VS Spark 2.x
1 、更简单
标准的 SQL 支持,支持 SQL2003 标准
DataFrame/Dataset 的 API 统一,以后都用 Dataset 进行处理。
2 、更快速
用 spark 作为编译器,搭载了第二代 Tungsten 引擎,该引擎在 cpu 做了优化,
可参考 MPP 数据库的设计原理。

3 、更智能
引入 Structured Streaming 替代 Spark Streaming ,提供跟多功能,仅仅作为实
验版本。目前用的是 spark 1.5x
1.What is spark
2. Spark VS Hadoop VS Hive VS Storm
3. Spark 1.x VS Spark 2.x
4. Spark and me
The futrue of spark

总结: Spark ,是一种通用的大数据计算框架,正如传统大数据


技术 Hadoop 的 MapReduce 、 Hive 引擎,以及 Storm 流式实时计算引擎
等。
Spark 包含了大数据领域常见的各种计算框架:比如 Spark Core 用于离
线计算, Spark SQL 用于交互式查询, Spark Streaming 用于实时流式计算
, Spark MLlib 用于机器学习, Spark GraphX 用于图计算。
Spark 主要用于大数据的计算,而 Hadoop 以后主要用于大数据的存储
(比如 HDFS 、 Hive 、 HBase 等),以及资源调度( Yarn )。
Spark+Hadoop 的组合,是未来大数据领域最热门的组合,也是最有前
景的组合!
Spark and me
大数据行业中的自我定位:

1 、大数据开发
熟悉 Hadoop 、 hbase 、 hive 、 storm 、 spark ;
熟悉 Java ee 等技术整合;
数据仓库建模;
主要针对业务需求,编写 MR , spark 算子对数据进行
处理,统计分析。

2 、大数据运维
大型集群的运维和管理,
精通 Hadoop 、 spark 、 storm 源码等;
精通计算机基础知识:磁盘、网络、 IO 、数据库、 CPU 、
操作系统;二次开发;

3 、大数据挖掘工程师
数据科学家:
熟悉 R 、 MATLAB 等数据挖掘工具, MLLib,mahout 等。
熟悉数据挖掘、机器学习算法,
硕士学历以上
How to use spark?

Next
下期关注

You might also like