Ativando o ajuste automático de escala do aplicativo
Nem sempre é possível estimar com antecedência os requisitos de recursos (número de executores Spark) de um aplicativo Spark, pois esses requisitos podem variar com base no tamanho do conjunto de dados de entrada.
Para auxiliá-lo nessa situação, você pode enviar um aplicativo Spark com ajuste automático de escala, que irá determinar automaticamente o número de executores requerido por um aplicativo com base na demanda do aplicativo. É possível ativar o
ajuste automático de escala básico para um aplicativo Spark incluindo a definição de configuração ae.spark.autoscale.enable=true na configuração do aplicativo existente.
Enviando um aplicativo com ajuste automático de escala básico
As etapas para enviar um aplicativo com ajuste automático de escala ativado são as mesmas que as etapas de envio de um aplicativo sem ajuste automático de escala. A única diferença é que é preciso incluir a definição de configuração ae.spark.autoscale.enable=true na carga útil do aplicativo.
- Envie um aplicativo Spark.
- Use a carga útil JSON de amostra a seguir como exemplo para ativar o ajuste automático de escala básico:
{ "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" } }
Configurações de aplicativos de ajuste automático de escala
É possível usar as definições de configuração a seguir para controlar ainda mais o ajuste automático de escala do número de executores.
| Definições de configuração | Descrição | Padrão |
|---|---|---|
ae.spark.autoscale.enable |
Sinaliza que o aplicativo irá fazer o ajuste automático de escala com base na demanda do aplicativo e em quaisquer outras configurações de ajuste automático de escala que forem definidas. Se especificado em nível de instância, todos os aplicativos na instância sofrerão ajuste automático de escala. | Não |
spark.dynamicAllocation.initialExecutors |
Especifica o número inicial de executores a serem criados, independentemente de qualquer demanda feita pelo aplicativo Spark | 0 |
spark.dynamicAllocation.minExecutors |
Especifica o número mínimo de executores a serem mantidos, independentemente de qualquer demanda feita pelo aplicativo Spark | 0 |
spark.dynamicAllocation.maxExecutors |
Especifica o número máximo de executores a serem criados, independentemente de qualquer demanda por parte do aplicativo Spark | 2 |
ae.spark.autoscale.scaleupDemandPercentage |
Especifica a porcentagem dos executores demandados pelo aplicativo Spark que deve ser cumprida pelo ajustador automático de escala do aplicativo. Por exemplo, se em um determinado estágio um aplicativo Spark solicitar 10 executores e o valor para essa configuração estiver definido para 50, o ajustador automático de escala do aplicativo aumentará o número de executores em cinco. O valor padrão dessa configuração é 100, o que basicamente significa que qualquer número de executores solicitados por uma demanda do aplicativo pode ser aumentado pelo ajustador automático de escala do aplicativo. | 100 |
ae.spark.autoscale.scaledownExcessPercentage |
Especifica a porcentagem dos executores inativos mantidos pelo aplicativo Spark que devem ser removidos pelo ajustador automático de escala do aplicativo. Por exemplo, se após a conclusão de um determinado estágio em um aplicativo Spark houver 20 executores inativos mantidos pelo aplicativo e o valor dessa configuração for 25, o ajustador automático de escala do aplicativo diminuirá os executores em quatro. O valor padrão para essa configuração é 100, o que significa que o ajustador automático de escala do aplicativo poderá remover todos os executores inativos. | 100 |
ae.spark.autoscale.frequency |
A frequência em segundos na qual o ajustador automático de escala do aplicativo aumenta ou diminui a capacidade de executores em um aplicativo. | 10s |
Exemplo de uma carga útil do aplicativo de ajuste automático de escala mostrando os limites inferior e superior no número de executores que o aplicativo pode escalar para cima ou para baixo.
{
"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>"
}
}
}
Ativando o ajuste automático de escala em uma instância
Por padrão, o ajuste automático de escala do aplicativo é desativado quando você cria uma instância do plano serverless do Analytics Engine Standard. Se quiser ativar o ajuste automático de escala para todos os aplicativos em nível de instância, você poderá configurar explicitamente "ae.spark.autoscale.enable": "true" como a definição padrão do Spark ao criar a instância. Consulte Configuração do Spark padrão.