「闻数起舞」为什么Apache Spark速度很快以及如何使其运行更快( 三 )


Spark SQL依靠复杂的管道来优化其需要执行的作业 , 并且在此过程的所有步骤中都使用其优化器Catalyst 。这种优化机制是Spark天文性能及其有效性的主要原因之一 。 第三部分:将Spark推向新的高度
现在 , 我们检查了Spark的复杂优化过程 , 很明显 , Spark依靠精心打造的机制来达到惊人的速度 。但是认为无论您如何做 , Spark都能为您带来最佳效果 , 这是一个错误 。
尤其是从另一个数据处理工具迁移时 , 很容易做出假设 。与您一直使用的工具相比 , 处理时间减少了50% , 这可能使您相信Spark正在全速运行 , 并且您无法进一步减少执行时间 。事实是 , 可以 。
通过上面讨论的过程 , Spark SQL及其优化程序Catalyst可以自行完成奇迹 , 但是通过一些曲折和技巧 , 您可以将Spark提升到一个新的水平 。因此 , 让我们讨论如何从频谱的末端优化Spark作业总是在引擎盖下看一看
使用Spark时要记住的第一件事是 , 执行时间本身并没有多大的意义 。要评估作业的绩效 , 重要的是要知道幕后运行情况 。在开发和测试阶段 , 您需要经常使用explain函数来查看要分析的语句生成的物理计划 , 而对于深入分析 , 您可以添加扩展标志以查看Spark的不同计划 。选择了SQL(从解析的逻辑计划到物理计划) 。这是检测潜在问题和不必要阶段的好方法 , 而无需实际执行作业 。 知道何时使用缓存
处理大型数据集和复杂作业时 , 缓存非常重要 。它允许您保存计划在后续阶段中使用的数据集 , 以使Spark不再从头开始创建它们 。这种优势有时使开发人员陷入"超高速缓存"状态 , 从而使高速缓存的数据集成为负担 , 使您的工作变慢而不是对其进行优化 。要确定需要缓存的数据集 , 您必须准备整个工作 , 然后通过测试尝试找出哪些数据集真正值得缓存 , 以及在什么时候可以不持久化以释放它们在内存中占据的空间 。已缓存 。有效地使用缓存可以使Spark更快地运行某些计算10倍 , 这可以大大减少作业的总执行时间 。 了解您的集群和数据
充分利用Spark的关键要素是根据您的集群微调其配置 。在某些情况下 , 可能要依靠默认配置 , 但是通常您离获得更令人印象深刻的结果仅是一个参数 。选择合适的执行程序数量 , 每个执行程序的内核数量以及每个执行程序的内存大小都是可以极大地影响您的工作性能的要素 , 因此请毫不犹豫地执行基准测试以查看是否可以使用某些参数 。优化 。
最后 , 要牢记的一个重要因素是 , 您需要知道要处理的数据以及每次操作的期望 。如果一个阶段花费的时间过长 , 即使它处理的数据少于其他阶段 , 那么您应该检查另一侧正在发生的事情 。在执行繁重的代码和运行代码时 , Spark很棒 , 但是只有您可以检测到与您定义工作方式有关的业务相关问题 。
(本文翻译自Mahdi Karabiben的文章《Why Apache Spark Is Fast and How to Make It Run Faster》 , 参考:https://towardsdatascience.com/why-apache-spark-is-fast-and-how-to-make-it-run-faster-9d31bf3eae04)


推荐阅读