启用应用程序自动缩放

并非总是能够提前估算 Spark 应用程序的资源需求 (Spark 执行程序数) ,因为这些需求可能根据输入数据集的大小而有所不同。

在此情况下,您可以提交具有自动缩放功能的 Spark 应用程序,这将根据应用程序的需求自动确定应用程序所需的执行程序数。 您可以通过将配置设置 ae.spark.autoscale.enable=true 添加到现有应用程序配置,为 Spark 应用程序启用基本自动缩放。

目前,由 Apache Spark 支持的 Analytics Engine 仅在非 FIPS 模式下支持 X86 体系结构的自动扩展。

提交具有基本自动缩放功能的应用程序

在启用自动缩放的情况下提交应用程序的步骤与在不使用自动缩放的情况下提交应用程序的步骤相同。 唯一的区别在于您需要将配置设置 ae.spark.autoscale.enable=true 添加到应用程序有效内容。

  1. 提交 Spark 应用程序

  2. 使用以下样本 JSON 有效内容作为示例来启用基本自动缩放:

    示例 1:

    {
      "application_details": {
        "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
        "arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"]
       },
       "conf": {
         "ae.spark.autoscale.enable":"true"
       }
    }
    

    示例 2:

    {
    "application_details": {
        "application": "/opt/ibm/spark/examples/jars/spark-examples*.jar",
        "arguments": ["1"],
        "class": "org.apache.spark.examples.SparkPi",
        "conf": {
            "ae.spark.autoscale.enable": "true",
            "spark.dynamicAllocation.initialExecutors": "0",
            "spark.dynamicAllocation.minExecutors": "1",
            "spark.dynamicAllocation.maxExecutors": "10",
            "ae.spark.executor.count": 1
        }
    }
    }
    

自动缩放应用程序配置

您可以使用以下配置设置来进一步控制自动缩放执行程序数。

表 1. 自动缩放的配置设置
配置设置 描述 缺省值
ae.spark.autoscale.enable 指示应用程序将根据应用程序的需求以及设置的任何其他自动缩放配置自动缩放。 如果在实例级别指定,那么实例中的所有应用程序都将自动缩放。
spark.dynamicAllocation.initialExecutors 指定要创建的初始执行程序数,而不考虑 Spark 应用程序提出的任何需求 0
spark.dynamicAllocation.minExecutors 指定要维护的执行程序的最小数目,而不考虑 Spark 应用程序的任何需求 0
spark.dynamicAllocation.maxExecutors 指定要创建的最大执行程序数,而不考虑 Spark 应用程序的任何需求 2
ae.spark.autoscale.scaleupDemandPercentage 指定 Spark 应用程序需要的应由应用程序自动缩放器实现的执行程序百分比。 例如,如果在特定阶段, Spark 应用程序请求 10 个执行程序,并且此配置的值设置为 50% ,那么应用程序自动缩放器将增大 5 执行程序的执行程序数。 此配置的缺省值为 100% ,这基本上意味着应用程序的需求所请求的任何数目的执行程序都可以由应用程序自动缩放器添加。 1
ae.spark.autoscale.scaledownExcessPercentage 指定要由应用程序自动缩放器除去的由 Spark 应用程序挂起的空闲执行程序的百分比。 例如,如果在 Spark 应用程序中完成特定阶段后,有 20 个空闲执行程序被应用程序挂起,并且此配置的值设置为 25% ,那么应用程序自动缩放器将由 4 执行程序缩减应用程序中的执行程序。 此配置的缺省值为 100% ,这意味着应用程序自动缩放器可以缩减所有空闲执行程序。 1
ae.spark.autoscale.frequency 应用程序自动缩放器在应用程序中向上或向下缩放执行程序的频率 (以秒为单位)。 10s

自动缩放应用程序有效内容的示例,其中显示应用程序可向上扩展或向下扩展至的执行程序数的下限和上限。

{
  "application_details": {
    "application": "cos://<application-bucket-name>.<cos-reference-name>/my_spark_application.py",
    "conf": {
      "ae.spark.autoscale.enable": "true",
      "spark.dynamicAllocation.initialExecutors": "0",
      "spark.dynamicAllocation.minExecutors": "1",
      "spark.dynamicAllocation.maxExecutors": "10",
      "spark.hadoop.fs.cos.<cos-reference-name>.endpoint": "s3.direct.us-south.cloud-object-storage.appdomain.cloud",
      "spark.hadoop.fs.cos.<cos-reference-name>.iam.api.key": "<iam-api-key-of-application-bucket>"
    }
  }
}

对实例启用自动缩放

缺省情况下,当您创建 Analytics Engine Standard 无服务器套餐的实例时,将禁用应用程序自动缩放。 如果要在实例级别对所有应用程序启用自动缩放,那么可以在创建实例时显式将 "ae.spark.autoscale.enable": "true" 设置为缺省 Spark 配置。