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 e 4.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" }

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 com AWS Glue, você pode usar um conector personalizado ou seu próprio arquivo JAR.

Usando um conector personalizado

AWS Glue suporta conectores, que são pacotes de código opcionais que auxiliam no acesso aos armazenamentos de dados em AWS Glue Studio. Você pode assinar um conector em AWS Marketplace, ou você pode criar um conector personalizado.

nota

AWS Marketplace oferece o conector Apache Iceberg para. AWS Glue No entanto, recomendamos que você use um conector personalizado para manter o controle sobre as versões do Iceberg.

Por exemplo, para criar um conector de cliente para a versão 0.13.1 do Iceberg, siga estas etapas:

  1. Faça o upload dos arquivos iceberg-spark-runtime-3.1_2.12-0.13.1.jar bundle-2.17.161.jar e url-connection-client-2.17.161.jar para um bucket do Amazon S3. Você pode baixar esses arquivos de seus respectivos repositórios Apache Maven.

  2. No AWS Glue Studio console, crie um conector Spark personalizado:

    1. No painel de navegação, escolha Conexões de dados. (Se você estiver usando a navegação mais antiga, escolha Conectores, Criar conector personalizado.)

    2. Na caixa Conectores, escolha Criar conector personalizado.

    3. Na página Criar conector personalizado:

      • Especifique o caminho para os arquivos JAR no Amazon S3.

      • Insira um nome para o conector.

      • Escolha Spark como o tipo de conector.

      • Em Nome da classe, especifique o nome da classe da fonte de dados totalmente qualificado (ou seu alias) que você usa ao carregar a fonte de dados do Spark com o format operador.

      • (Opcional) Forneça uma descrição do conector.

3. Escolha Criar conector.

Ao trabalhar com conectores AWS Glue, você deve criar uma conexão para o conector. Uma conexão contém as propriedades necessárias para se conectar a um armazenamento de dados específico. Você usa a conexão com suas origens e destinos de dados no trabalho de ETL. Conectores e conexões trabalham juntos para facilitar o acesso aos armazenamentos de dados.

Para criar uma conexão usando o conector Iceberg personalizado que você criou:

  1. No AWS Glue Studio console, selecione seu conector Iceberg personalizado.

  2. Siga as instruções para fornecer os detalhes, como sua VPC e outras configurações de rede exigidas pelo trabalho, e escolha Criar conexão.

Agora você pode usar a conexão em sua tarefa de AWS Glue ETL. Dependendo de como você cria o trabalho, há diferentes maneiras de vincular a conexão ao seu trabalho:

  • Se você criar uma tarefa visual usando AWS Glue Studio, poderá selecionar a conexão na lista Conexão na guia Propriedades da fonte de dados — Conector.

  • Se você desenvolver o trabalho em um notebook, use a %connections mágica para definir o nome da conexão:

    %glue_version 3.0 %connections <name-of-the iceberg-connection> %%configure { "--conf" : "job-specific Spark configurations, to be discussed later", "--datalake-formats" : "iceberg" }
  • Se você criar o trabalho usando o editor de scripts, especifique a conexão na guia Detalhes do trabalho, em Propriedades avançadas, Conexões de rede adicionais

Para obter mais informações sobre os procedimentos desta seção, consulte Usando conectores e conexões AWS Glue Studio na AWS Glue documentação.

Trazendo seus próprios arquivos JAR

Dentro AWS Glue, você também pode trabalhar com o Iceberg sem precisar usar um conector. Essa abordagem é útil quando você deseja manter o controle sobre a versão do Iceberg e atualizá-la rapidamente. Para usar essa opção, faça o upload dos arquivos JAR do Iceberg necessários em um bucket do S3 de sua escolha e faça referência aos arquivos em seu AWS Glue trabalho. Por exemplo, se você estiver trabalhando com o Iceberg 1.0.0, os arquivos JAR necessários são iceberg-spark-runtime-3.0_2.12-1.0.0.jarurl-connection-client-2.15.40.jar, e. bundle-2.15.40.jar Você também pode priorizar os arquivos JAR adicionais no caminho da classe definindo o --user-jars-first parâmetro como true para o trabalho.

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 3.0 %connections <name-of-the iceberg-connection> %%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 catálogo de sessões do Iceberg Spark. Substitua-o pelo nome do seu catálogo e lembre-se de alterar as referências em todas as configurações associadas a esse catálogo. No seu código, você deve então se referir às suas tabelas Iceberg com o nome da tabela totalmente qualificado, incluindo o nome do catálogo da sessão do Spark, do seguinte modo:. <catalog_name>.<database_name>.<table_name>

  • <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, <catalog_name>.catalog-impl defina comoorg.apache.iceberg.aws.glue.GlueCatalog. 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 Práticas recomendadas gerais seção de melhores práticas gerais mais adiante neste guia.

  • Use org.apache.iceberg.aws.s3.S3FileIO como para aproveitar <catalog_name>.io-impl as vantagens do upload de várias partes do Amazon S3 para obter alto paralelismo.

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.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog ", "‐‐conf" : " spark.sql.catalog.glue_iceberg.io-impl=org.apache.iceberg.aws.s3.S3FileIO }

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.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \ .config("spark.sql.catalog.glue_iceberg.io-impl", "org.apache.iceberg.aws.s3.S3FileIO") \ .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 do 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 conectores personalizados ou adicione dependências de biblioteca - 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ê use contêineres personalizados ou 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 AWS Glue para 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 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.