As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Configurar o Spark
Você pode configurar o Spark na Amazon EMR
As classificações de configuração do Spark na Amazon EMR incluem o seguinte:
-
spark
: define a propriedademaximizeResourceAllocation
como verdadeira ou falsa. Quando verdadeiro, a Amazon configura EMR automaticamente asspark-defaults
propriedades com base na configuração do hardware do cluster. Para obter mais informações, consulte Utilizar o maximizeResourceAllocation. -
spark-defaults
: define valores no arquivospark-defaults.conf
. Para obter mais informações, consulte Configuração do Sparkna documentação do Spark. -
spark-env
: define valores no arquivospark-env.sh
. Para obter mais informações, consulte Variáveis de ambientena documentação do Spark. -
spark-hive-site
: define os valores nohive-site.xml
para o Spark. -
spark-log4j
— (Amazon EMR lança 6.7.x e versões anteriores) Define valores nolog4j.properties
arquivo. Para obter mais informações, consulte o arquivo log4j.properties.templateno GitHub. -
spark-log4j2
— (Amazon EMR lança 6.8.0 e versões posteriores) Define valores nolog4j2.properties
arquivo. Para obter mais informações, consulte o arquivo log4j2.properties.templateno GitHub. -
spark-metrics
: define valores no arquivometrics.properties
. Para obter configurações e mais informações, consulte o arquivo metrics.properties.templateno Github e as Métricas na documentação do Spark.
nota
Se você estiver migrando cargas de trabalho do Spark para a Amazon EMR de outra plataforma, recomendamos que você teste suas cargas de trabalho com o Padrões do Spark definidos pela Amazon EMR antes de adicionar configurações personalizadas. A maioria dos clientes observa uma melhor performance com nossas configurações padrão.
Tópicos
- Padrões do Spark definidos pela Amazon EMR
- Configurando a coleta de lixo do Spark na Amazon 6.1.0 EMR
- Utilizar o maximizeResourceAllocation
- Configurar o comportamento de desativação de nós
- Variável de ThriftServer ambiente Spark
- Alterar as configurações padrão do Spark
- Migrar do Apache Log4j 1.x para Log4j 2.x
Padrões do Spark definidos pela Amazon EMR
A tabela a seguir mostra como a Amazon EMR define valores padrão spark-defaults
que afetam os aplicativos.
Padrões do Spark definidos pela Amazon EMR | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Configuração | Descrição | Valor padrão | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.memory |
A quantidade de memória a ser usada por processo de executor. Por exemplo: |
Essa configuração é determinada pelos tipos de instância core e de tarefa no cluster. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.cores |
O número de núcleos para uso em cada executor. |
Essa configuração é determinada pelos tipos de instância core e de tarefa no cluster. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.dynamicAllocation.enabled |
Quando verdadeira, use alocação dinâmica de recursos para aumentar e diminuir a escala verticalmente do número de executores registrados em uma aplicação com base na workload. |
notaO serviço Spark shuffle é configurado automaticamente pela Amazon. EMR |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.sql.hive.advancedPartitionPredicatePushdown.enabled |
Quando verdadeiro, o pushdown avançado de predicados de partição para o metastore do Hive é habilitado. |
true |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.sql.hive.stringLikePartitionPredicatePushdown.enabled |
Envia os filtros notaO Glue não é compatível com o pushdown de predicados para |
true |
Configurando a coleta de lixo do Spark na Amazon 6.1.0 EMR
Definir configurações personalizadas de coleta de lixo com spark.driver.extraJavaOptions
e spark.executor.extraJavaOptions
resulta em falha na inicialização do driver ou do executor com o Amazon EMR 6.1 devido a uma configuração de coleta de lixo conflitante com o Amazon 6.1.0. EMR Para o Amazon EMR 6.1.0, a configuração padrão de coleta de lixo é definida por meio de e. spark.driver.defaultJavaOptions
spark.executor.defaultJavaOptions
Essa configuração se aplica somente à Amazon EMR 6.1.0. JVMopções não relacionadas à coleta de lixo, como aquelas para configurar logging (-verbose:class
), ainda podem ser definidas. extraJavaOptions
Para obter mais informações, consulte Propriedades das aplicações do Spark
Utilizar o maximizeResourceAllocation
Para configurar os executores para usarem o máximo de recursos possível em cada nó em um cluster, defina maximizeResourceAllocation
como true
na classificação de configuração do spark
. Isso maximizeResourceAllocation
é específico para a AmazonEMR. Quando você ativamaximizeResourceAllocation
, a Amazon EMR calcula o máximo de recursos computacionais e de memória disponíveis para um executor em uma instância no grupo de instâncias principal. Em seguida, ele define as configurações spark-defaults
correspondentes com base nos valores máximos calculados.
A Amazon EMR calcula o máximo de recursos computacionais e de memória disponíveis para um executor com base em um tipo de instância da frota principal de instâncias. Como cada frota de instâncias pode ter diferentes tipos e tamanhos de instância dentro de uma frota, a configuração do executor que a Amazon EMR usa pode não ser a melhor para seus clusters, por isso não recomendamos usar as configurações padrão ao usar a alocação máxima de recursos. Defina configurações personalizadas para seus clusters de frota de instâncias.
nota
Você não deve usar a maximizeResourceAllocation
opção em clusters com outros aplicativos distribuídos, como HBase o. A Amazon EMR usa YARN configurações personalizadas para aplicativos distribuídos, que podem entrar em conflito maximizeResourceAllocation
e fazer com que os aplicativos Spark falhem.
Veja a seguir um exemplo de classificação de configuração do Spark com maximizeResourceAllocation
definido como true
.
[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
Configurações configuradas em spark-defaults quando maximizeResourceAllocation está habilitado | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Configuração | Descrição | Valor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.default.parallelism | O número padrão de partições é RDDs retornado por transformações como join reduceByKey, e paralelize quando não definido pelo usuário. |
O dobro do número de CPU núcleos disponíveis para YARN contêineres. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.driver.memory | Quantidade de memória a ser usada para o processo do driver, ou seja, onde SparkContext é inicializado. (por exemplo, 1g, 2g). |
A configuração é definida com base nos tipos de instância do cluster. No entanto, como o aplicativo do driver Spark pode ser executado na instância primária ou em uma das instâncias principais (por exemplo, nos modos YARN cliente e cluster, respectivamente), isso é definido com base no menor dos tipos de instância nesses dois grupos de instâncias. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.memory | Quantidade de memória para uso por processo de executor. (por exemplo, 1g, 2g) |
A configuração é definida com base nos tipos de instância core e de tarefa do cluster. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.cores | O número de núcleos para uso em cada executor. | A configuração é definida com base nos tipos de instância core e de tarefa do cluster. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
spark.executor.instances | O número de executores. |
A configuração é definida com base nos tipos de instância core e de tarefa do cluster. Defina a menos que |
Configurar o comportamento de desativação de nós
Com a EMR versão 5.9.0 e superior da Amazon, o Spark na Amazon EMR inclui um conjunto de recursos para ajudar a garantir que o Spark gerencie o encerramento de nós sem problemas devido a um redimensionamento manual ou a uma solicitação automática de política de escalabilidade. A Amazon EMR implementa um mecanismo de negação de listagem no Spark que é construído sobre o mecanismo de YARN desativação. Esse mecanismo ajuda a garantir que não haja novas tarefas programadas em um nó que esteja sendo desativado, permitindo ao mesmo tempo que tarefas que já estão em execução sejam concluídas. Além disso, há recursos para ajudar a recuperar trabalhos do Spark com mais rapidez se os shuffle blocks forem perdidos no encerramento de um nó. O processo de recálculo é acionado mais cedo e otimizado para recalcular com mais rapidez e menos tentativas de fase, e é possível evitar falhas nos trabalhos provenientes de falhas de busca que são causadas por shuffle blocks ausentes.
Importante
A spark.decommissioning.timeout.threshold
configuração foi adicionada na EMR versão 5.11.0 da Amazon para melhorar a resiliência do Spark ao usar instâncias spot. Nas versões anteriores, quando um nó usa uma instância spot e a instância é encerrada devido ao preço da oferta, o Spark pode não ser capaz de lidar com o encerramento com tranquilidade. Os trabalhos podem falhar e os novos cálculos de shuffle podem levar um tempo significativo. Por esse motivo, recomendamos o uso da versão 5.11.0, ou posterior, se você usar instâncias spot.
Configurações de desativação de nós do Spark | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Configuração | Descrição | Valor padrão | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Quando definido como |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
O período em que um nó no estado |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Disponível na EMR versão 5.11.0 ou posterior da Amazon. Especificado em segundos. Quando um nó passa para o estado de descomissionamento, se o host for desativado dentro de um período de tempo igual ou menor que esse valor, a Amazon EMR não apenas lista o nó, mas também limpa o estado do host (conforme especificado por |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Quando definido como |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Quando definido como |
true |
Variável de ThriftServer ambiente Spark
O Spark define a variável de ambiente da Porta do servidor Thrift do Hive, HIVE_SERVER2_THRIFT_PORT
, como 10001.
Alterar as configurações padrão do Spark
Você altera os padrões em spark-defaults.conf
usando a classificação de configuração spark-defaults
ou a configuração maximizeResourceAllocation
na classificação de configuração spark
.
Os procedimentos a seguir mostram como modificar as configurações usando o console CLI ou.
Para criar um cluster com spark.executor.memory definido como 2g usando o CLI
-
Crie um cluster com o Spark instalado e com
spark.executor.memory
definido como 2g usando o comando a seguir, que faz referência a um arquivo,myConfig.json
, armazenado no Amazon S3.aws emr create-cluster --release-label
emr-7.2.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonnota
Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).
myConfig.json
:[ { "Classification": "spark-defaults", "Properties": { "spark.executor.memory": "2G" } } ]
Criar um cluster com spark.executor.memory definido como 2g usando o console
Navegue até o novo EMR console da Amazon e selecione Alternar para o console antigo na navegação lateral. Para obter mais informações sobre o que esperar ao alternar para o console antigo, consulte Usar o console antigo.
-
Escolha Create cluster (Criar cluster), Go to advanced options (Ir para opções avançadas).
-
Escolha Spark.
-
Em Edit software settings (Editar configurações de software), deixe Enter configuration (Inserir configuração) selecionado e insira a seguinte configuração:
classification=spark-defaults,properties=[spark.executor.memory=2G]
-
Selecione outras opções, escolha eCreate cluster (Criar cluster).
Para definir maximizeResourceAllocation
-
Crie um cluster com o Spark instalado e
maximizeResourceAllocation
definido como verdadeiro usando o AWS CLI, referenciando um arquivomyConfig.json
, armazenado no Amazon S3.aws emr create-cluster --release-label
emr-7.2.0
--applications Name=Spark \ --instance-type m5.xlarge --instance-count 2 --service-role EMR_DefaultRole_V2 --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.jsonnota
Os caracteres de continuação de linha do Linux (\) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).
myConfig.json
:[ { "Classification": "spark", "Properties": { "maximizeResourceAllocation": "true" } } ]
nota
Com a Amazon EMR versão 5.21.0 e posterior, você pode substituir as configurações do cluster e especificar classificações de configuração adicionais para cada grupo de instâncias em um cluster em execução. Você faz isso usando o EMR console da Amazon, o AWS Command Line Interface (AWS CLI) ou AWS SDK o. Para obter mais informações, consulte Supplying a Configuration for an Instance Group in a Running Cluster.
Migrar do Apache Log4j 1.x para Log4j 2.x
As versões 3.2.x e anteriores do Apache Sparklog4j.properties
para configurar o Log4j nos processos do Spark. As versões 3.3.0 e posteriores do Apache Spark usam o Apache Log4j 2.x e o arquivo log4j2.properties
para configurar o Log4j nos processos do Spark.
Se você configurou o Apache Spark Log4j usando uma EMR versão da Amazon inferior à 6.8.0, então você deve remover a classificação de spark-log4j
configuração legada e migrar para a classificação de configuração e formato de chave antes de poder atualizar para a spark-log4j2
Amazon 6.8.0 ou posterior. EMR A spark-log4j
classificação legada faz com que a criação do cluster falhe com um ValidationException
erro nas EMR versões 6.8.0 e posteriores da Amazon. Você não será cobrado por uma falha relacionada à incompatibilidade do Log4j, mas deverá remover a classificação de configuração spark-log4j
extinta para continuar.
Para obter mais informações sobre a migração do Apache Log4j 1.x para o Log4j 2.x, consulte o Guia de migração do Apache Log4j
nota
Com a AmazonEMR, o Apache Spark usa um log4j2.properties
arquivo em vez do arquivo.xml descrito no Guia de migração do Apache