Apache Spark 是一个功能强大的开源处理引擎, 最初由 Matei Zaharia 开发, 是加州大学伯克利分校博士论文的一部分. Spark 的第一个版本于 2012 年发布. 从那时起, 2013 年, Zaharia 共同创立并成为 Databricks 的首席技术官; 他还在麻省理工学院担任斯坦福大学教授. 与此同时, Spark 代码库被捐赠给了 Apache Software Foundation, 并成为其旗舰项目.
Apache Spark 快速, 易用, 允许您解决各种复杂的数据问题, 无论是半结构化, 结构化, 流媒体和 / 或机器学习 / 数据科学. 它还已成为大数据领域最大的开源社区之一, 拥有来自 250 多个组织的 1,000 多名贡献者, 以及遍布全球 570 多个地点的 300,000 多名 Spark Meetup 社区成员.
在本章中, 我们将为理解 Apache Spark 提供入门知识. 我们将解释 Spark Jobs 和 API 背后的概念, 介绍 Spark 2.0 架构, 并探索 Spark 2.0 的功能.
什么是 Apache Spark?
Spark 作业和 API
回顾弹性分布式数据集(RDD), 数据框架和数据集
审查 Catalyst Optimizer 和 Project Tungsten
回顾 Spark 2.0 架构
什么是 Apache Spark?
Apache Spark 是一个开源强大的分布式查询和处理引擎. 它提供了 MapReduce 的灵活性和可扩展性, 但速度要快得多: 当数据存储在内存中时, 比 Apache Hadoop 快 100 倍, 访问磁盘时最多可达 10 倍.
Apache Spark 允许用户轻松读取, 转换和聚合数据, 以及训练和部署复杂的统计模型. Spark API 可以用 Java,Scala,Python,R 和 SQL 访问. Apache Spark 可用于构建应用程序或将它们打包为要部署在集群上的库, 或通过笔记本交互式执行快速分析(例如, Jupyter,Spark-Notebook,Databricks 笔记本和 Apache Zeppelin).
Apache Spark 是许多数据分析师, 数据科学家或研究人员熟悉的库, 他们使用过 Python 的 pandas 或 R 的 data.frames 或 data.tables. 值得注意的是, 尽管 Spark Data DataFrames 对于 pandas 或 data.frames / data.tables 用户来说很熟悉, 但是存在一些差异, 所以请调整您的期望. 具有更多 SQL 背景的用户也可以使用该语言来调整其数据. 此外, Apache Spark 提供了几种已经实现和调优的算法, 统计模型和框架: 用于机器学习的 MLlib 和 ML, 用于图形处理的 GraphX 和 GraphFrames, 以及 Spark Streaming(DStreams 和 Structured). Spark 允许用户在同一个应用程序中无缝地组合这些库.
Apache Spark 可以轻松地在笔记本电脑上本地运行, 但也可以通过 YARN 或 Apache Mesos 轻松部署在独立模式下 - 在本地群集或云端. 它可以从各种数据源读取和写入, 包括(但不限于)HDFS,Apache Cassandra,Apache HBase 和 S3.
图片. PNG
参考: Apache Spark is the Smartphone of Big Data
什么是 Apache Spark?
在本节中, 我们将简要介绍 Apache Spark Jobs 和 API. 为后续的 Spark 2.0 架构部分打基础.
执行过程(Execution process)
任何 Spark 应用程序都会在主节点上开始单个驱动程序进程 (可以包含多个作业), 然后将执行程序进程(包含多个任务) 分配到多个工作节点, 如下图所示:
图片. PNG
驱动程序进程根据为给定作业生成的图表确定指向执行程序节点的任务进程的数量和组成. 注意,
任何工作节点都可以从许多不同的作业中执行任务.
Spark 作业与直接非循环图 (DAG direct acyclic graph) 中组织的对象依赖关系链相关联, 例如从 Spark UI 生成的以下示例. Spark 可以优化调度 (例如, 确定所需的任务和工作人员数量) 以及执行这些任务:
图片. PNG
有关 DAG 调度程序的更多信息, 请参阅 http://bit.ly/29WTiK8.
弹性分布式数据集(Resilient Distributed Dataset)
Apache Spark 围绕称为 Resilient Distributed Datasets(简称 RDD)的不可变 Java 虚拟机 (JVM) 对象的分布式集合构建. 在我们使用 Python 时, 重要的是要注意 Python 数据存储在这些 JVM 对象中. 更多这方面将在随后的 RDD 和 DataFrames 章节中讨论. 这些对象允许任何作业非常快速地执行计算. RDD 是针对, 缓存和存储在内存中计算的: 与 Apache Hadoop 等其他传统分布式框架相比, 这种方案可以使计算速度提高数个数量级.
DataFrames
与 RDD 一样, DataFrame 是在集群中的节点之间分布的不可变数据集合. 但是, 与 RDD 不同, DataFrames 中的数据被组织到命名列中.
如果您熟悉 Python 的 pandas 或 R data.frames, 这是一个类似的概念.
DataFrames 旨在使大型数据集处理变得更加容易. 它们允许开发人员正式化数据结构, 允许更高级别的抽象; 从这个意义上讲, DataFrames 类似于关系数据库世界中的表. DataFrames 提供了一个特定于域的语言 API 来操作分布式数据, 并使 Spark 可以被更广泛的受众访问, 而不仅仅是专业数据工程师.
DataFrames 的主要优点之一是 Spark 引擎最初构建逻辑执行计划, 并根据成本优化程序确定的物理计划执行生成的代码. 与 Java 或 Scala 相比, Python 上的 RDD 可能明显更慢, DataFrames 的引入使所有语言的性能均衡.
数据集
在 Spark 1.6 中引入, Spark 数据集的目标是提供一个 API, 允许用户轻松地表达域对象的转换, 同时还提供强大的 Spark SQL 执行引擎的性能和优势. 不幸, 在撰写本书时, 数据集仅在 Scala 或 Java 中可用. 当它们在 PySpark 中可用时, 我们将在以后的版本中介绍它们. 但由于 Python 的动态特性, 数据集 API 的已经可用(即您可以通过名称自然地访问行的字段 row.columnName),R 也类似.
Catalyst Optimizer
Spark SQL 是 Apache Spark 中涉及技术最多的组件之一, 因为它支持 SQL 查询和 DataFrame API. Spark SQL 的核心是 Catalyst Optimizer. 优化器基于函数式编程结构, 设计时考虑了两个目的: 为 Spark SQL 添加新的优化技术和功能, 并允许外部开发人员扩展优化器(例如, 添加特定于数据源的规则, 支持对于新数据类型, 等等):
有关更多信息, 请查看 Deep Dive 到 Spark SQL 的 https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst-optimizer.html
和 Apache Spark DataFrames: 简单快速的结构化数据分析(https://pages.databricks.com/Spark-DataFrames-Structured-Data.html)
图片. PNG
Project Tungsten
Tungsten 是 Apache Spark 执行引擎的伞形项目的代号. 该项目专注于改进 Spark 算法, 以便更有效地使用内存和 CPU, 从而将现代硬件的性能推向极限.
该项目的工作重点包括:
显式管理内存, 以消除 JVM 对象模型和垃圾收集的开销
设计利用内存层次结构的算法和数据结构
在运行时生成代码, 以便应用程序可以利用现代编译器并优化 CPU
消除虚拟函数调度, 以便减少了多个 CPU 调用
利用低级编程 (例如, 将即时数据加载到 CPU 寄存器) 来加速内存访问并优化 Spark 的引擎以有效地编译和执行简单的循环
有关更多信息, 请参阅 Project Tungsten: 将 Apache Spark Closer 引入裸机(https://databricks.com/blog/2015/04/28/project-tungsten-bringing-spark-closer-to-bare-metal.html
- )
- https://spark-summit.org/2015/events/deep-dive-into-project-tungsten-bringing-spark-closer-to-bare-metal/
)和 https://databricks.com/blog/2016/05/23/apache-spark-as-a-compiler-joining-a-billion-rows-per-second-on-a-laptop.html.
作为一种编译器接合 - A - 数十亿行每秒上 - A-laptop.HTML)
来源: http://www.jianshu.com/p/c883f8c46c5f