View a markdown version of this page

Entendendo os registros editados - AWS Clean Rooms

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

Entendendo os registros editados

AWS Clean Rooms edita os registros do Spark antes de exportá-los para que os registros exportados não revelem o conteúdo dos dados de um membro nem identifiquem a tabela e os locais de armazenamento dos dados de origem. AWS Clean Rooms reconstrói os registros de registro e emite somente os campos que são conhecidos como seguros de compartilhar. Algumas informações são preservadas deliberadamente, incluindo os nomes das colunas que uma consulta lê.

A redação não faz distinção entre membros. Espere que seus próprios nomes de tabela e valores de consulta sejam retirados dos registros que você exporta para suas próprias consultas, nos mesmos termos das informações de outro membro. Os campos vazios e de espaço reservado são normais e não indicam um problema com a exportação.

O que os registros exportados contêm

Os registros exportados preservam as informações necessárias para diagnosticar falhas e problemas de desempenho:

  • Horários — Durações de tarefas e estágios, tempo de execução, tempo de CPU, tempo de coleta de lixo, tempo de desserialização e serialização de resultados, tempo de espera aleatória e tempo de gravação aleatória são todos preservados com exatidão. Os horários são o principal sinal para a análise de desempenho.

  • Identificadores e contagens de execução do Spark — IDs de tarefas, estágios, tarefas e tentativas, contagens de partições, contagens de tarefas, IDs de executor, nomes de host e portas.

  • Estrutura do plano de consulta — A árvore física do plano, incluindo nomes de operadores HashAggregateSortMergeJoin, comoExchange, e, para que você possa ver a forma do plano e como o mecanismo escolheu executar sua consulta. Um nome de operador que não é do Spark aparece como[REDACTED].

  • Nomes das colunas de origem — Nomes de colunas que vêm de uma tabela que está sendo digitalizada, para que você possa ver quais colunas são usadas em filtros, uniões e agregações. Os nomes que uma consulta cria, como um alias, não são preservados. Para obter mais informações, consulte Como os nomes de colunas e tabelas são tratados.

  • Tipo de escaneamento e formato de arquivo — Um operador de escaneamento normalmente inclui o nome da tabela que está sendo lida. O nome é substituído por um formulário que identifica somente o tipo de digitalização e o formato do arquivo, por exemploScan parquet, para que você ainda possa saber como os dados estão sendo lidos. Se o formato do arquivo não for AWS Clean Rooms reconhecido, o operador aparecerá como Scan sem formato.

  • Classes de erro — Quando uma consulta falha, os registros identificam o tipo de erro, mas não os dados que o causaram. Eles relatam a classe de erro do Spark, seu código SQLSTATE e a mensagem padrão que o Spark define para essa classe, com os <placeholder> tokens da mensagem não preenchidos, porque os valores que os preencheriam vêm dos dados. Uma conversão falhada, por exemplo, relatórios [CAST_INVALID_INPUT] e uma mensagem descrevendo que um valor de um tipo não pode ser convertido para outro sem mostrar o valor. Quando uma falha causa outra, as classes de erro na cadeia são relatadas juntas, com até alguns níveis de profundidade. Uma falha que não se originou no Spark é relatada apenas como um erro que não seja do Spark, sem classe.

    Falhas de tarefas individuais relatam apenas o tipo de falha, comoExceptionFailure. Eles não carregam uma classe de erro própria.

  • Configuração do Spark — Configurações cujos valores são sempre números, tamanhos ou palavras-chave fixas e que geralmente são necessárias para diagnosticar um problema de desempenho: núcleos e memória do driver e do executor, frações de memória e configurações off-heap, configurações de alocação dinâmica, configurações adaptativas de execução de consultas, paralelismo padrão e contagem aleatória de partições, limite de união de transmissão, tamanho máximo da partição, configurações de compressão aleatória, modo agendador e o serializador. A maioria das outras configurações está editada, pois elas podem conter caminhos, identificadores e texto de consulta. Uma dessas configurações também é omitida se seu valor não for um número simples, tamanho ou palavra-chave.

  • Utilização de memória e volumes de dados — pico de memória de execução, vazamento de memória e disco, memória JVM do executor, tamanhos de dados em cache, contagem aleatória de blocos e número de bytes e registros lidos e gravados, incluindo volumes aleatórios de leitura e gravação. Esses números são arredondados para baixo em vez de exatos. Para obter mais informações, consulte Como os registros editados diferem dos registros padrão do Spark.

  • Por que um executor parou — Uma categoria para cada executor que parou, como ficar sem memória, ser desligado pelo motorista, ser desativado ou não responder. Geralmente, essa é a maneira mais rápida de explicar por que uma consulta falhou. Os registros também registram qualquer executor ou host no qual o Spark parou de agendar o trabalho, o que é útil quando as falhas continuam recorrentes em um só lugar. Para obter mais informações, consulte Como os registros editados diferem dos registros padrão do Spark.

  • Detalhe da falha de busca aleatória — Quando uma tarefa não consegue obter a saída aleatória, os identificadores de reprodução aleatória, mapa, índice de mapa e redução são preservados, junto com o executor e o host contra os quais a busca foi tentada. Isso permite distinguir falhas repetidas em uma única fonte, que geralmente indicam um executor que não responde, de falhas espalhadas por várias fontes, que geralmente indicam problemas transitórios na rede.

