Tables transactionnelles

Les transactions dotées de la sémantique ACID sont acceptées par les métastores Apache Hive dans Dataproc Metastore. Pour en savoir plus, consultez Hive Transactions. Ces transactions sont activées par défaut sur Hive 3.

Configurations

Vous devez définir des configurations côté serveur et côté client pour activer la compatibilité des transactions.

Configurations côté serveur

Les configurations côté serveur suivantes sont définies par défaut lors de la création du service par Dataproc Metastore. Vous pouvez choisir de les remplacer en saisissant les remplacements de clé et de valeur sous Remplacements de configuration dans le métastore.

  • metastore.compactor.initiator.on : indique si l'initiateur et le nettoyeur des threads du service Dataproc Metastore sont requis.

    Définissez la valeur sur true pour activer l'initiateur.

  • metastore.compactor.worker.threads : nombre de threads de calcul compacts à exécuter sur le métastore Dataproc.

    Définissez un nombre positif pour activer le compacteur. Définir un nombre plus élevé peut affecter les performances du service, en particulier si vous êtes au niveau développeur. Si ce nombre doit être modifié, nous vous recommandons d'utiliser une valeur inférieure, par exemple 8.

  • hive.metastore.event.db.notification.api.auth : indique si le service Dataproc Metastore doit autoriser les API associées aux notifications de base de données.

    Variable définie sur false. Si définie sur true, seuls les super-utilisateurs des paramètres de proxy sont autorisés. Pour en savoir plus sur le privilège du proxy super-utilisateur, consultez la section Sécurité de l'API de notification Metastore.

Configurations côté client

Les configurations côté client sont définies dans le client Hive, comme décrit dans la section Valider des transactions.

  • hive.support.concurrency : définie sur true pour accepter les transactions d'insertion, de modification et de suppression.

  • hive.exec.dynamic.partition.mode : en mode strict, vous devez spécifier au moins une partition statique au cas où toutes les partitions seraient accidentellement écrasées. En mode non strict, toutes les partitions peuvent être dynamiques.

    Définissez la valeur sur nonstrict pour accepter les transactions d'insertion, de modification et de suppression.

  • hive.txn.manager : définissez sur org.apache.hadoop.hive.ql.lockmgr.DbTxnManager.

Valider des transactions

Vous pouvez valider des transactions Hive à l'aide d'un cluster Dataproc utilisant un service Dataproc Metastore sur Hive 3.

Vous devez créer le cluster Dataproc dans le même projet que le service Dataproc Metastore et avec Hive 3. Les images Dataproc 2.0, 2.0-ubuntu18 et 2.0-debian10, sont compatibles avec Hive 3 et les transactions. Vous pouvez utiliser l'option --image-version pour définir l'image 2.0. Exemple :

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

Les instructions suivantes montrent comment valider des transactions dans votre service Dataproc Metastore utilisé par un cluster Dataproc.

  1. Connectez-vous en SSH au cluster Dataproc. Vous pouvez le faire depuis un navigateur ou depuis la ligne de commande.

  2. Exécutez la commande hive pour ouvrir le client Hive:

    $> hive
    
  3. Définissez les configurations côté client pour activer la compatibilité ACID Hive pour les transactions dans la session 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. Créez une table transactionnelle destinée aux insertions et modifications. En voici un exemple :

    1. Créez une table de transactions:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. Vérifiez si la table est transactionnelle:

      describe formatted <tableName>;
      

      La liste des propriétés de la table est affichée. Une table transactionnelle contient le paramètre transactional=true dans ses paramètres de table.

    3. Insérez des données dans la table:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. Observez le dossier delta créé dans le répertoire student du répertoire d'entrepôt du service. Plusieurs dossiers delta sont créés si vous exécutez plusieurs instructions d'insertion ou de modification.
    4. Découvrez les compactages en cours d'exécution et leur état. Le métastore Hive exécute un thread appelé l'initiateur toutes les cinq minutes pour rechercher les tables à régler en cas de compactage et demande un compactage pour ces tables.

      show compactions;
      
      1. Pour lancer un compactage manuel ou mineur :

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

Étape suivante