Configuração da escalabilidade automática vertical para o Amazon EMR no EKS
Você pode configurar a escalabilidade automática vertical ao enviar trabalhos do Spark no Amazon EMR usando a API StartJobRun. Defina os parâmetros de configuração relacionados à escalabilidade automática no pod do driver do Spark, conforme mostrado no exemplo em Envio de um trabalho do Spark com a escalabilidade automática vertical.
O operador de escalabilidade automática vertical do Amazon EMR no EKS recebe os pods de drivers que têm escalabilidade automática e, em seguida, configura a integração com o Vertical Pod Autoscaler (VPA) do Kubernetes usando as configurações no pod do driver. Isso facilita o rastreamento de recursos e a escalabilidade automática de pods de executores do Spark.
As seções a seguir descrevem os parâmetros que você pode usar ao configurar a escalabilidade automática vertical para o cluster do Amazon EKS.
nota
Configure o parâmetro de alternância de recursos como um rótulo e configure os parâmetros restantes como anotações no pod do driver do Spark. Os parâmetros de escalabilidade automática pertencem ao domínio emr-containers.amazonaws.com/
e têm o prefixo dynamic.sizing
.
Parâmetros necessários
Você deve incluir os dois seguintes parâmetros no driver de trabalho do Spark ao enviar o trabalho:
Chave | Descrição | Valores aceitos | Valor padrão | Tipo | Parâmetro do Spark1 |
---|---|---|---|---|---|
|
Alternância de recursos |
|
não definido |
rótulo |
|
|
Assinatura do trabalho |
string |
não definido |
anotação |
|
1 Use esse parâmetro como um SparkSubmitParameter
ou uma ConfigurationOverride
na API StartJobRun
.
-
dynamic.sizing
: é possível ativar e desativar a escalabilidade automática vertical com o rótulodynamic.sizing
. Para ativar a escalabilidade automática vertical, definadynamic.sizing
comotrue
no pod do driver do Spark. Se você omitir esse rótulo ou defini-lo com qualquer valor diferente detrue
, a escalabilidade automática vertical será desativada. -
dynamic.sizing.signature
: defina a assinatura do trabalho com a anotaçãodynamic.sizing.signature
no pod do driver. A escalabilidade automática vertical agrega dados de uso de recursos em diferentes execuções de trabalhos do Spark no Amazon EMR para derivar recomendações de recursos. Você fornece o identificador exclusivo para unir os trabalhos.nota
Se o seu trabalho se repetir em um intervalo fixo, como diariamente ou semanalmente, a assinatura do trabalho deverá permanecer a mesma para cada nova instância dele. Isso garante que a escalabilidade automática vertical possa computar e agregar recomendações em diferentes execuções do trabalho.
1 Use esse parâmetro como um SparkSubmitParameter
ou uma ConfigurationOverride
na API StartJobRun
.
Parâmetros opcionais
A escalabilidade automática vertical também oferece suporte aos parâmetros opcionais apresentados a seguir. Defina-os como anotações no pod do driver.
Chave | Descrição | Valores aceitos | Valor padrão | Tipo | Parâmetro do Spark1 |
---|---|---|---|---|---|
Modo da escalabilidade automática vertical |
|
|
anotação |
|
|
Habilitação da escalabilidade de memória |
|
|
anotação |
|
|
Ativação ou desativação da escalabilidade de CPU |
|
|
anotação |
|
|
Limite mínimo para a escalabilidade de memória |
string, K8s resource.Quantity1G |
não definido |
anotação |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.min |
|
Limite máximo para a escalabilidade de memória |
string, K8s resource.Quantity4G |
não definido |
anotação |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.memory.max |
|
Limite mínimo para a escalabilidade de CPU |
string, K8s resource.Quantity1 |
não definido |
anotação |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.min |
|
Limite máximo para a escalabilidade de CPU |
string, K8s resource.Quantity2 |
não definido |
anotação |
spark.kubernetes.driver.label.emr-containers.amazonaws.com/dynamic.sizing.scale.cpu.max |
Modos da escalabilidade automática vertical
O parâmetro mode
é mapeado para os diferentes modos de escalabilidade automática compatíveis com o VPA. Use a anotação dynamic.sizing.mode
no pod do driver para definir o modo. Os seguintes valores têm suporte para este parâmetro:
-
Desativado: um modo de simulação no qual é possível monitorar recomendações, mas a escalabilidade automática não é executada. Este é o modo padrão para a escalabilidade automática vertical. Nesse modo, o recurso de escalabilidade automática vertical do pod associado computa recomendações e você pode monitorá-las usando ferramentas como o kubectl, o Prometheus e o Grafana.
-
Inicial: neste modo, o VPA escala automaticamente os recursos quando o trabalho é iniciado, se houver recomendações disponíveis com base no histórico de execuções do trabalho, como no caso de um trabalho recorrente.
-
Automático: neste modo, o VPA realiza a remoção de pods de executores do Spark e os escala automaticamente com as configurações de recursos recomendadas quando o pod do driver do Spark os reinicia. Às vezes, o VPA realiza a remoção de pods de executores do Spark em execução, portanto, isso pode resultar em latência adicional ao tentar novamente o executor interrompido.
Escalabilidade de recursos
Ao configurar a escalabilidade automática vertical, você pode escolher se deseja escalar os recursos de CPU e de memória. Defina as anotações dynamic.sizing.scale.cpu
e dynamic.sizing.scale.memory
como true
ou false
. Por padrão, a escalabilidade de CPU é definida como false
e a escalabilidade de memória é definida como true
.
Mínimos e máximos de recursos (limites)
Como opção, também é possível definir limites para os recursos de CPU e de memória. Escolha valores mínimo e máximo para esses recursos com as anotações dynamic.sizing.[memory/cpu].[min/max]
ao ativar a escalabilidade automática. Por padrão, os recursos não têm limitações. Defina as anotações como valores de string que representam uma quantidade de recursos do Kubernetes. Por exemplo, defina dynamic.sizing.memory.max
como 4G
para representar 4 GB.