Trabalhando com o Apache Iceberg em AWS Glue - AWS Orientação prescritiva

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á.

Trabalhando com o Apache Iceberg em AWS Glue

AWS Glueé um serviço de integração de dados sem servidor que facilita a descoberta, a preparação, a movimentação e a integração de dados de várias fontes para análise, aprendizado de máquina (ML) e desenvolvimento de aplicativos. Um dos principais recursos do AWS Glue é a capacidade de realizar operações de extração, transformação e carregamento (ETL) de maneira simples e econômica. Isso ajuda a categorizar seus dados, limpá-los, enriquecê-los e movê-los de forma confiável entre vários armazenamentos de dados e fluxos de dados. 

AWS Glue trabalhos encapsulam scripts que definem a lógica de transformação usando um tempo de execução Apache Spark ou Python. AWS Glue os trabalhos podem ser executados tanto no modo batch quanto no modo de streaming. 

Ao criar trabalhos do Iceberg em AWS Glue, dependendo da versão do AWS Glue, você pode usar a integração nativa do Iceberg ou uma versão personalizada do Iceberg para anexar dependências do Iceberg ao trabalho.

Usando a integração nativa do Iceberg

AWS Glue as versões 3.0, 4.0 e 5.0 oferecem suporte nativo a formatos de data lake transacionais, como Apache Iceberg, Apache Hudi e Linux Foundation Delta Lake in for Spark. AWS Glue Esse recurso de integração simplifica as etapas de configuração necessárias para começar a usar essas estruturas no. AWS Glue

Para ativar o suporte do Iceberg para seu AWS Glue trabalho, defina o trabalho: escolha a guia Detalhes do trabalho para seu AWS Glue trabalho, vá até Parâmetros do trabalho em Propriedades avançadas e defina a chave --datalake-formats e seu valor comoiceberg.

Se você estiver criando um trabalho usando um notebook, você pode configurar o parâmetro na primeira célula do notebook usando a %%configure mágica da seguinte forma:

%%configure { "--conf" : <job-specific Spark configuration discussed later>, "--datalake-formats" : "iceberg" }

A iceberg configuração para --datalake-formats in AWS Glue corresponde a versões específicas do Iceberg com base na sua AWS Glue versão:

AWS Glue versão Versão padrão do Iceberg

5,0

1.7.1

4,0

1.0.0

3.0

0.13.1

Usando uma versão personalizada do Iceberg

Em algumas situações, talvez você queira manter o controle sobre a versão do Iceberg para o trabalho e atualizá-la no seu próprio ritmo. Por exemplo, a atualização para uma versão posterior pode desbloquear o acesso a novos recursos e aprimoramentos de desempenho. Para usar uma versão específica do Iceberg AWS Glue, você pode fornecer seus próprios arquivos JAR.

Antes de implementar uma versão personalizada do Iceberg, verifique a compatibilidade com seu AWS Glue ambiente consultando a seção de AWS Glue versões da AWS Glue documentação. Por exemplo, o AWS Glue 5.0 requer compatibilidade com o Spark 3.5.4.

