Utiliser des tables transactionnelles avec Dataproc Metastore

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 la page Transactions Hive. 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 afin d'activer la prise en charge 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 remplacer ces paramètres en saisissant Key (Clé) et Value (Valeur) dans la section Meta config overrides (Remplacement des configurations Metastore).

  • 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. La définition d'une valeur plus élevée peut affecter les performances du service, en particulier si vous disposez du niveau Développeur. Si ce nombre doit être ajusté, nous vous recommandons d'utiliser une valeur inférieure, telle que 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. Configurez les configurations côté client afin d'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 transactionnelle.

      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é "initiator" toutes les cinq minutes pour vérifier quelles tables doivent être compactées et demande le compactage pour ces tables.

      show compactions;
      
      1. Pour démarrer un compactage manuel (mineur ou majeur) :

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

Étape suivante