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á.
Migrar trabalhos do AWS Glue for Spark para o AWS Glue versão 3.0
Este tópico descreve as alterações entre as versões 0.9, 1.0, 2.0 e 3.0 do AWS Glue, para permitir que você migre suas aplicações do Spark e trabalhos de ETL para o AWS Glue 3.0.
Para usar esse recurso com seus trabalhos de ETL do AWS Glue, escolha 3.0
para a Glue version
ao criar seus trabalhos.
Tópicos
- Novos recursos compatíveis
- Ações para migrar para o AWS Glue 3.0
- Lista de verificação de migração
- Migração do AWS Glue 0.9 para o AWS Glue 3.0
- Migração do AWS Glue 1.0 para o AWS Glue 3.0
- Migrar do AWS Glue 2.0 para o AWS Glue 3.0
- Apêndice A: atualizações de dependência notáveis
- Apêndice B: upgrades do driver JDBC
Novos recursos compatíveis
Esta seção descreve novos recursos e vantagens do AWS Glue versão 3.0.
Ele é baseado no Apache Spark 3.1.1, que tem otimizações do Spark de código aberto e foi desenvolvido pelo AWS Glue e serviços de EMR, como execução de consultas adaptáveis, leitores vetorizados e agrupamento de partições e ordem aleatória otimizados.
Drivers JDBC atualizados para todas as fontes nativas do Glue, incluindo MySQL, Microsoft SQL Server, Oracle, PostgreSQL, MongoDB e bibliotecas e dependências do Spark atualizadas trazidas pelo Spark 3.1.1.
Acesso otimizado ao Amazon S3 com EMRFS atualizado e committers de saída otimizados do Amazon S3 habilitados por padrão.
Acesso otimizado ao Data Catalog com índices de partição, predicados push down, listagem de partições e cliente metastore do Hive atualizado.
Integração com Lake Formation para tabelas de catálogo controladas com filtragem em nível de célula e transações de data lake.
Experiência de interface do usuário do Spark aprimorada com o Spark 3.1.1, com novas métricas de memória do executor do Spark e métricas de transmissão estruturadas do Spark.
Latência de inicialização reduzida, melhorando os tempos de conclusão de trabalho e a interatividade em geral, semelhante ao AWS Glue 2.0.
Os trabalhos do Spark são cobrados em incrementos de um segundo com uma duração mínima de faturamento dez vezes mais baixa (de um mínimo de dez minutos a um mínimo de um minuto), semelhante ao AWS Glue 2.0.
Ações para migrar para o AWS Glue 3.0
Para trabalhos existentes, altere a Glue version
da versão anterior para Glue 3.0
na configuração do trabalho.
No console, escolha
Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0)
emGlue version
.No AWS Glue Studio, escolha
Glue 3.0 - Supports spark 3.1, Scala 2, Python 3
emGlue version
.Na API, escolha
3.0
no parâmetroGlueVersion
da APIUpdateJob
.
Para novos trabalhos, escolha Glue 3.0
ao criar um trabalho.
No console, escolha
Spark 3.1, Python 3 (Glue Version 3.0) or Spark 3.1, Scala 2 (Glue Version 3.0)
emGlue version
.No AWS Glue Studio, escolha
Glue 3.0 - Supports spark 3.1, Scala 2, Python 3
emGlue version
.Na API, escolha
3.0
no parâmetroGlueVersion
da APICreateJob
.
Para visualizar os logs de eventos do Spark no AWS Glue 3.0, inicie um servidor de histórico do Spark atualizado para o Glue 3.0 usando o CloudFormation ou o Docker.
Lista de verificação de migração
Revise esta lista de verificação para migração.
O seu trabalho depende do HDFS? Se sim, tente substituir o HDFS pelo S3.
Pesquise o caminho do sistema de arquivos começando com
hdfs://
ou/
como o caminho DFS no código de script de trabalho.Confira se o sistema de arquivos padrão não está configurado com HDFS. Se ele estiver configurado explicitamente, você precisará remover a configuração
fs.defaultFS
.Confira se o seu trabalho contém algum parâmetro
dfs.*
. Se ele contiver algum, você precisará verificar se está não há problema em desabilitar os parâmetros.
Seu trabalho depende do YARN? Se sim, verifique os impactos conferindo se o trabalho contém os seguintes parâmetros. Se ele contiver algum, você precisará verificar se está não há problema em desabilitar os parâmetros.
spark.yarn.*
Por exemplo:
spark.yarn.executor.memoryOverhead spark.yarn.driver.memoryOverhead spark.yarn.scheduler.reporterThread.maxFailures
yarn.*
Por exemplo:
yarn.scheduler.maximum-allocation-mb yarn.nodemanager.resource.memory-mb
O seu trabalho depende do Spark 2.2.1 ou do Spark 2.4.3? Se sim, verifique os impactos conferindo se o trabalho usa recursos alterados no Spark 3.1.1.
https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-22-to-23
Por exemplo a função
percentile_approx
, ouSparkSession
comSparkSession.builder.getOrCreate()
quando já existe umSparkContext
.https://spark.apache.org/docs/latest/sql-migration-guide.html#upgrading-from-spark-sql-23-to-24
Por exemplo, a função
array_contains
, ou as funçõesCURRENT_DATE
ouCURRENT_TIMESTAMP
comspark.sql.caseSensitive=true
.
Os jars extras do seu trabalho entram em conflito no Glue 3.0?
Do AWS Glue 0.9/1.0: jars extras fornecidos em trabalhos do AWS Glue 0.9/1.0 existentes podem trazer conflitos de classpath devido à dependências novas ou atualizadas disponíveis no Glue 3.0. Você pode evitar conflitos de classpath no AWS Glue 3.0 com o parâmetro de trabalho
--user-jars-first
do AWS Glue ou usar shade em suas dependências.Do AWS Glue 2.0: você ainda pode evitar conflitos de classpath no AWS Glue 3.0 com o parâmetro de trabalho
--user-jars-first
do AWS Glue ou usar shade em suas dependências.
Seus trabalhos dependem do Scala 2.11?
O AWS Glue 3.0 usa o Scala 2.12, por isso é preciso reconstruir suas bibliotecas com o Scala 2.12, se suas bibliotecas dependem do Scala 2.11.
As bibliotecas externas de Python do seu trabalho dependem do Python 2.7/3.6?
Use os parâmetros
--additional-python-modules
em vez de definir o arquivo egg/wheel/zip no caminho da biblioteca do Python.Atualize as bibliotecas dependentes do Python 2.7/3.6 para Python 3.7, pois o Spark 3.1.1 removeu o suporte ao Python 2.7.
Migração do AWS Glue 0.9 para o AWS Glue 3.0
Observe as seguintes alterações ao migrar:
O AWS Glue 0.9 usa o Spark 2.2.1 de código aberto e o AWS Glue 3.0 usa o Spark 3.1.1 otimizado para EMR.
Várias alterações do Spark sozinhas podem exigir a revisão de seus scripts para garantir que os recursos removidos não estejam sendo referenciados.
Por exemplo, o Spark 3.1.1 não habilita UDFs sem tipo Scala, mas o Spark 2.2 as permite.
Todos os trabalhos no AWS Glue 3.0 serão executados com tempos de inicialização significativamente melhorados. Os trabalhos do Spark serão cobrados em incrementos de um segundo com uma duração mínima de cobrança dez vezes menor, já que a latência de inicialização passará de um máximo de dez minutos para um minuto.
O comportamento de registro em log foi alterado desde o AWS Glue 2.0.
Várias atualizações de dependência, destacadas em Apêndice A: atualizações de dependência notáveis.
Scala também foram atualizadas para o 2.12 a partir do 2.11, e o Scala 2.12 não é compatível com o Scala 2.11.
O Python 3.7 também é a versão padrão usada para scripts de Python, pois o AWS Glue 0.9 utilizava apenas o Python 2.
O Python 2.7 não é suportado com o Spark 3.1.1.
Um novo mecanismo de instalação de módulos adicionais do Python está disponível.
O AWS Glue 3.0 não é executado no Apache YARN, portanto, as configurações do YARN não se aplicam.
O AWS Glue 3.0 não tem um Hadoop Distributed File System (HDFS).
Quaisquer jars extras fornecidos em trabalhos do AWS Glue 0.9 podem trazer dependências conflitantes, uma vez que houve atualizações em várias dependências no 3.0 a partir do 0.9. Você pode evitar conflitos de classpath no AWS Glue 3.0 com o parâmetro de trabalho
--user-jars-first
do AWS Glue.O AWS Glue 3.0 ainda não oferece suporte à alocação dinâmica, portanto, as métricas ExecutorAllocationManager não estão disponíveis.
Em trabalhos do AWS Glue 3.0, você especifica o número de operadores e o tipo de operador, mas não especifica uma
maxCapacity
.O AWS Glue 3.0 não suporta transformações de machine learning.
O AWS Glue 3.0 ainda não suporta endpoints de desenvolvimento.
Consulte a documentação de migração do Spark:
consulte Upgrading from Spark SQL 2.2 to 2.3
(Atualizando do Spark SQL 2.2 para 2.3) consulte Upgrading from Spark SQL 2.3 to 2.4
(Atualizando do Spark SQL 2.3 para 2.4) consulte Upgrading from Spark SQL 2.4 to 3.0
(Atualizando do Spark SQL 2.4 para 3.0) consulte Upgrading from Spark SQL 3.0 to 3.1
(Atualizando do Spark SQL 3.0 para 3.1) consulte Changes in Datetime behavior to be expected since Spark 3.0
(Alterações no comportamento de data e hora a serem esperadas desde o Spark 3.0).
Migração do AWS Glue 1.0 para o AWS Glue 3.0
Observe as seguintes alterações ao migrar:
O AWS Glue 1.0 usa o Spark 2.4 de código aberto e o AWS Glue 3.0 usa o Spark 3.1.1 otimizado para EMR.
Várias alterações do Spark sozinhas podem exigir a revisão de seus scripts para garantir que os recursos removidos não estejam sendo referenciados.
Por exemplo, o Spark 3.1.1 não habilita UDFs sem tipo Scala, mas o Spark 2.4 as permite.
Todos os trabalhos no AWS Glue 3.0 serão executados com tempos de inicialização significativamente melhorados. Os trabalhos do Spark serão cobrados em incrementos de um segundo com uma duração mínima de cobrança dez vezes menor, já que a latência de inicialização passará de um máximo de dez minutos para um minuto.
O comportamento de registro em log foi alterado desde o AWS Glue 2.0.
Várias atualizações de dependência, destacadas no
Scala também foram atualizadas para o 2.12 a partir do 2.11, e o Scala 2.12 não é compatível com o Scala 2.11.
O Python 3.7 também é a versão padrão usada para scripts de Python, pois o AWS Glue 0.9 utilizava apenas o Python 2.
O Python 2.7 não é suportado com o Spark 3.1.1.
Um novo mecanismo de instalação de módulos adicionais do Python está disponível.
O AWS Glue 3.0 não é executado no Apache YARN, portanto, as configurações do YARN não se aplicam.
O AWS Glue 3.0 não tem um Hadoop Distributed File System (HDFS).
Quaisquer jars extras fornecidos em trabalhos do AWS Glue 1.0 podem trazer dependências conflitantes, uma vez que houve atualizações em várias dependências no 3.0 a partir do 1.0. Você pode evitar conflitos de classpath no AWS Glue 3.0 com o parâmetro de trabalho
--user-jars-first
do AWS Glue.O AWS Glue 3.0 ainda não oferece suporte à alocação dinâmica, portanto, as métricas ExecutorAllocationManager não estão disponíveis.
Em trabalhos do AWS Glue 3.0, você especifica o número de operadores e o tipo de operador, mas não especifica uma
maxCapacity
.O AWS Glue 3.0 não suporta transformações de machine learning.
O AWS Glue 3.0 ainda não suporta endpoints de desenvolvimento.
Consulte a documentação de migração do Spark:
consulte Upgrading from Spark SQL 2.4 to 3.0
(Atualizando do Spark SQL 2.4 para 3.0) consulte Changes in Datetime behavior to be expected since Spark 3.0
(Alterações no comportamento de data e hora a serem esperadas desde o Spark 3.0).
Migrar do AWS Glue 2.0 para o AWS Glue 3.0
Observe as seguintes alterações ao migrar:
Todos os parâmetros de trabalho e principais recursos existentes no AWS Glue 2.0 existirão no AWS Glue3.0.
O committer do S3 otimizado para EMRFS para gravar dados do Parquet no Amazon S3 é habilitado por padrão no AWS Glue 3.0. No entanto, você ainda pode desabilitar isso definindo
--enable-s3-parquet-optimized-committer
comofalse
.
O AWS Glue 2.0 usa o Spark 2.4 de código aberto, e o AWS Glue 3.0 usa o Spark 3.1.1 otimizado para EMR.
Várias alterações do Spark sozinhas podem exigir a revisão de seus scripts para garantir que os recursos removidos não estejam sendo referenciados.
Por exemplo, o Spark 3.1.1 não habilita UDFs sem tipo Scala, mas o Spark 2.4 as permite.
O AWS Glue 3.0 também apresenta uma atualização para o EMRFS, drivers JDBC atualizados e inclusões de otimizações adicionais no próprio Spark fornecidas pelo AWS Glue.
Todos os trabalhos no AWS Glue 3.0 serão executados com tempos de inicialização significativamente melhorados. Os trabalhos do Spark serão cobrados em incrementos de um segundo com uma duração mínima de cobrança dez vezes menor, já que a latência de inicialização passará de um máximo de dez minutos para um minuto.
O Python 2.7 não é suportado com o Spark 3.1.1.
Várias atualizações de dependência, destacadas em Apêndice A: atualizações de dependência notáveis.
Scala também foram atualizadas para o 2.12 a partir do 2.11, e o Scala 2.12 não é compatível com o Scala 2.11.
Quaisquer jars extras fornecidos em trabalhos do AWS Glue 2.0 podem trazer dependências conflitantes, uma vez que houve atualizações em várias dependências no 3.0 a partir do 2.0. Você pode evitar conflitos de classpath no AWS Glue 3.0 com o parâmetro de trabalho
--user-jars-first
do AWS Glue.O AWS Glue 3.0 tem paralelismo de tarefas Spark diferente para configuração de driver/executor em comparação com o AWS Glue 2.0, melhora a performance e utiliza melhor os recursos disponíveis. Tanto
spark.driver.cores
quantospark.executor.cores
são configurados para o número de núcleos no AWS Glue 3.0 (4 no padrão e operadorG.1X
, e 8 no operadorG.2X
). Essas configurações não alteram o tipo de trabalho ou o hardware do trabalho do AWS Glue. Você pode usar essas configurações para calcular o número de partições ou divisões para corresponder ao paralelismo da tarefa do Spark na sua aplicação do Spark.Em geral, os trabalhos terão uma performance semelhante ou melhor em comparação com o AWS Glue 2.0. Se os trabalhos forem executados mais lentamente, você poderá aumentar o paralelismo das tarefas passando o seguinte argumento de trabalho:
key:
--executor-cores
value: <número desejado de tarefas que podem ser executadas em paralelo
>O valor não deve exceder 2 vezes o número de vCPUs no tipo de operador, que é 8 no
G.1X
, 16 noG.2X
, 32 noG.4X
e 64 noG.8X
. Você deve ter cuidado ao atualizar essa configuração, pois isso pode afetar a performance do trabalho, pois o aumento do paralelismo gera pressão na memória e no disco, além aplicar o controle de utilização nos sistemas de origem e de destino.
O AWS Glue 3.0 usa o Spark 3.1, que altera o comportamento para carregamento/salvamento de carimbos de data/hora de/para arquivos parquet. Para obter mais detalhes, consulte Atualização do Spark SQL 3.0 para 3.1
. Recomendamos definir os seguintes parâmetros ao ler/escrever dados de parquet que contenham colunas de carimbo de data/hora. A configuração desses parâmetros pode resolver o problema de incompatibilidade do calendário que ocorre durante a atualização do Spark 2 para o Spark 3, para o Dynamic Frame do AWS Glue e o Spark Data Frame. Use a opção CORRECTED (CORRIGIDO) para ler o valor de data e hora como ele é; e a opção LEGACY (HERDADO) para rebasear os valores de data e hora em relação à diferença de calendário durante a leitura.
- Key: --conf - Value: spark.sql.legacy.parquet.int96RebaseModeInRead=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.int96RebaseModeInWrite=[CORRECTED|LEGACY] --conf spark.sql.legacy.parquet.datetimeRebaseModeInRead=[CORRECTED|LEGACY]
Consulte a documentação de migração do Spark:
consulte Upgrading from Spark SQL 2.4 to 3.0
(Atualizando do Spark SQL 2.4 para 3.0) consulte Changes in Datetime behavior to be expected since Spark 3.0
(Alterações no comportamento de data e hora a serem esperadas desde o Spark 3.0).
Apêndice A: atualizações de dependência notáveis
Veja a seguir as atualizações de dependência:
Dependência | Versão no AWS Glue 0.9 | Versão no AWS Glue 1.0 | Versão no AWS Glue 2.0 | Versão no AWS Glue 3.0 |
---|---|---|---|---|
Spark | 2.2.1 | 2.4.3 | 2.4.3 | 3.1.1-amzn-0 |
Hadoop | 2.7.3-amzn-6 | 2.8.5-amzn-1 | 2.8.5-amzn-5 | 3.2.1-amzn-3 |
Scala | 2.11 | 2.11 | 2.11 | 2.12 |
Jackson | 2.7.x | 2.7.x | 2.7.x | 2.10.x |
Hive | 1.2 | 1.2 | 1.2 | 2.3.7-amzn-4 |
EMRFS | 2.20.0 | 2.30.0 | 2.38.0 | 2.46.0 |
Json4s | 3.2.x | 3.5.x | 3.5.x | 3.6.6 |
Arrow | N/D | 0.10.0 | 0.10.0 | 2.0.0 |
Cliente do AWS Glue Catalog | N/D | N/D | 1.10.0 | 3.0.0 |
Apêndice B: upgrades do driver JDBC
A seguir estão as atualizações do driver JDBC:
Driver | Versão do driver JDBC nas versões do AWS Glue anteriores | Versão do driver JDBC no AWS Glue 3.0 |
---|---|---|
MySQL | 5.1 | 8.0.23 |
Microsoft SQL Server | 6.1.0 | 7.0.0 |
Bancos de dados da Oracle | 11.2 | 21.1 |
PostgreSQL | 42.1.0 | 42.2.18 |
MongoDB | 2.0.0 | 4.0.0 |