Habilitando o escalonamento automático de aplicativos
Nem sempre é possível estimar antecipadamente os requisitos de recursos (número de executores Spark) de um aplicativo Spark, porque esses requisitos podem variar com base no tamanho do conjunto de dados de entrada.
Para ajudá-lo nessa situação, você pode enviar uma aplicação Spark com escalonamento automático, que determinará automaticamente o número de executores exigidos por uma aplicação com base na demanda da aplicação. Você pode habilitar o escalonamento automático básico para um aplicativo Spark adicionando a definição de configuraçãoae.spark.autoscale.enable=true à configuração do aplicativo existente.
No momento, o Analytics Engine equipado com o Apache Spark oferece suporte ao dimensionamento automático para a arquitetura X86 somente no modo não FIPS.
Enviando uma inscrição com escalonamento automático básico
As etapas para enviar uma inscrição com escalonamento automático habilitado são as mesmas etapas para enviar uma inscrição sem escalonamento automático. A única diferença é que você precisa adicionar a definição de configuraçãoae.spark.autoscale.enable=true para a carga útil do aplicativo.
Use o exemplo de carga JSON a seguir como exemplo para ativar o escalonamento automático básico:
Exemplo 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" } }Exemplo 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 } } }
Configurações de escalonamento automático de aplicativos
Você pode usar as definições de configuração a seguir para controlar ainda mais o escalonamento automático do número de executores.
| Definições de configuração | Descrição | Padrão |
|---|---|---|
ae.spark.autoscale.enable |
Sinaliza que o aplicativo será dimensionado automaticamente com base na demanda do aplicativo e em quaisquer outras configurações de dimensionamento automático definidas. Se especificado no nível da instância, todos os aplicativos na instância serão escalonados automaticamente. | Não |
spark.dynamicAllocation.initialExecutors |
Especifica o número inicial de executores a serem criados, independente de qualquer demanda feita pela aplicação Spark | 0 |
spark.dynamicAllocation.minExecutors |
Especifica o número mínimo de executores a serem mantidos, independente de qualquer demanda da aplicação Spark | 0 |
spark.dynamicAllocation.maxExecutors |
Especifica o número máximo de executores a serem criados independentemente de qualquer demanda do aplicativo Spark | 2 |
ae.spark.autoscale.scaleupDemandPercentage |
Especifica a porcentagem de executores exigidos pelo aplicativo Spark que devem ser atendidos pelo escalonador automático do aplicativo. Por exemplo, se em um determinado estágio um aplicativo Spark solicitar 10 executores e o valor dessa configuração for definido como 50 por cento, o escalonador automático do aplicativo aumentará o número de executores em 5 executores. O valor padrão desta configuração é 100 por cento, o que significa essencialmente que qualquer número de executores solicitados pela demanda de um aplicativo pode ser adicionado pelo escalonador automático do aplicativo. | 100 |
ae.spark.autoscale.scaledownExcessPercentage |
Especifica a porcentagem de executores ociosos retidos pelo aplicativo Spark que devem ser removidos pelo escalonador automático do aplicativo. Por exemplo, se após a conclusão de um determinado estágio em um aplicativo Spark, houver 20 executores ociosos retidos pelo aplicativo e o valor dessa configuração for definido como 25 por cento, o escalonador automático do aplicativo reduzirá os executores no aplicativo em 4 executores. O valor padrão para esta configuração é 100 por cento, o que significa que o escalonador automático do aplicativo pode reduzir todos os executores ociosos. | 100 |
ae.spark.autoscale.frequency |
A frequência em segundos com que o escalonador automático do aplicativo aumenta ou reduz os executores em um aplicativo. | 10s |
Exemplo de carga útil de aplicativo de escalonamento automático mostrando os limites inferior e superior do número de executores para os quais o aplicativo pode aumentar ou diminuir.
{
"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>"
}
}
}
Habilitar o escalonamento automático em uma instância
Por padrão, o ajuste automático de escala do aplicativo é desativado ao criar uma instância do plano sem servidor do Analytics Engine Standard. Se quiser ativar o escalonamento automático para todos os aplicativos no nível da instância, você poderá definir explicitamente "ae.spark.autoscale.enable ": "true" como configuração padrão do Spark ao criar a instância.