【pyspark学习从入门到精通2】理解pyspark_2

Apache Spark 2.0架构及优化技术解析

目录

Catalyst 优化器

Project Tungsten

Spark 2.0 架构

统一 Datasets 和 DataFrames

引入 SparkSession

Tungsten 第二阶段


Catalyst 优化器

Spark SQL 是 Apache Spark 技术含量最高的组件之一,因为它为 SQL 查询和 DataFrame API 提供动力。Spark SQL 核心是 Catalyst 优化器。这个优化器基于函数式编程构造,设计时考虑了两个目的:一是简化向 Spark SQL 添加新的优化技术和特性,二是允许外部开发者扩展优化器(例如,添加特定数据源的规则、对新数据类型的支持等):

Project Tungsten

Tungsten 是 Apache Spark 执行引擎的总称项目代号。该项目专注于改进 Spark 算法,使其更有效地使用内存和 CPU,将现代硬件的性能推向极限。
这个项目的努力重点包括:
- 显式管理内存,以消除 JVM 对象模型和垃圾回收的开销
- 设计利用内存层次结构的算法和数据结构
- 运行时生成代码,使应用程序能够利用现代编译器优化 CPU
- 消除虚拟函数分派,减少多个 CPU 调用
- 利用低级编程(例如,将数据直接加载到 CPU 寄存器)加速内存访问,并优化 Spark 的引擎,以高效编译和执行简单循环

Spark 2.0 架构

Apache Spark 2.0 的引入是 Apache Spark 项目的最新重大版本,基于过去两年平台开发的关键学习成果:
Apache Spark 2.0 版本的三个主要主题围绕着性能增强(通过 Tungsten 第二阶段)、引入结构化流,以及统一 Datasets 和 DataFrames。即使目前 Datasets 仅在 Scala 和 Java 中可用,我们也将描述 Datasets,因为它们是 Spark 2.0 的一部分。

统一 Datasets 和 DataFrames

在上一节中,我们提到 Datasets(在撰写本书时)仅在 Scala 或 Java 中可用。然而,我们提供了以下背景,以更好地理解 Spark 2.0 的发展方向。
Datasets 在 2015 年作为 Apache Spark 1.6 版本的一部分引入。Datasets 的目标是提供类型安全的编程接口。这允许开发者使用编译时类型安全(即,在运行之前可以检查生产应用程序的错误)与半结构化数据(如 JSON 或键值对)一起工作。Python 没有实现 Dataset API 的部分原因是 Python 不是一种类型安全的语言。
同样重要的是,Datasets API 包含高级特定领域语言操作,如 sum()、avg()、join() 和 group()。这一特性意味着你拥有传统 Spark RDDs 的灵活性,但代码也更容易表达、阅读和编写。与 DataFrames 类似,Datasets 可以通过向查询计划器公开表达式和数据字段,并利用 Tungsten 的快速内存编码,来利用 Spark 的 Catalyst 优化器。

Spark API 的历史在以下图表中表示,注明了从 RDD 到 DataFrame 再到 Dataset 的发展进程:

DataFrame 和 Dataset API 的统一有可能造成向后兼容性的破坏性变化。这也是 Apache Spark 2.0 是一个主要版本发布(而不是 1.x 的次要版本,后者会尽量减少任何破坏性变化)的主要原因之一。正如你从下图中看到的,DataFrame 和 Dataset 都属于作为 Apache Spark 2.0 一部分引入的新 Dataset API:

如前所述,Dataset API 提供了一个类型安全、面向对象的编程接口。Datasets 可以通过向查询计划器公开表达式和数据字段,并利用 Project Tungsten 的快速内存编码,来利用 Catalyst 优化器。但是随着 DataFrame 和 Dataset 现在作为 Apache Spark 2.0 的一部分统一,DataFrame 现在是 Dataset 非类型化 API 的别名。更具体地说:
DataFrame = Dataset[Row]

引入 SparkSession

