纱线上的星火工作|性能调优&优化

时间:2017-11-11 13:54:13

标签: hadoop apache-spark apache-spark-sql spark-streaming

优化部署在基于纱线的群集上的Spark Jobs的最佳方法是什么?

根据配置而非代码级别查找更改。我的问题是经典的设计级问题,应该使用什么方法来优化在Spark Streaming或Spark SQL上开发的作业。

2 个答案:

答案 0 :(得分:0)

有一种说法是BigData很神奇,一旦部署到BigData集群,你的代码将像梦一样工作。

每个新手都有相同的信念:)还有一种误解,即通过网络博客提供的配置可以很好地解决每个问题。

在没有深入了解群集的情况下,优化或调优Hadoop上的作业没有捷径。

但考虑到以下方法,我确信您将能够在几个小时内优化您的工作。

我更喜欢运用纯粹的科学方法来优化乔布斯。可以按照以下步骤专门开始优化作为基线的作业。

  1. 了解群集中配置的块大小。
  2. 检查容器/执行程序可用的最大内存限制。
  3. 在可用于群集的VCores
  4. 在Spark流式实时作业的情况下,专门优化数据速率。 (这是Spark-streaming中最棘手的公园)
  5. 优化时考虑GC设置。
  6. 在代码级别总是存在优化空间,也需要考虑。
  7. 根据数据速率,根据步骤1,根据群集配置优化控制块大小。与Spark类似,可以计算batchinterval / blockinterval
  8. 现在最重要的步骤来到这里。我正在分享的知识更具体到实时用例,如Spark流,SQL和Kafka。

    首先,您需要知道您的工作在哪些数字或消息/记录中效果最佳。之后,您可以控制特定数量的速率并启动基于配置的实验以优化作业。就像我在下面所做的那样,能够以高吞吐量解决性能问题。

    Performance Optimization Experiments

    我已经阅读了Spark Configurations中的一些参数,并检查了对我的工作的影响,而不是我上面的网格,并以相同的工作开始实验,但有五个不同的配置版本。在三个实验中,我能够优化我的工作。上图中突出显示的绿色是我的工作优化的神奇公式。

    尽管相同的参数可能对类似的用例非常有用,但显然这些参数并不涵盖所有内容。

答案 1 :(得分:0)

假设应用程序正常工作,即内存配置已得到处理,我们至少有一次成功运行应用程序。我通常会寻找遗嘱执行者的未充分利用并尽量减少它。以下是值得一提的寻找提高集群/执行者利用率的机会的常见问题:

  1. 在驱动程序与执行程序中完成了多少工作?请注意,当主要的spark应用程序线程在驱动程序中时,执行程序会消耗时间。
  2. 您的应用程序每个阶段的任务数量多于核心数量吗?如果没有,这些核心在这个阶段将不会做任何事情。
  3. 你的任务是否统一,但不是倾斜的。由于火花从一个阶段到另一个阶段进行计算(除了一些可以并行的阶段),大部分任务都可以完成,但阶段仍然在运行,因为其中一个偏斜的任务仍然存在。
  4. 无耻插件(作者)Sparklens https://github.com/qubole/sparklens可以自动为您解答这些问题。

    有些事情并非特定于应用程序本身。假如您的应用程序必须随机播放大量数据,请选择具有更好磁盘和网络的计算机。对数据进行分区以避免完整数据扫描。使用像镶木地板或ORC这样的列式格式,以避免为您不需要的列提取数据。列表很长,有些问题已知,但还没有很好的解决方案。