Migrar trabalhos do AWS Glue for Spark para o AWS Glue versão 3.0 - AWS Glue

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.

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) em Glue version.

  • No AWS Glue Studio, escolha Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 em Glue version.

  • Na API, escolha 3.0 no parâmetro GlueVersion da API UpdateJob.

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) em Glue version.

  • No AWS Glue Studio, escolha Glue 3.0 - Supports spark 3.1, Scala 2, Python 3 em Glue version.

  • Na API, escolha 3.0 no parâmetro GlueVersion da API CreateJob.

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, ou SparkSession com SparkSession.builder.getOrCreate() quando já existe um SparkContext.

    • 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ções CURRENT_DATE ou CURRENT_TIMESTAMP com spark.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:

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:

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 como false.

  • 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 quanto spark.executor.cores são configurados para o número de núcleos no AWS Glue 3.0 (4 no padrão e operador G.1X, e 8 no operador G.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 no G.2X, 32 no G.4X e 64 no G.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:

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