第1页
Spark 展望 & Spark 程序开发
费良宏,lianghon@amazon.com AWS Technical Evangelist
15 July 2016
第2页
$whoami
技术布道 老程序员 云计算应用 & 架构 数据分析/ 深度学习 / 自然语言处理
第3页
为什么要关注 Spark?
第5页
Apache Spark 的哲学
第6页
Apache Spark 引擎
扩展性、容错 Python、Java、 Scala 以及R APIs 标准库
跨越工作负载驱动和环境的统一引擎
第7页
开源的生态环境
第8页
Spark 的理论基础
如同MapReduce + GFS, Spark 的出现也是基于两篇论文
• M. Zaharia, M. Chowdhury, M. J. Franklin, S. Shenker, and I. Stoica, “Spark: cluster computing with working sets,” in Proceedings of the 2nd USENIX conference on Hot topics in cloud computing, 2010, pp. 10–10.
• M. Zaharia, M. Chowdhury, T. Das, A. Dave, J. Ma, M. McCauley, M. J. Franklin, S. Shenker, and I. Stoica, “Resilient distributed datasets: A fault-tolerant abstraction for in- memory cluster computing,” in Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation, 2012, pp. 2–2.
• 作者之一Matei Zaharia 现为 Databricks 的共同创始人、 CTO
第9页
Apache Spark 的发展史
第10页
2015年:Spark 的里程碑年份
Ø 开源领域最活跃的大数据项目
• 1000+ 代码贡献者
Ø 引入对新的语言工具的支持:R
Ø 更广泛的产业支持和应用
第11页
Stack Overflow 2016 技术趋势
来源: http://stackoverflow.com/research/developer-survey-2016
第12页
Stack Overflow 2016 技术薪酬
来源: http://stackoverflow.com/research/developer-survey-2016
第13页
应用Spark 的十大行业
第14页
Spark 的应用场景
第15页
Spark 的使用方式&用户角色
在公有云上
41%
-用户是数据工程师
22%
-用户是数据科学家
第16页
Spark 的使用规模
第17页
Spark vs. Hadoop
第18页
大数据的演进
批处理
Batch processing
流式处理
Stream processing
机器学习
Machine learning
第19页
对比
Spark
更新、演进更快
Hadoop
更成熟,更容易配置和使用
数据保存在内存,仅在需要的时候写入 磁盘。在Map 和Reduce阶段的数据都保 存在内存。性能是10X- 100X
可以运行在多种模式下,standalone、 Apache Messos、YARN以及AWS EMR
Hadoop 通过与数据临近的处理器来提高 性能。数据保存在磁盘上
基于HDFS 文件系统
较少的代码、易于使用 开发迅速、工具多样 支持交互处理
更多的代码 多用于批处理
第20页
关于 Spark vs. Hadoop 的五件事
1. 针对的方向不同。Hadoop 本质是一个分布式数据的基础 架构;Spark 是一个数据处理工具
2. 你可使用其中之一。Hadoop 包含了HDFS 的存储组件, 还包含了MapReduce 的处理组件;Spark 没有自己的文 件管理系统,或者HDFS或者其它
3. Spark 更快 4. 你或许并不需要 Spark 的速度 5. 故障恢复的方式不同,但是都不错
来源: http://www.infoworld.com/article/3014440/big-data/five-things-you-need-to-know-about-hadoop-v-apache-spark.html
第21页
㣐錞垷侨䰘ⴔ區涸♫㣐⟣⸉
第22页
㣐錞垷侨䰘ⴔ區涸♫㣐⟣⸉
㛇炄ⴔ區#BTJDTUBUJTUJDT㖲⧩ծ⚥⧩ծ倰䊵瘝瘝 䎛⛐涸㢴⡤곿(FOFSBMJ[FE/CPEZQSPCMFN 騄猌ծ呍⟄⿺挿䧴罏挿꧋ざ涸Ⱒ翫䚍 㕃雿雦皾(SBQIUIFPSFUJDDPNQVUBUJPOT 㕃碫㘗涸侨䰘䧴罏銳㕃䒊垷獺毜㕃瘝 絁䚍➿侨鵘皾-JOFBSBMHFCSBJDDPNQVUBUJPOT絁䚍禹絡ծ暵䖄⧩絁䚍㔐䔱ծ1$" ⠏⻊0QUJNJ[BUJPOⴅ侨涸剒㼭⻊呍剒㣐⻊곿ꥥ劼倰岁ծ✳妃錞ⴢծ$(% 獤ⴔ*OUFHSBUJPO
BOEⴅ侨獤ⴔծ餍〽倛䲀㼋ծ넞絶獤ⴔծ褐暵⽓峫倰岁 嫱㼆곿"MJHONFOUQSPCMFNT侨䰘㼆韌崞满㼆韌꧋ざꢂ⼐ꂁ곿⸓䙖錞ⴢծ)..
勻彂IUUQXXXTUBUCFSLFMFZFEV_NNBIPOFZQVCTOSDNBTTJWFEBUBQEG
第23页
Hadoop vs. Spark
㛇炄ⴔ區
✔
✔
䎛⛐涸㢴⡤곿 ➑ꣳ✵皍⽀鍒⢾㥵 岌⻊㢴⡤곿⢾
,//
㥵47.ծ1$"
㕃雿雦皾
皍⽀涸絁䚍➿侨곿 ⠏⻊곿⢾㥵Ⱏ
涸㕃雿雦皾
䪦唑䏞♴꣭곿
4QBSL (SBQI9
絁䚍➿侨鵘皾
絁䚍㔐䔱
㢕勇涸絁䚍➿侨 곿
⠏⻊
ꥥ劼倰岁
✔
獤ⴔ
⡛絶獤ⴔ涸姻❜岁
✔
嫱㼆곿
絁䚍➿侨곿
✔
第24页
Spark 更快、更快、更快
• 大规模并行
• 使用DAGs(有向无环图)而 不是 map-reduce 进行处 理
• RDD 的数据保存在内存 中,最小化的 I/O
• 使用分离感知 (Partitioning-aware) 避免 网络密集环境下的 shuffle
A: B:
Stage 1 C: D:
groupBy E:
F:
Stage 2 map
filter
join Stage 3
= RDD
= cached partition
第25页
䚍腊㼆嫱
来源:https://databricks.com/blog/2014/10/10/spark-petabyte-sort.html
第26页
Spark 2.0 展望
第27页
Spark 2.0 的新变化
• Structured API improvements (DataFrame、Dataset、SparkSession) • Structured Streaming • SQL 2003 suppor • MLlib model export • MLlib R bindings • Scala 2.12 support
广泛的社区的支持
• Deep Learning Library • GraphFrames • PyData Integration • Reactive streams • C# bindings: Mobius • JS bindings: EclairJS
第28页
Spark 2.0 的新变化
Whole-stage code generation • Fuse across multiple operators
Optimized input / output • Apache Parquet + build-in cache
第29页
Structured Streaming API
第30页
样例:Batch App
第31页
样例:Continuous App
第32页
Spark 应用开发
第33页
Spark 上的应用编程语言
第34页
程序语言份额
第35页
Scala 的 Libraries
第36页
Python 的 Packages
第37页
R 的 Packages
第38页
Python、Scala & R 的对比
第39页
各有所长
第40页
为什么要强调 Python ?
易用的“瑞士军刀”一样的程序语言 在数据分析的软件工程领域具有极高的生产效率 针对应用的业务逻辑可以担当敏捷“编排”和“胶水”的作用 具有简单的 C/C++/Fortran 的接口,Python 的 C API 设计的非 常出色
第41页
但是….Python 是不是很慢?
• 是的,解释执行的Python 是要慢一些 • Python 可以在需要高性能的场合使用其它语言
• C: ctypes、CFFI、Cython • C++: Cython、Boost.Python • FORTRAN: f2py
• 一个秘密:大部分与科学计算相关的Python 包的关键部分使用的是 编译语言的算法
第42页
关于 PySpark
PySpark (Python Spark API)提供了面向 Python 语言的 Spark 编程模型
• Python是动态类型的,所以RDDs可 以容纳多种类型的对象
• PySpark 还不支持几个API调用,如 Lookup 和非文本输入文件。这些功 能将被添加到接下来的版本中
第43页
安装和设置
下载安装 JDK (Java 7、Java 8) 设置 JAVA_HOME 环境变量 安装设置 Scala (version 2.11.8) 下载安装 Spark (version 1.6.2) 设置PySpark 环境变量
• export SPARK_HOME=/opt/spark • export PYTHONPATH=$SPARK_HOME/python • export PYSPARK_PYTHON=python3
验证
第44页
Spark 上的 wordcount.py
第45页
PySpark 如何工作
• Spark Driver • Executor
Spark Driver
第46页
PySpark 工作模型
第47页
Spark Context
• Spark 调用的入口点 • SparkContext 是连接到
Spark 集群的代表 • 对于每一个活跃的
SparkContext 都有一个 JVM • Spark shells 以及 Zeppelin 将会创建Spark Context
第48页
Spark 编程模型
Resilient distributed datasets (RDDs) • 跨集群节点的分布式对象的集合,并在 内存中缓存 • 允许应用程序在内存中保存其工作集, 以利于高效重用 • 保留有MapReduce 的优秀的属性: 容 错、数据本地化、可伸缩性
由可靠的存贮系统的数据创建 RDD ,然后惊醒 转换以及其它的处理
• map/filter/groupBy/join transformations
• count/reduce/collect/save actions return results
第49页
RDD 持久性
• 缓存或者在内存中保持数据的持久性 • 方法
• 小的 RDD -> cache()
• MEMORY_ONLY
• 大的 RDD -> persist()
• MEMORY_ONLY • MEMORY_ONLY_SER • MEMORY_AND_DISK • MEMORY_AND_DISK_SER • DISK_ONLY • MEMORY_ONLY_2, MEMORY_AND_DISK2 • OFF_HEAP (experimental)
第50页
通过 DataFrames 扩展 RDD
• 按列存储的分布式数据组 织的集合
• 现有的 RDD API 的扩展
• 优化查询执行
RDD
第51页
DataFrame API
数据过滤(Filtering Data) - select, ‘$’, where, filter
数据聚合(Aggregating Data) - groupBy, summarize
输入/输出(Input/Output) - read, write, sql
第52页
使用Spark SQL从更多的数据源中加载数据
在 spark-packages.org 有更多的资源
第53页
Spark API 的进化
第54页
Spark API 的进化 :跨语言的等价性能
第55页
Datasets (Spark 1.6)
• 一种在Spark SQL 的优化引擎上使 用RDDs 的方法
• 专用的编码器实现对象的序列化, 用于处理或者网络传输 (不同于 Java 的序列化)
• 编码器允许 Spark 完成诸如过滤、 排序和对没有反序列化的对象进行 散列 (Hash)
目前的PySpark 还不支持这个特性,但是许多DataSets 的特性已经存在于Python 语言之中
第56页
NUMBA in Spark
开源许可 一个Python 的JIT 实现了Python 矩阵/数学运算的子集 提供了GPU 加速的能力
第57页
在Spark 环境下使用 CUDA Python
第58页
运行的原理
第59页
Ipython/Jupyter notebook
第60页
真实世界中的Spark 应用
第65页
Spark 的学习资源
第66页
学习资源 - 书、培训课程
https://www.amazon.com/S park-Python-DevelopersAmit-
Nandi/dp/1784399698/ref=s r_1_1?ie=UTF8&qid=14685
43785&sr=81&keywords=spark+python
https://www.edx.org/xseries/datascience-engineering-apache-spark
第67页
学习资源 –数据
公共数据 免费使用 与AWS 环境集成
https://aws.amazon.com/cn/public-data-sets/
第68页
总结
Spark 已经成为大数据处理的关键技术 使用Python 开发基于Spark 的应用是一个好的选择
l 很少的代码就可以实现 Map-Reduce、SQL、Graphs、ML等
数据科学 (Data-science) 将是未来应用开发的一个主要趋势
时不我待!!
第69页
- 王守仁
第70页
感谢