纱线上的 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 |性能调优和优化的主要内容,如果未能解决你的问题,请参考以下文章

Mysql数据库调优和性能优化

转载Apache Spark Jobs 性能调优

Apache Spark Jobs 性能调优

转载Apache Spark Jobs 性能调优

[在线交流]云计算生产环境架构性能调优和迁移套路总结

数据库调优和数据库查询优化有啥区别? [关闭]