在过去,你可能需要分别使用 SparkConf、SparkContext、SQLContext 和 HiveContext 来执行你的各种 Spark 查询,分别用于配置、Spark 上下文、SQL 上下文和 Hive 上下文。SparkSession 本质上是这些上下文的组合,包括 StreamingContext。

例如,而不是这样写:
```python
df = sqlContext.read \
 .format('json').load('py/test/sql/people.json')
```
现在你可以这样写:
```python
df = spark.read.format('json').load('py/test/sql/people.json')
```
或者:
```python
df = spark.read.json('py/test/sql/people.json')
```
SparkSession 现在是读取数据、处理元数据、配置会话和管理集群资源的入口点。

Tungsten 第二阶段

当项目开始时,对计算机硬件景观的基本观察是,尽管 RAM 内存、磁盘以及(在一定程度上)网络接口的性能价格比有所提高,但 CPU 的性能价格比提升并不相同。尽管硬件制造商可以在每个插槽中放置更多的核心(即通过并行化提高性能),但核心速度并没有显著提高。
Project Tungsten 于 2015 年推出,目的是对 Spark 引擎进行重大改变,重点提高性能。这些改进的第一阶段集中在以下方面:
- 内存管理和二进制处理:利用应用程序语义显式管理内存,消除 JVM 对象模型和垃圾回收的开销
- 缓存感知计算:利用内存层次结构的算法和数据结构
- 代码生成:使用代码生成来利用现代编译器和 CPU

下图是更新后的 Catalyst 引擎,表示包括 Datasets 在内。正如你在图的右侧(成本模型的右侧)所看到的,代码生成被用于对选定的物理计划生成底层 RDDs:

作为 Tungsten 第二阶段的一部分,有向全阶段代码生成的推进。也就是说,Spark 引擎现在将在编译时为整个 Spark 阶段生成字节码,而不仅仅是针对特定的作业或任务。这些改进的主要方面包括:
- 无虚拟函数分派:这减少了可以对性能产生深远影响的多个 CPU 调用,当分派数十亿次时
- 中间数据在内存与 CPU 寄存器中:Tungsten 第二阶段将中间数据放入 CPU 寄存器中。这是从 CPU 寄存器而不是从内存中获取数据所需的周期数量减少了一个数量级
- 循环展开和 SIMD:优化 Apache Spark 的执行引擎,以利用现代编译器和 CPU 高效编译和执行简单循环的能力(与复杂的函数调用图相对)


 

About This Book, Learn why and how you can efficiently use Python to process data and build machine learning models in Apache Spark 2.0Develop and deploy efficient, scalable real-time Spark solutionsTake your understanding of using Spark with Python to the next level with this jump start guide, Who This Book Is For, If you are a Python developer who wants to learn about the Apache Spark 2.0 ecosystem, this book is for you. A firm understanding of Python is expected to get the best out of the book. Familiarity with Spark would be useful, but is not mandatory., What You Will Learn, Learn about Apache Spark and the Spark 2.0 architectureBuild and interact with Spark DataFrames using Spark SQLLearn how to solve graph and deep learning problems using GraphFrames and TensorFrames respectivelyRead, transform, and understand data and use it to train machine learning modelsBuild machine learning models with MLlib and MLLearn how to submit your applications programmatically using spark-submitDeploy locally built applications to a cluster, In Detail, Apache Spark is an open source framework for efficient cluster computing with a strong interface for data parallelism and fault tolerance. This book will show you how to leverage the power of Python and put it to use in the Spark ecosystem. You will start by getting a firm understanding of the Spark 2.0 architecture and how to set up a Python environment for Spark., You will get familiar with the modules available in PySpark. You will learn how to abstract data with RDDs and DataFrames and understand the streaming capabilities of PySpark. Also, you will get a thorough overview of machine learning capabilities of PySpark using ML and MLlib, graph processing using GraphFrames, and polyglot persistence using Blaze. Finally, you will learn how to deploy your applications to the cloud using the spark-submit command., By the end of this book, you will have established a firm understanding of the Spark Python API and how it can be used t
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木流年追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值