纱线上的 Spark Jobs |性能调优和优化
Posted
技术标签:
【中文标题】纱线上的 Spark Jobs |性能调优和优化【英文标题】:Spark Jobs on Yarn | Performance Tuning & Optimization 【发布时间】:2017-11-11 13:54:13 【问题描述】:优化部署在基于 Yarn 的集群上的 Spark 作业的最佳方法是什么? .
根据配置而不是代码级别查找更改。我的问题是经典的设计级别问题,应该使用什么方法来优化基于 Spark Streaming 或 Spark SQL 开发的作业。
【问题讨论】:
【参考方案1】:有一种说法认为 BigData 是神奇的,一旦部署到 BigData 集群,您的代码就会像梦一样工作。
每个新手都有相同的信念 :) 还有一种误解,认为网络博客上的给定配置可以很好地解决每个问题。
如果不深入了解您的集群,就没有通过 Hadoop 优化或调整作业的捷径。
但考虑到以下方法,我确信您将能够在几个小时内优化您的工作。
我更喜欢用纯粹的科学方法来优化乔布斯。可以专门按照以下步骤开始优化作业作为基线。
-
了解集群中配置的块大小。
检查容器/执行程序可用的最大内存限制。
在可用于集群的 VCore 下
专门针对 Spark 流式传输实时作业优化数据速率。 (这是 Spark-streaming 中最棘手的公园)
在优化时考虑 GC 设置。
代码级别始终存在优化空间,也需要加以考虑。
根据第 1 步的集群配置,根据数据速率优化控制块大小。像在 Spark 中一样,可以计算 batchinterval/blockinterval
现在最重要的步骤来了。我分享的知识更具体到实时用例,例如 Spark 流、SQL 和 Kafka。
首先,您需要知道在什么数量或消息/记录下您的工作最有效。之后,您可以控制该特定数字的速率并开始基于配置的实验以优化作业。就像我在下面所做的那样,能够以高吞吐量解决性能问题。
我从Spark Configurations 中读取了一些参数,并检查了对我的工作的影响,而不是我制作上述网格并以相同的工作开始实验,但有五个不同的配置版本。在三个实验中,我能够优化我的工作。上图中突出显示的绿色是我的工作优化的神奇公式。
虽然相同的参数可能对类似的用例很有帮助,但显然这些参数并不能涵盖所有内容。
【讨论】:
您好。我们社区中的许多人有时会说,每次他们看到关于软件工程师的性别假设时,他们都会担心人们会感到被排斥。我想知道,您能否尽量避免在您的帖子中添加面向男性的问候和代词,以营造一个更受欢迎的环境?谢谢。【参考方案2】:假设应用程序正常工作,即内存配置得到处理,并且我们至少成功运行了一次应用程序。我通常会寻找执行者的未充分利用并尝试将其最小化。以下是值得提出的常见问题,以寻找提高集群/执行器利用率的机会:
-
在驱动程序和执行程序中做了多少工作?请注意,当主 spark 应用程序线程在驱动程序中时,执行程序正在消磨时间。
您的应用程序每个阶段的任务是否多于内核数?否则,这些内核在此阶段将不会做任何事情。
您的任务是否一致,即没有倾斜。由于 spark 将计算从一个阶段移动到另一个阶段(除了一些可以并行的阶段),您的大多数任务可能已完成,但该阶段仍在运行,因为其中一个倾斜的任务仍然被搁置。
Shameless Plug(作者)Sparklens https://github.com/qubole/sparklens 可以自动为您回答这些问题。
有些事情并非特定于应用程序本身。假设您的应用程序必须洗牌大量数据,请选择具有更好磁盘和网络的机器。对数据进行分区以避免完整的数据扫描。使用 parquet 或 ORC 等列格式来避免为您一直不需要的列获取数据。清单很长,有些问题是已知的,但还没有好的解决方案。
【讨论】:
以上是关于纱线上的 Spark Jobs |性能调优和优化的主要内容,如果未能解决你的问题,请参考以下文章