Usar tabelas transacionais com o Dataproc Metastore

As transações com semântica ACID são compatíveis com os metastores do Apache Hive no metastore do Dataproc. Para saber mais informações, consulte Transações do Hive. Essas transações são ativadas por padrão no Hive 3.

.

Configurações

Defina as configurações do servidor e do lado do cliente para ativar o suporte à transação.

Configurações do servidor

As configurações do lado do servidor a seguir são definidas por padrão durante a criação do serviço pelo Dataproc Metastore. É possível optar por substituí-las inserindo modificações de chave e valor em Modificações de configuração do metastore

  • metastore.compactor.initiator.on: para executar os threads inicial e mais limpo no serviço Metastore do Dataproc.

    Defina como true para ativar o iniciador.

  • metastore.compactor.worker.threads: o número de linhas de execução de worker compactos ou a serem executadas no metastore do Dataproc.

    Defina como um número positivo para ativar o compressor. A definição de um número maior pode afetar o desempenho do serviço, especialmente se você estiver no Nível de desenvolvedor. Se for necessário ajustar esse número, recomendamos usar um valor menor, como 8.

  • hive.metastore.event.db.notification.api.auth: se o serviço Metastore do Dataproc precisa autorizar contra as APIs relacionadas às notificações do banco de dados.

    Defina como false. Se definido como true, apenas os superusuários nas configurações de proxy terão permissão. Consulte Segurança da API de notificação do Metastore para mais informações sobre o privilégio de proxy do superusuário.

Configurações do cliente

As configurações do cliente são definidas no cliente Hive, conforme descrito em Validar transações.

  • hive.support.concurrency: defina como true para aceitar transações de inserção, atualização e exclusão.

  • hive.exec.dynamic.partition.mode: no modo estrito, especifique pelo menos uma partição estática caso todas as partições sejam substituídas acidentalmente. Nesse modo, todas as partições podem ser dinâmicas.

    Defina como nonstrict para oferecer compatibilidade com a inserção, atualização e exclusão de transações.

  • hive.txn.manager: Defina como org.apache.hadoop.hive.ql.lockmgr.DbTxnManager.

Validar transações

Você pode validar transações do Hive usando um cluster do Dataproc que usa um serviço do metastore do Dataproc no Hive 3.

Você precisa criar o cluster do Dataproc no mesmo projeto que o serviço Metastore do Dataproc e com o Hive 3. As imagens do Dataproc 2.0, 2.0-ubuntu18 e 2.0-debian10, são compatíveis com o Hive 3 e as transações. É possível usar a sinalização --image-version para definir a imagem 2.0. Exemplo:

gcloud dataproc clusters create DATAPROC_CLUSTER_ID \
   --dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \
   --region=REGION \
   --image-version 2.0-debian10

As instruções a seguir demonstram como validar transações no serviço Metastore do Dataproc usado por um cluster do Dataproc.

  1. Conecte-se por SSH ao cluster do Dataproc. Faça isso em um navegador ou na linha de comando.

  2. Execute o comando hive para abrir o cliente Hive:

    $> hive
    
  3. Defina as configurações do cliente para ativar o suporte ACID do Hive para transações na sessão do cliente do Hive:

    SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
    SET hive.support.concurrency=true;
    SET hive.exec.dynamic.partition.mode=nonstrict;
    
  4. Crie uma tabela transacional para inserir e atualizar. Veja um exemplo abaixo.

    1. Crie uma tabela de transações:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. Verifique se a tabela é transacional:

      describe formatted <tableName>;
      

      Uma lista das propriedades da tabela será impressa. Uma tabela transacional tem transactional=true nos parâmetros dela.

    3. Insira dados na tabela:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. Observe a pasta delta criada no diretório student no diretório de utensílios do serviço. Várias pastas delta serão criadas se você executar várias instruções de inserção ou atualização.
    4. Veja quais compactações estão sendo executadas e os status delas. O metastore do Hive executa uma linha de execução chamada iniciador a cada cinco minutos para verificar as tabelas que estão devidas para a compactação e solicita a compactação para essas tabelas.

      show compactions;
      
      1. Para iniciar uma compactação manual (menor ou maior):

          ALTER TABLE student COMPACT 'minor';
          ALTER TABLE student COMPACT 'major';
        

A seguir