Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文概述了优化 Azure HDInsight 上的 Apache Spark 应用程序的策略。
概述
可能面临以下常见场景
- 同样的 Spark 任务在同一 HDInsight 群集中的执行速度比以前更慢。
- 与本地或其他第三方服务提供商相比,Spark 作业在 HDInsight 集群中的运行速度较慢。
- Spark 作业在一个 HDI 群集中运行时的执行速度比在另一个 HDI 群集时慢
Apache Spark 作业的性能由多种因素而定。 这些性能因素包括:
- 数据的存储方式
- 群集的配置方式
- 处理数据时使用的操作。
- 异常的 Yarn 服务
- 由于执行程序大小不正确和 OutOfMemoryError 而导致的内存约束
- 任务过多或任务过少
- 数据倾斜导致了一些繁重的任务或缓慢的任务
- 性能较差的节点中的任务速度较慢
步骤 1:检查 yarn 服务是否正常
- 转到 Ambari UI:
- 检查 ResourceManager 或 NodeManager 是否发出警报
- 检查 YARN > 中 ResourceManager 和 NodeManager 的状态:所有 NodeManager 都应处于“已启动”状态,且只有“活动” ResourceManager 应处于“已启动”状态
检查 Yarn UI 是否可通过
https://YOURCLUSTERNAME.azurehdinsight.cn/yarnui/hn/cluster访问检查 ResourceManager 日志中
/var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log是否存在任何异常或错误
请参阅 Yarn 常见问题 以获得更多信息
步骤 2:将新应用程序资源与 YARN 可用资源进行比较
转到“Ambari UI”>“YARN”>“摘要”,检查 ServiceMetrics 中的“群集内存”
详细检查 yarn 队列指标:
- 转到 Yarn UI,通过
https://YOURCLUSTERNAME.azurehdinsight.cn/yarnui/hn/cluster/scheduler检查 Yarn 调度器指标 - 或者,你可以通过 Yarn REST API 检查 Yarn 调度器指标。 例如,
curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.cn/ws/v1/cluster/scheduler"。 对于 ESP,应使用域管理员用户。
- 计算新应用程序的总资源
- 所有执行程序资源:
spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores。 有关详细信息,请参阅 spark 执行程序配置 - ApplicationMaster
- 在群集模式下,使用
spark.driver.memory和spark.driver.cores - 在客户端模式下,使用
spark.yarn.am.memory+spark.yarn.am.memoryOverhead和spark.yarn.am.cores
- 在群集模式下,使用
注意
yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb
- 将您的新应用程序总资源与指定队列中的 YARN 可用资源进行比较
步骤 3:跟踪 Spark 应用程序
我们需要通过 Spark UI 或 Spark History UI 识别以下症状:
- 哪个阶段较慢
- “阶段”选项卡中的事件时间线中是否充分利用了总执行程序 CPU v 核心
- 在使用 spark sql 时,SQL 选项卡中的物理计划是什么?
- DAG 在一个阶段中是否太长
- 观察“阶段”选项卡中的任务指标(输入大小、随机写入大小、GC 时间)
有关详细信息,请参阅监视 Spark 应用程序
步骤 4:优化 Spark 应用程序
有许多优化可帮助你克服这些难题,例如缓存和允许数据倾斜。
在下面的每篇文章中,可找到 Spark 优化的不同方面的信息。
优化 Spark SQL 分区
-
spark.sql.shuffle.partitions默认为 200。 在重排数据以便进行联接或聚合时,我们可以根据业务需求进行调整。 -
spark.sql.files.maxPartitionBytes在 HDI 中默认为 1G。 读取文件时,要打包到单个分区的最大字节数。 仅当使用基于文件的源(如 Parquet、JSON 和 ORC)时,此配置才有效。 - Spark 3.0 中的 AQE。 请参阅自适应查询执行
后续步骤
- 在 Azure HDInsight 上调试运行的 Apache Spark 作业
- 管理 HDInsight 上 Apache Spark 群集的资源
- 配置 Apache Spark 设置