O que está redigido

  • Valores de dados — valores literais de sua consulta e valores de dados de qualquer tabela. Um predicado de filtro mostra qual coluna foi filtrada, mas não o valor com o qual ela foi comparada.

  • Nomes de tabelas e locais de armazenamento — Identificadores de tabelas, nomes de bancos de dados e caminhos do Amazon S3.

  • Texto da consulta — A instrução SQL e qualquer descrição associada à consulta.

  • Texto da mensagem de erro e rastreamentos de pilha — Como uma mensagem de erro pode citar o valor que causou o erro, o texto da mensagem e os rastreamentos de pilha são removidos. O nome da classe de exceção subjacente também é editado, porque uma exceção lançada por uma função definida pelo usuário carrega um nome que o autor da consulta escolheu. Em vez disso, a classe de erro do Spark é preservada para a consulta e o trabalho. O motivo pelo qual uma etapa falhou e o motivo pelo qual uma tarefa foi encerrada também estão redigidos.

  • Nomes que o Spark registra para seu próprio trabalho — Os nomes e sites de chamada dos estágios e conjuntos de dados armazenados em cache e o nome do aplicativo. Esses são campos de texto livre que podem ecoar um nome de tabela ou um caminho de armazenamento. Portanto, no Spark History Server, os estágios aparecem sem as descrições que normalmente os identificariam e, em vez disso, você localiza um estágio por seu ID e seu lugar no plano.

  • Nomes de colunas computados e com alias — nomes que uma consulta cria em vez de ler de uma tabela, porque o mecanismo de consulta gera esse nome a partir da expressão e o nome pode conter um valor. Eles aparecem como um identificador numérico, como#42. Para obter mais informações, consulte Como os nomes de colunas e tabelas são tratados.

  • Detalhe do escaneamento — O esquema de leitura, os predicados do filtro aplicados em cada escaneamento (filtros suspensos, filtros de partição e filtros de dados) e a localização dos dados.

  • Links para registros do driver e do executor — os URLs de registro que o Spark grava para cada executor e para o driver. No Spark History Server, os links que normalmente abririam um log do driver ou do executor não são preenchidos.

  • Identificadores de recursos e endpoints de serviço — IDs de AWS contas, ARNs, como os das funções e AWS KMS chaves do IAM, e os URLs dos endpoints dos serviços que AWS Clean Rooms chamam para executar sua consulta.

  • AWS detalhes do serviço — nomes de AWS Clean Rooms classes, entradas de classpath, configuração da JVM e propriedades do Hadoop e do sistema. As propriedades das tarefas também são editadas, além dos identificadores que o Spark History Server precisa para associar as tarefas à execução da consulta à qual elas pertencem.

Como os nomes de colunas e tabelas são tratados

Os registros exportados mantêm os nomes das colunas que uma consulta lê. Os nomes das tabelas e os aliases de coluna criados na consulta são editados. Um nome que uma consulta cria é gerado a partir da expressão que ela nomeia, e esse nome gerado pode conter um valor da consulta: SELECT 'confidential' produz uma coluna chamadaconfidential. Portanto, um nome aparece somente quando pode ser rastreado até uma coluna de uma tabela digitalizada. Todos os outros nomes são substituídos por um identificador numérico.

