AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Spark展望&Spark程序开发(入门教程) by 费良宏@AWS

发布者 big_data
发布于 1473209496579  浏览 5077 关键词 大数据 
分享到

第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页

感谢



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。