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 surtrue
, 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 surtrue
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 surorg.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.
Connectez-vous en SSH au cluster Dataproc. Vous pouvez le faire depuis un navigateur ou depuis la ligne de commande.
Exécutez la commande
hive
pour ouvrir le client Hive:$> hive
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;
Créez une table transactionnelle destinée aux insertions et modifications. En voici un exemple :
Créez une table transactionnelle.
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
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.Insérez des données dans la table.
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);
- 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.
- Observez le dossier delta créé dans le répertoire
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;
Pour démarrer un compactage manuel (mineur ou majeur) :
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';