Por exemplo, considere a seguinte consulta.

SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id

Os registros exportados representam isso da seguinte forma.

Elemento da consulta Nos registros exportados
As colunas user_idamount, e region Apresente por nome, para que você possa ver o que a consulta foi agrupada, somada e filtrada
A tabelasales, seu banco de dados e seu local de armazenamento Não está presente
O valor 'us-west' Substituído por [REDACTED]
O alias total Substituído por um identificador numérico, porque a consulta criou o nome em vez de lê-lo em uma tabela

Como os registros editados diferem dos registros padrão do Spark

A contagem de linhas e os volumes de dados são aproximados

Contagens de registros, volumes de bytes, tamanhos de vazamentos e medições de pico de memória são arredondados para uma ordem de magnitude, porque uma contagem exata pode revelar o tamanho dos dados de outro membro. Uma tarefa que lê 1.342 registros reporta 1.000. Medições abaixo de 100 são relatadas como 0.

Como cada número é arredondado para baixo, uma tarefa que relata 100 e uma tarefa que relata 1.000 podem ter lido quase o mesmo número de registros. Trate os números que diferem em apenas uma ordem de magnitude com cuidado; diferenças maiores, como 1.000 contra 10.000.000, ainda indicam distorção de forma confiável.

Os valores editados assumem mais de uma forma

No plano de consulta, um valor redigido aparece como texto literal. [REDACTED] Em outras partes dos registros, um campo editado geralmente está vazio. Pode ser uma string em branco, uma lista vazia ou um valor totalmente ausente, para que o Spark History Server ainda possa ler o registro. Ambas as formas significam a mesma coisa.

Os planos de consulta não usam sintaxe de operador familiar

As expressões no plano são escritas como chamadas de função em vez de em notação matemática. Uma comparação aparece como EqualTo(#12, [REDACTED]) em vez de(a = 5). Os nomes das funções também aparecem nesse formato, e os nomes das funções definidas pelo usuário nem aparecem.

Somente o plano físico está incluído

Os registros exportados contêm o plano físico. Eles não contêm os planos lógicos analisados, analisados ou otimizados que normalmente os acompanham.

Per-task as métricas são editadas

O gráfico do plano lista as métricas que cada operador relata, como o número de linhas de saída. As métricas relatadas por tarefas individuais não mostram nenhum valor, porque os números por tarefa por trás delas são removidos. Em vez disso, para números em nível de tarefa, use as métricas por tarefa na visualização do palco.

As métricas do Spark Driver são arredondadas para baixo

As métricas que o Spark calcula no driver, incluindo aquelas para transmissões, digitalizações e gravações, relatam um valor, mas ele é arredondado para uma ordem de magnitude pelo mesmo motivo que a contagem de registros e os volumes de dados: um número exato pode revelar o tamanho dos dados de outro membro.

Somente o registro de eventos é exportado

A exportação contém o registro de eventos do Spark. Ele não contém o driver de formato livre e a saída do executor que o Spark grava junto com ele, porque uma única linha dessa saída pode conter um nome de tabela, um caminho de armazenamento ou um valor de dados. O diagnóstico deve ser feito a partir do registro de eventos.

Falhas do executor mostram mensagens de erro genéricas

Como o motivo livre pelo qual um executor parou pode conter detalhes do AWS Clean Rooms serviço, os registros relatam uma mensagem de erro geral, como uma saída sem memória, um desligamento iniciado pelo driver, um executor desativado ou um processo perdido. Esse registro é específico AWS Clean Rooms e não é um evento padrão do Spark, então o Spark History Server e outras ferramentas podem não exibi-lo. Se você não o vê, você pode encontrá-lo no arquivo de registro de eventos exportado.

Registros não reconhecidos são editados por padrão

Se um registro de registro não for AWS Clean Rooms reconhecido, todo o texto será substituído por[REDACTED], inclusive os nomes dos campos, e todos os números serão substituídos por zero. Somente o tipo de registro é preservado. Esse registro não contém informações de diagnóstico.