Tabelas transacionais

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

Configurações

As configurações do servidor e do cliente precisam ser definidas 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 Como 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.

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

O cluster do Dataproc precisa ser criado no mesmo projeto que o serviço do 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. Use o comando hive para abrir o cliente Hive:

    $> hive
    
  3. Defina as configurações do cliente para ativar o suporte do Hive ACID para transações na sessão de 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. Inserir 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 "initerador" a cada cinco minutos para verificar se há tabelas para compactação e solicitações de 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