Pular para o conteúdo principal

Configurar as definições relacionadas ao serviço de commit do Databricks S3

Databricks execução a commit serviço que coordena as gravações em Amazon S3 de vários clusters. Esse serviço é executado no Databricks plano de controle. Para aumentar a segurança, o senhor pode desativar a otimização do upload direto do serviço, conforme descrito em Desativar a otimização do upload direto. Para restringir ainda mais o acesso aos seus buckets S3, consulte Restringir o acesso a endereços IP específicos.

Se o senhor receber o alerta AWS GuardDuty relacionado ao serviço S3 commit , consulte AWS GuardDuty alerta relacionado ao serviço S3 commit.

Sobre o serviço de commit

O serviço S3 commit ajuda a garantir a consistência das gravações em vários clusters em uma única tabela em casos específicos. Por exemplo, o serviço commit ajuda a Delta Lake a implementar transações ACID.

Na configuração default, Databricks envia credenciais temporárias AWS do plano compute para o plano de controle na chamada commit serviço API. As credenciais de perfil de instância são válidas por seis horas.

O plano compute grava dados diretamente em S3 e, em seguida, o serviço S3 commit no plano de controle fornece controle de simultaneidade ao finalizar o commit log upload (completando a multiparte upload descrita abaixo). O serviço commit não lê nenhum dado de S3. Ele coloca um novo arquivo no S3 se ele não existir.

Os dados mais comuns gravados no S3 pelo serviço de commit da Databricks são o log Delta, que contém agregados estatísticos dos seus dados, como os valores mínimo e máximo da coluna. A maioria dos dados de log do Delta é enviada para o S3 a partir do plano de controle usando um upload de várias partes do Amazon S3.

Após os estágios de agrupamento dos dados multipartes para escrever o Delta log para S3, o S3 commit serviço no plano de controle Databricks finaliza o S3 multiparte upload informando ao S3 que ele está completo. Como uma otimização de desempenho para atualizações muito pequenas, em default o serviço commit às vezes envia pequenas atualizações diretamente do plano de controle para S3. Essa otimização de atualização direta pode ser desativada. Consulte Desativar a otimização de upload direto.

Além do Delta Lake, os seguintes recursos do Databricks usam o mesmo serviço de commit do S3:

O serviço de commit é necessário porque a Amazon não fornece uma operação que coloca um objeto somente se ele ainda não existir. O Amazon S3 é um sistema distribuído. Se o S3 receber várias solicitações de gravação para o mesmo objeto simultaneamente, ele substituirá todos, exceto o último objeto gravado. Sem a capacidade de verificar centralmente commits, commits simultâneos de clusters diferentes corromperiam tabelas.

AWS Alerta do GuardDuty relacionado a serviço S3 commit

important

confirmar em tabelas gerenciar por Unity Catalog não acionar o alerta do GuardDuty.

Se o senhor utilizar o AWS GuardDuty e acessar o uso de dados AWS IAM instance profile, o GuardDuty poderá criar alertas para default Databricks comportamentos relacionados a Delta Lake, transmissão estructurada, Auto Loader, ou COPY INTO. Esses alertas estão relacionados à detecção de exfiltração de credenciais de instância, que é ativada pelo site default. Esses alertas incluem o título UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS.

O senhor pode configurar a sua implantação Databricks para abordar o alerta do GuardDuty relacionado ao serviço S3 commit criando um AWS instance profile que assume a função do seu acesso original aos dados S3 IAM role.

Como alternativa ao uso de credenciais instance profile, esse novo instance profile pode configurar o clustering para assumir uma função com curta duração tokens. Esse recurso já existe em todas as versões recentes do Databricks Runtime e pode ser aplicado globalmente por meio da política de cluster.

  1. Se o senhor ainda não tiver feito isso, crie um arquivo instance profile para acessar os dados do S3. Este instance profile usa as credenciais do instance profile para acessar diretamente os dados do S3.

    Esta seção se refere à função ARN neste instance profile como <data-role-arn>.

  2. Crie um novo instance profile que usará o tokens e fará referência ao seu instance profile que acessa diretamente os dados. Seu clustering fará referência a esse novo instance profile baseado em tokens. Veja o tutorial: Configurar o acesso S3 com um instance profile.

    Esse instance profile não precisa de qualquer acesso direto ao S3.Em vez disso, ele precisa apenas das permissões para assumir a IAM role que você usa para acesso aos dados. Esta seção se refere à função ARN neste instance profile como <cluster-role-arn>.

    1. Adicione uma política IAM anexada na nova IAM role do instance profile de cluster (<cluster-role-arn>). Adicione a seguinte declaração de política à sua nova IAM role do instance profile do cluster e substitua <data-role-arn> pelo ARN de seu instance profile original que acessa seu bucket.

      JSON
      {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "<data-role-arn>"
      }
    2. Adicione uma declaração de política de confiança à sua IAM role de acesso a dados existente e substitua <cluster-role-arn> pelo ARN do instance profile original que acessa seu bucket.

      JSON
      {
      "Effect": "Allow",
      "Principal": {
      "AWS": "<cluster-role-arn>"
      },
      "Action": "sts:AssumeRole"
      }
  3. Para usar o código do notebook que faz conexão direta com o S3 sem usar DBFS, configure seus clusters para usar o novo instance profile baseado em tokens e assumir a função de acesso a dados.

    • Configure um cluster para acesso do S3 a todos os buckets. Adicione o seguinte à configuração do Spark do cluster:

      ini
      fs.s3a.credentialsType AssumeRole
      fs.s3a.stsAssumeRole.arn <data-role-arn>
    • Você pode configurar isso para um bucket específico:

      ini
      fs.s3a.bucket.<bucket-name>.aws.credentials.provider org.apache.hadoop.fs.s3a.auth.AssumedRoleCredentialProvider
      fs.s3a.bucket.<bucket-name>.assumed.role.arn <data-role-arn>

Desativar a otimização do upload direto

Como uma otimização de desempenho para atualizações muito pequenas, por padrão, o serviço de confirmação às vezes envia pequenas atualizações diretamente do plano de controle para o S3. Para desativar essa otimização, defina o parâmetro spark.hadoop.fs.s3a.databricks.s3commit.directPutFileSizeThreshold do Spark como 0. Você pode aplicar essa configuração na configuração do Spark do cluster ou defini-la usando as políticas do cluster.

Desativar esse recurso pode resultar em um pequeno impacto no desempenho para consultas de transmissão estruturada quase em tempo real com pequenas atualizações constantes. Considere testar o impacto no desempenho com seus dados antes de desativar esse recurso na produção.

Restrinja o acesso a endereços IP específicos

O senhor pode limitar os buckets S3 específicos para que sejam acessíveis somente a partir de endereços IP específicos. Por exemplo, o senhor pode restringir o acesso apenas ao seu próprio ambiente e aos endereços IP do plano de controle Databricks, incluindo o serviço S3 commit . Isso reduz o risco de que as credenciais sejam usadas em outros locais. Consulte (Opcional) Restringir o acesso aos buckets S3.