速度:为什么Apache Spark速度很快以及如何使其运行更快

如果在开发和实施Spark作业时应用所有这些规则 , 那么破纪录的处理工具将以惊人的结果回报您 。
这些建议仅仅是掌握Apache Spark的第一步 。在接下来的文章中 , 我们将详细讨论其不同模块 , 以更好地了解Spark的功能 。
本文最初在INVIVOO的技术博客上发表 。
速度:为什么Apache Spark速度很快以及如何使其运行更快
文章图片

文章图片

> Apache Spark logo
Spark可以快速完成任务 。自从2010年首次引入该框架以来 , 它一直是该框架的主要卖点 。
提供基于内存的替代Map-Reduce极大地推动了大数据生态系统 , 并且在过去几年中 , 这代表了公司采用大数据系统的主要原因之一 。
凭借其广泛的用例 , 易用性和记录设置功能 , 当涉及大数据架构中的数据处理时 , Spark迅速成为每个人的首选框架 。第一部分:Spark ABC
Spark的关键组件之一是它的SparkSQL模块 , 它可以将批处理Spark作业编写为类似SQL的查询 。为此 , Spark依靠复杂的机制在后台运行 , 以通过执行引擎运行这些查询 。该机制的核心是Catalyst:Spark的查询优化器 , 它通过生成作业的物理执行计划来完成许多繁重的工作 。
即使此过程的每一步都经过精心改进 , 以优化工作的各个方面 。在链的末端 , 您仍然可以做很多事情 , 以使您的Spark作业运行得更快 。但是 , 在此之前 , 让我们深入探讨Catalyst的工作方式 。首先 , 让我们从基础开始
Spark提供了多种与其SparkSQL接口进行交互的方式 , 主要的API是DataSet和DataFrame 。这些高级API建立在面向对象的RDD API之上 。并且在保留某些主要功能(例如使用模式)的同时保留了其主要特征 。(有关详细比较 , 请参阅Databricks博客上的本文) 。
使用的API的选择主要取决于您使用的语言 。DataSet仅在Scala / Java中可用 , 并且自Spark 2.0发行以来 , 已为这些语言替换DataFrame 。每个人都有一定的特权和优势 。好消息是 , Spark在后台使用了相同的执行引擎来运行您的计算 , 因此您可以轻松地从一个API切换到另一个API , 而不必担心执行级别上会发生什么 。
也就是说 , 无论您使用哪种API , 提交作业时都会经过统一的优化过程 。Spark如何看待世界
您可以在Spark应用程序中执行的操作分为两种类型:
· Transform 转换:这些操作在应用于RDD时 , 将返回对通过转换创建的新RDD的引用 。一些最常用的转换是过滤器和映射 。(以下是可用转换的完整列表)
· Action 行动:当应用于RDD时 , 这些操作将返回非RDD值 。一个很好的例子是count操作 , 该操作将RDD中的元素数返回给Spark驱动程序 , 或者收集一个将RDD的内容发送给驱动程序的操作 。(请参阅此链接以获取可在RDD上执行的操作的完整列表) 。
由于这些API基于RDD机制构建 , 因此DataFrame和DataSet操作分为相同的类别 。
接下来要做的区分是以下两种类型的转换:
· 窄转换:将这些转换应用于RDD时 , 分区之间没有数据移动 。将该转换应用于RDD的每个分区的数据 , 并得到具有相同分区数的新RDD , 如下图所示 。例如 , 过滤器是一个狭窄的转换 , 因为将过滤器应用于每个分区的数据 , 并且所得数据表示新创建的RDD中的一个分区 。
速度:为什么Apache Spark速度很快以及如何使其运行更快
文章图片

文章图片

> A narrow transformation (Source: Databricks)
· 广泛的转换:这些转换需要在分区之间进行数据移动 , 也就是所谓的随机播放 。数据跨网络移动 , 新创建的RDD的分区基于多个输入分区的数据 , 如下所示 。一个很好的例子就是sortBy操作 , 其中所有输入分区中的数据都在生成带有新分区的RDD的过程中根据特定列进行排序 。


推荐阅读