Particionar workloads com execução limitada - 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á.

Particionar workloads com execução limitada

Erros em aplicações do Spark geralmente surgem de scripts ineficientes do Spark, execução distribuída na memória de transformações em grande escala e anormalidades do conjunto de dados. Há muitas razões que podem causar problemas de memória de driver ou executor, por exemplo, uma distorção de dados, listar muitos objetos ou colocar em ordem aleatória dados grandes. Esses problemas geralmente aparecem quando você está processando grandes quantidades de dados de backlog com o Spark.

O AWS Glue permite que você resolva problemas de OOM e torne seu processamento ETL mais fácil com o particionamento de workload. Com o particionamento de workload habiltado, cada execução de trabalho de ETL seleciona somente dados não processados, com um limite superior no tamanho do conjunto de dados ou o número de arquivos a serem processados com essa execução de trabalho. Futuras execuções de trabalho processarão os dados restantes. Por exemplo, se houver 1.000 arquivos que precisem ser processados, você pode definir o número de arquivos para 500 e separá-los em duas execuções de trabalho.

O particionamento de workload é suportado apenas para fontes de dados do Amazon S3.

Habilitar o particionamento de workloads

Você pode habilitar a execução limitada definindo manualmente as opções no seu script ou adicionando propriedades da tabela de catálogo.

Para habilitar o particionamento de workload com execução limitada no seu script:
  1. Para evitar o reprocessamento de dados, habilite os marcadores de trabalho no novo trabalho ou no já existente. Para obter mais informações, consulte Rastreamento de dados processados usando marcadores de trabalho.

  2. Modifique seu script e defina o limite nas opções adicionais na API getSource do AWS Glue. Você também deve definir o contexto de transformação para que o marcador de trabalho armazene o elemento state. Por exemplo:

    Python

    glueContext.create_dynamic_frame.from_catalog( database = "database", table_name = "table_name", redshift_tmp_dir = "", transformation_ctx = "datasource0", additional_options = { "boundedFiles" : "500", # need to be string # "boundedSize" : "1000000000" unit is byte } )

    Scala

    val datasource0 = glueContext.getCatalogSource( database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions( Map("boundedFiles" -> "500") // need to be string //"boundedSize" -> "1000000000" unit is byte ) ).getDynamicFrame()
    val connectionOptions = JsonOptions( Map("paths" -> List(baseLocation), "boundedFiles" -> "30") ) val source = glueContext.getSource("s3", connectionOptions, "datasource0", "")
Para habilitar o particionamento de workload com execução limitada na tabela do Data Catalog:
  1. Defina os pares de chave-valor no campo parameters de sua estrutura de tabela no Data Catalog. Para obter mais informações, consulte Visualização e edição dos detalhes da tabela.

  2. Defina o limite superior para o tamanho do conjunto de dados ou o número de arquivos processados:

    • Defina boundedSize para o tamanho de destino do conjunto de dados em bytes. A execução do trabalho será interrompida depois de atingir o tamanho desejado da tabela.

    • Defina boundedFiles para o número de destino de arquivos. A execução do trabalho será interrompida após o processamento do número de arquivos desejado.

    nota

    Você deve definir apenas um entre boundedSize ou boundedFiles, pois somente um limite é suportado.

Configurar um acionador do AWS Glue para executar o trabalho automaticamente

Depois de habilitar a execução limitada, é possível configurar um acionador do AWS Glue para executar automaticamente o trabalho e carregar os dados incrementalmente em execuções sequenciais. Vá para console do AWS Glue e crie um acionador, configure o horário de programação e anexe-o ao seu trabalho. Em seguida, ele acionará automaticamente a próxima execução do trabalho e processará o novo lote de dados.

Você também pode usar fluxos de trabalho do AWS Glue para orquestrar vários trabalhos a fim de processar dados de diferentes partições simultaneamente. Para obter mais informações, consulte Acionadores do AWS Glue e Fluxos de trabalho do AWS Glue.

Para obter mais informações sobre casos de uso e opções, consulte o blog Optimizing Spark applications with workload partitioning in AWS Glue.