As transações com semântica ACID são suportadas por metastores do Apache Hive no Dataproc Metastore. Para mais informações, consulte o artigo Transações do Hive. Estas transações estão ativadas por predefinição no Hive 3.
Configurações
Tem de definir as configurações do lado do servidor e do cliente para ativar o suporte de transações.
Configurações do lado do servidor
As seguintes configurações do lado do servidor são definidas por predefinição durante a criação do serviço pelo Dataproc Metastore. Pode optar por substituir estas definições introduzindo substituições de Chave e Valor em Substituições da configuração do metadados.
metastore.compactor.initiator.on
: indica se os threads do iniciador e do limpador devem ser executados no serviço Dataproc Metastore.Defina como
true
para ativar o iniciador.metastore.compactor.worker.threads
: o número de threads de trabalho do compactador a executar no Dataproc Metastore.Definido como um número positivo para ativar o compactador. Se definir este valor para um número mais elevado, pode afetar o desempenho do serviço, especialmente se estiver no nível de programador. Se este número precisar de ser ajustado, recomendamos que use um valor inferior, como 8.
hive.metastore.event.db.notification.api.auth
: indica se o serviço Dataproc Metastore deve autorizar em relação às APIs relacionadas com notificações da base de dados.Definido como
false
. Se estiver definido comotrue
, apenas os superutilizadores nas definições de proxy têm autorização. Consulte o artigo Segurança da API de notificação do Metastore para mais informações sobre o privilégio de proxy de superutilizador.
Configurações do lado do cliente
As configurações do lado do cliente são definidas no cliente Hive, conforme descrito em Validar transações.
hive.support.concurrency
: definido comotrue
para suportar transações de inserção, atualização e eliminação.hive.exec.dynamic.partition.mode
: no modo restrito, tem de especificar, pelo menos, uma partição estática caso todas as partições sejam acidentalmente substituídas. No modo não restrito, todas as partições podem ser dinâmicas.Definido como
nonstrict
para suportar transações de inserção, atualização e eliminação.hive.txn.manager
: definido comoorg.apache.hadoop.hive.ql.lockmgr.DbTxnManager
.
Valide transações
Pode validar as transações do Hive através de um cluster do Dataproc que use um serviço do Dataproc Metastore no Hive 3.
Tem de criar o cluster do Dataproc no mesmo projeto que o serviço Dataproc Metastore e com o Hive 3. As imagens do Dataproc 2.0, 2.0-ubuntu18 e 2.0-debian10, suportam o Hive 3 e as transações. Pode usar a flag --image-version
para definir a imagem 2.0. Por 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 seguintes demonstram como validar transações no seu serviço Dataproc Metastore usado por um cluster do Dataproc.
SSH para o cluster do Dataproc. Pode fazê-lo a partir de um navegador ou da linha de comandos.
Execute o comando
hive
para abrir o cliente Hive:$> hive
Configure as configurações do lado do cliente para ativar o suporte de 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;
Crie uma tabela transacional para inserir e atualizar. Segue-se um exemplo.
Crie uma tabela de transações:
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
Verifique se a tabela é transacional:
describe formatted <tableName>;
É impressa uma lista das propriedades da tabela. Uma tabela transacional tem
transactional=true
nos respetivos parâmetros da tabela.Inserir dados na tabela:
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);
- Observe a pasta delta criada no diretório
student
no diretório de armazenamento de dados do serviço. São criadas várias pastas delta se executar várias declarações de inserção ou atualização.
- Observe a pasta delta criada no diretório
Veja que compactações estão em execução e os respetivos estados. O metastore do Hive executa um thread denominado iniciador a cada cinco minutos para verificar se existem tabelas que devem ser compactadas e solicita a compactação dessas tabelas.
show compactions;
Para iniciar uma compactação manual (menor ou maior):
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';