更新时间:2022-07-19 GMT+08:00

使用External Shuffle Service提升性能

操作场景

Spark系统在运行含shuffle过程的应用时,Executor进程除了运行task,还要负责写shuffle数据,给其他Executor提供shuffle数据。当Executor进程任务过重,导致GC而不能为其他Executor提供shuffle数据时,会影响任务运行。

External shuffle Service是长期存在于NodeManager进程中的一个辅助服务。通过该服务来抓取shuffle数据,减少了Executor的压力,在Executor GC的时候也不会影响其他Executor的任务运行。

操作步骤

  1. 在NodeManager中启动External shuffle Service。
    1. 通过MRS Manager页面(可参考登录MRS Manager)的“服务管理 > Yarn > 服务配置”页面的“Yarn > 自定义”在“yarn-site.xml”中添加如下配置项:
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>spark_shuffle</value>
      </property>
      <property>
          <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>
          <value>org.apache.spark.network.yarn.YarnShuffleService</value>
      </property>

      配置参数

      描述

      yarn.nodemanager.aux-services

      NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。

      yarn.nodemanager.aux-services.spark_shuffle.class

      NodeManager中辅助服务对应的类。

    2. 添加依赖的jar包。

      拷贝“${SPARK_HOME}/lib/spark-1.5.1-yarn-shuffle.jar”“${HADOOP_HOME}/share/hadoop/yarn/lib/”目录下。

    3. 重启NodeManager进程,也就启动了External shuffle Service。
  2. Spark应用使用External shuffle Service。
    • 在客户端的安装目录“/Spark/spark/conf/spark-defaults.conf”中必须添加如下配置项:
      spark.shuffle.service.enabled   true
      spark.shuffle.service.port      7337

      配置参数

      描述

      spark.shuffle.service.enabled

      NodeManager中一个长期运行的辅助服务,用于提升Shuffle计算性能。默认为false,表示不启用该功能。

      spark.shuffle.service.port

      Shuffle服务监听数据获取请求的端口。可选配置,默认值为“7337”

      1.如果“yarn.nodemanager.aux-services”配置项已存在,则在value中添加“spark_shuffle”,且用逗号和其他值分开。

      2.“spark.shuffle.service.port”的值需要和上面“yarn-site.xml”中的值一样。