Utilizzare le tabelle transazionali con Dataproc Metastore

Le transazioni con semantica ACID sono supportate dai metastore Apache Hive in Dataproc Metastore. Per ulteriori informazioni, consulta Transazioni Hive. Queste transazioni sono attivate per impostazione predefinita su Hive 3.

Configurazioni

Per attivare il supporto delle transazioni, devi impostare le configurazioni lato server e lato client.

Configurazioni lato server

Le seguenti configurazioni lato server vengono impostate per impostazione predefinita durante la creazione del servizio da parte di Dataproc Metastore. Puoi scegliere di sostituirli inserendo le sostituzioni Chiave e Valore in Sostituzioni della configurazione Metastore.

  • metastore.compactor.initiator.on: indica se eseguire i thread di iniziativa e di pulizia nel servizio Dataproc Metastore.

    Imposta su true per attivare l'iniziatore.

  • metastore.compactor.worker.threads: il numero di thread worker del compattatore da eseguire su Dataproc Metastore.

    Imposta un numero positivo per attivare il compressore. Se imposti un numero superiore, il rendimento del servizio potrebbe essere compromesso, soprattutto se utilizzi il livello sviluppatore. Se questo numero deve essere modificato, ti consigliamo di utilizzare un valore inferiore, ad esempio 8.

  • hive.metastore.event.db.notification.api.auth: indica se il servizio Dataproc Metastore deve eseguire l'autorizzazione per le API relative alle notifiche del database.

    Imposta su false. Se impostato su true, solo i super user nelle impostazioni del proxy dispongono dell'autorizzazione. Per ulteriori informazioni sul privilegio proxy superutente, consulta Sicurezza dell'API di notifica Metastore.

Configurazioni lato client

Le configurazioni lato client vengono impostate nel client Hive come descritto in Convalidare le transazioni.

  • hive.support.concurrency: impostato su true per supportare le transazioni di inserimento, aggiornamento ed eliminazione.

  • hive.exec.dynamic.partition.mode: in modalità rigorosa, devi specificare almeno una partizione statica nel caso in cui tutte le partizioni vengano sovrascritte accidentalmente. In modalità non rigorosa, tutte le partizioni possono essere dinamiche.

    Impostato su nonstrict per supportare le transazioni di inserimento, aggiornamento ed eliminazione.

  • hive.txn.manager: impostato su org.apache.hadoop.hive.ql.lockmgr.DbTxnManager.

Convalida transazioni

Puoi convalidare le transazioni Hive utilizzando un cluster Dataproc che utilizza un servizio Dataproc Metastore su Hive 3.

Devi creare il cluster Dataproc nello stesso progetto del servizio Dataproc Metastore e con Hive 3. Le immagini Dataproc 2.0, 2.0-ubuntu18 e 2.0-debian10 supportano Hive 3 e le transazioni. Puoi scegliere di utilizzare il flag --image-version per impostare l'immagine 2.0. Ad esempio:

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

Le istruzioni riportate di seguito mostrano come convalidare le transazioni nel servizio Dataproc Metastore utilizzato da un cluster Dataproc.

  1. Accedi al cluster Dataproc tramite SSH. Puoi farlo da un browser o dalla riga di comando.

  2. Esegui il comando hive per aprire il client Hive:

    $> hive
    
  3. Configura le impostazioni lato client per attivare il supporto ACID di Hive per le transazioni nella sessione del client 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. Crea una tabella transazionale in cui eseguire inserimenti e aggiornamenti. Di seguito è riportato un esempio.

    1. Crea una tabella delle transazioni:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. Controlla se la tabella è transazionale:

      describe formatted <tableName>;
      

      Viene stampato un elenco delle proprietà della tabella. Una tabella transazionale contienetransactional=true nei parametri della tabella.

    3. Inserisci i dati nella tabella:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. Controlla la cartella delta creata nella directory student nella directory del magazzino del servizio. Vengono create più cartelle delta se esegui più istruzioni INSERT o UPDATE.
    4. Visualizza le compattazioni in esecuzione e i relativi stati. Il metastore Hive esegue un thread chiamato initiator ogni cinque minuti per verificare la presenza di tabelle che devono essere compattate e richiede la compattazione di queste tabelle.

      show compactions;
      
      1. Per avviare una compattazione manuale (minore o maggiore):

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

Passaggi successivi