Utilizzo delle tabelle transazionali con Dataproc Metastore

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

Configurazioni

Devi impostare configurazioni lato server e lato client per abilitare il supporto delle transazioni.

Configurazioni lato server

Le seguenti configurazioni lato server sono impostate per impostazione predefinita durante la creazione del servizio da Dataproc Metastore. Puoi scegliere di eseguire l'override di questi valori inserendo gli override di Chiave e Valore in Override della configurazione di Metastore.

  • metastore.compactor.initiator.on: indica se eseguire l'iniziatore e i thread più chiari sul servizio Dataproc Metastore.

    Imposta su true per abilitare l'iniziatore.

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

    Imposta un numero positivo per abilitare il compattatore. L'impostazione di un numero maggiore potrebbe influire sulle prestazioni del servizio, soprattutto se ti trovi al livello sviluppatore. Se è necessario modificare questo numero, 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 correlate alle notifiche del database.

    Impostato su false. Se il criterio viene impostato su true, solo i super user nelle impostazioni proxy dispongono dell'autorizzazione. Consulta Sicurezza dell'API di notifica Metastore per ulteriori informazioni sul privilegio proxy super user.

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 l'inserimento, l'aggiornamento e l'eliminazione delle transazioni.

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

    Impostala su nonstrict per supportare l'inserimento, l'aggiornamento e l'eliminazione delle transazioni.

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

Convalidare le 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 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 seguenti mostrano come convalidare le transazioni nel servizio Dataproc Metastore utilizzato da un cluster Dataproc.

  1. SSH nel cluster Dataproc. Puoi eseguire questa operazione da un browser o dalla riga di comando.

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

    $> hive
    
  3. Imposta le configurazioni lato client per abilitare il supporto di Hive ACID per le transazioni nella sessione 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. Di seguito è riportato un esempio.

    1. Creare 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 contiene 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 servizio. Vengono create più cartelle delta se esegui più istruzioni di inserimento o aggiornamento.
    4. Visualizza quali compattazioni sono in esecuzione e i relativi stati. Il metastore Hive esegue un thread chiamato iniziatore ogni cinque minuti per controllare le tabelle dovute alla 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