Utilizzare le tabelle transazionali con Dataproc Metastore

Le transazioni con semantica ACID sono supportate dai metastori Apache Hive in Dataproc Metastore. Per saperne di più, consulta Transazioni Hive. Queste transazioni sono abilitate per impostazione predefinita su Hive 3.

Configurazioni

Per abilitare 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 sostituirle inserendo le sostituzioni di Chiave e Valore in Sostituzioni della configurazione del metastore.

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

    Imposta su true per abilitare l'inizializzatore.

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

    Imposta un numero positivo per abilitare il compattatore. L'impostazione di un numero più elevato può influire sul rendimento del servizio, soprattutto se utilizzi il livello Developer. 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 autorizzare le API correlate alle notifiche del database.

    Imposta su false. Se impostato su true, solo i superuser nelle impostazioni del proxy hanno l'autorizzazione. Per saperne di più sul privilegio del proxy superuser, consulta Sicurezza dell'API di notifica del metastore.

Configurazioni lato client

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

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

  • hive.exec.dynamic.partition.mode : in modalità StrictMode, 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.

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

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

Convalidare le transazioni

Puoi convalidare le transazioni Hive utilizzando un cluster Managed Service for Apache Spark che utilizza un servizio Dataproc Metastore su Hive 3.

Devi creare il cluster Managed Service for Apache Spark nello stesso progetto del servizio Dataproc Metastore e con Hive 3. Le immagini di Managed Service for Apache Spark 2.0, 2.0-ubuntu18 e 2.0-debian10, supportano Hive 3 e le transazioni. Puoi 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 seguenti istruzioni mostrano come convalidare le transazioni nel servizio Dataproc Metastore utilizzato da un cluster Managed Service for Apache Spark.

  1. Connettiti tramite SSH al cluster Managed Service for Apache Spark. Puoi farlo da un browser o dalla riga di comando.

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

    $> hive
    
  3. Configura le configurazioni lato client per abilitare 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 inserire e aggiornare i dati. 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. Verifica se la tabella è transazionale:

      describe formatted <tableName>;
      

      Viene stampato un elenco delle proprietà della tabella. Una tabella transazionale ha transactional=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. Osserva la cartella delta creata nella directory student nella directory del warehouse del servizio. Se esegui più istruzioni di inserimento o aggiornamento, vengono create più cartelle delta.
    4. Visualizza le compattazioni in esecuzione e i relativi stati. Il metastore Hive esegue un thread denominato inizializzatore ogni cinque minuti per verificare le tabelle per le quali è prevista la compattazione e richiede la compattazione per 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