Apache Spark 的群集配置优化
本文介绍如何在 Azure HDInsight 上优化 Apache Spark 群集的配置,以获得最佳性能。
概述
根据 Spark 群集工作负荷,用户可能认为某个非默认 Spark 配置更能优化 Spark 作业执行。 使用示例工作负载执行基准测试,以验证任何非默认群集配置。
下面是一些可调整的常见参数:
参数 | 说明 |
---|---|
--num-executors | 设置适当的执行程序数量。 |
--executor-cores | 设置每个执行程序的核心数。 通常应使用中等大小的执行程序,因为其他进程会占用部分可用内存。 |
--executor-memory | 设置每个执行程序的内存大小,用于控制 YARN 上的堆大小。 留一些内存用于执行开销。 |
选择正确的执行程序大小
在决定执行程序配置时,请考虑 Java 垃圾回收 (GC) 开销。
通过以下方式减小执行程序大小:
- 将堆大小减至 32 GB 以下,使 GC 开销 < 10%。
- 减少内核数,使 GC 开销 < 10%。
通过以下方式增加执行程序大小:
- 减少执行程序之间的通信开销。
- 在较大的群集(> 100 个执行程序)上减少执行程序 (N2) 之间打开的连接数。
- 增加堆大小,以容纳占用大量内存的任务。
- 可选:减少每个执行程序的内存开销。
- 可选:通过超额订阅 CPU 来增加使用率和并发性。
选择执行程序大小时,一般遵循以下做法:
- 最开始,每个执行程序 30 GB,并分发可用的计算机内核。
- 对于较大的群集(> 100 个执行程序),增加执行程序内核数。
- 基于试运行和上述因素(比如 GC 开销)修改大小。
运行并发查询时,请考虑:
- 最开始,每个执行程序 30 GB,并分发所有计算机内核。
- 通过超额订阅 CPU,创建多个并行 Spark 应用程序(延迟缩短大约 30%)。
- 跨并行应用程序分布查询。
- 基于试运行和上述因素(比如 GC 开销)修改大小。
有关使用 Ambari 配置执行程序的更多信息,请参阅 Apache Spark 设置 - Spark 执行程序。
通过查看时间线视图,监视查询性能中的离群值或其他性能问题。 还可以查看 SQL 图、作业统计信息等。 有关使用 YARN 和 Spark History Server 调试 Spark 作业的信息,请参阅调试 Azure HDInsight 中运行的 Apache Spark 作业。 有关使用 YARN Timeline Server 的技巧,请参阅访问 Apache Hadoop YARN 应用程序日志。
某些执行程序或节点上的任务速度较慢
有时,一个或几个执行程序的速度比其他执行程序要慢,执行任务时花费的时间也长得多。 这种缓慢通常发生在较大的群集(超过 30 个节点)上。 在这种情况下,应将工作划分成更多任务,以便计划程序可以补偿速度较慢的任务。 例如,任务数量应至少为应用程序中执行程序内核数的两倍。 也可以使用 conf: spark.speculation = true
对任务启用推理执行。