Como exemplo, para executar AWS Glue trabalhos que usam a versão 1.9.1 do Iceberg, siga estas etapas:

  1. Adquira e faça o upload dos arquivos JAR necessários para o Amazon S3:

    1. Baixe iceberg-spark-runtime-3.5_2.12-1.9.1.jar e -1.9.1.jar do repositório Apache Maven. iceberg-aws-bundle

    2. Faça o upload desses arquivos para o local designado do bucket do S3 (por exemplo,s3://your-bucket-name/jars/).

  2. Configure os parâmetros do trabalho para seu AWS Glue trabalho da seguinte forma:

    1. Especifique o caminho completo do S3 para os dois arquivos JAR no --extra-jars parâmetro, separando-os com uma vírgula (por exemplo,). s3://your-bucket-name/jars/iceberg-spark-runtime-3.5_2.12-1.9.1.jar,s3://your-bucket-name/jars/iceberg-aws-bundle-1.9.1.jar

    2. Não inclua iceberg como um valor para o parâmetro --datalake-formats.

    3. Se você usar AWS Glue 5.0, deverá definir o --user-jars-first parâmetro comotrue.

Configurações do Spark para Iceberg em AWS Glue

Esta seção discute as configurações do Spark necessárias para criar uma tarefa de AWS Glue ETL para um conjunto de dados do Iceberg. Você pode definir essas configurações usando a chave --conf Spark com uma lista separada por vírgulas de todas as chaves e valores de configuração do Spark. Você pode usar a %%configure mágica em um notebook ou na seção Job parameters do AWS Glue Studio console.

%glue_version 5.0 %%configure { "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions...", "--datalake-formats" : "iceberg" }

Configure a sessão do Spark com as seguintes propriedades:

  • <catalog_name>é o nome do seu catálogo de sessões do Iceberg Spark. Substitua-o por um nome de sua escolha e lembre-se de alterar as referências em todas as configurações associadas a esse catálogo. No seu código, você pode se referir às suas tabelas do Iceberg usando o nome da tabela totalmente qualificado, incluindo o nome do catálogo da sessão do Spark, da seguinte forma:

    <catalog_name>.<database_name>.<table_name>

    Como alternativa, você pode alterar o catálogo padrão para o catálogo Iceberg que você definiu configurando spark.sql.defaultCatalog o nome do seu catálogo. Você pode usar essa segunda abordagem para se referir a tabelas sem o prefixo do catálogo, o que pode simplificar suas consultas.

  • <catalog_name>.<warehouse>aponta para o caminho do Amazon S3 onde você deseja armazenar seus dados e metadados.

  • Para tornar o catálogo um AWS Glue Data Catalog, spark.sql.catalog.<catalog_name>.type defina comoglue. Essa chave é necessária para apontar para uma classe de implementação para qualquer implementação de catálogo personalizado. Para catálogos compatíveis com o Iceberg, consulte a seção de melhores práticas gerais mais adiante neste guia.

Por exemplo, se você tiver um catálogo chamadoglue_iceberg, poderá configurar seu trabalho usando várias --conf chaves da seguinte forma:

%%configure { "--datalake-formats" : "iceberg", "--conf" : "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.catalog.glue_iceberg=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.glue_iceberg.warehouse=s3://<your-warehouse-dir>/ --conf spark.sql.catalog.glue_iceberg.type=glue" }

Como alternativa, você pode usar o código para adicionar as configurações acima ao seu script do Spark da seguinte forma:

spark = SparkSession.builder\ .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")\ .config("spark.sql.catalog.glue_iceberg", "org.apache.iceberg.spark.SparkCatalog")\ .config("spark.sql.catalog.glue_iceberg.warehouse","s3://<your-warehouse-dir>/")\ .config("spark.sql.catalog.glue_iceberg.type", "glue") \ .getOrCreate()

Melhores práticas para AWS Glue empregos

Esta seção fornece diretrizes gerais para ajustar as tarefas do Spark para otimizar AWS Glue a leitura e gravação de dados nas tabelas do Iceberg. Para conhecer as melhores práticas específicas do Iceberg, consulte a seção Melhores práticas mais adiante neste guia.

  • Use a versão mais recente AWS Glue e atualize sempre que possível — novas versões AWS Glue oferecem melhorias de desempenho, tempos de inicialização reduzidos e novos recursos. Eles também oferecem suporte às versões mais recentes do Spark, que podem ser necessárias para as versões mais recentes do Iceberg. Para ver uma lista das AWS Glue versões disponíveis e das versões do Spark compatíveis com elas, consulte a AWS Glue documentação.

  • Otimize a memória do AWS Glue trabalho — siga as recomendações na postagem do AWS blog Otimize o gerenciamento de memória em AWS Glue.

  • Use o AWS Glue Auto Scaling — Quando você ativa o Auto Scaling AWS Glue , ajusta automaticamente o número de trabalhadores dinamicamente com base na sua AWS Glue carga de trabalho. Isso ajuda a reduzir o custo do seu AWS Glue trabalho durante picos de carga, porque AWS Glue reduz o número de trabalhadores quando a carga de trabalho é pequena e os trabalhadores estão ociosos. Para usar o AWS Glue Auto Scaling, você especifica um número máximo de trabalhadores para os quais seu AWS Glue trabalho pode ser escalado. Para obter mais informações, consulte Como usar o escalonamento automáticoAWS Glue na AWS Glue documentação.

  • Use a versão desejada do Iceberg — a integração AWS Glue nativa com o Iceberg é melhor para começar a usar o Iceberg. No entanto, para cargas de trabalho de produção, recomendamos que você adicione dependências de biblioteca (conforme discutido anteriormente neste guia) para ter controle total sobre a versão do Iceberg. Essa abordagem ajuda você a se beneficiar dos recursos mais recentes do Iceberg e das melhorias de desempenho em seus AWS Glue trabalhos.

  • Ative a interface do Spark para monitoramento e depuração — Você também pode usar a interface do Spark para AWS Glue inspecionar sua tarefa do Iceberg, visualizando os diferentes estágios de uma tarefa do Spark em um gráfico acíclico direcionado (DAG) e monitorando as tarefas em detalhes. A interface do usuário do Spark fornece uma maneira eficaz de solucionar problemas e otimizar as tarefas do Iceberg. Por exemplo, você pode identificar estágios de gargalo que apresentam grandes confusões ou vazamento de disco para identificar oportunidades de ajuste. Para obter mais informações, consulte Monitoramento de trabalhos usando a interface web do Apache Spark na AWS Glue documentação.