Usar tablas transaccionales con Dataproc Metastore

Dataproc Metastore admite transacciones con semántica ACID en almacenes de metadatos de Apache Hive. Para obtener más información, consulta Transacciones de Hive. Estas transacciones están habilitadas de forma predeterminada en Hive 3.

Configuraciones

Para habilitar la compatibilidad con transacciones, debes definir las configuraciones del servidor y del cliente.

Configuraciones del lado del servidor

Dataproc Metastore define las siguientes configuraciones del lado del servidor de forma predeterminada durante la creación del servicio. Para anularlos, introduzca los valores de Clave y Valor en Anulaciones de configuración de metastore.

  • metastore.compactor.initiator.on: indica si se deben ejecutar los hilos de iniciador y limpiador en el servicio Dataproc Metastore.

    Selecciona true para habilitar el iniciador.

  • metastore.compactor.worker.threads: número de hilos de trabajo de compactador que se ejecutan en Dataproc Metastore.

    Asigna un número positivo para habilitar el compresor. Si asigna un número más alto, puede que afecte al rendimiento del servicio, sobre todo si tiene el nivel de desarrollador. Si es necesario modificar este número, te recomendamos que uses un valor inferior, como 8.

  • hive.metastore.event.db.notification.api.auth: indica si el servicio Dataproc Metastore debe autorizar las APIs relacionadas con las notificaciones de la base de datos.

    Su valor debe ser false. Si se define como true, solo tendrán permiso los superusuarios de proxy settings. Consulta más información sobre el privilegio de proxy de superusuario en Seguridad de la API de notificaciones de Metastore.

Configuraciones del lado del cliente

Las configuraciones del lado del cliente se definen en el cliente de Hive, tal como se describe en Validar transacciones.

  • hive.support.concurrency: se ha definido como true para admitir transacciones de inserción, actualización y eliminación.

  • hive.exec.dynamic.partition.mode: en el modo estricto, debes especificar al menos una partición estática por si se sobrescriben todas las particiones por error. En el modo no estricto, todas las particiones pueden ser dinámicas.

    Definir como nonstrict para admitir transacciones de inserción, actualización y eliminación.

  • hive.txn.manager: asigna el valor org.apache.hadoop.hive.ql.lockmgr.DbTxnManager.

Validar transacciones

Puedes validar las transacciones de Hive con un clúster de Dataproc que use un servicio de Dataproc Metastore en Hive 3.

Debes crear el clúster de Dataproc en el mismo proyecto que el servicio Dataproc Metastore y con Hive 3. Las imágenes de Dataproc 2.0, 2.0-ubuntu18 y 2.0-debian10, admiten Hive 3 y transacciones. Puedes usar la marca --image-version para definir la imagen 2.0. Por ejemplo:

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

En las siguientes instrucciones se muestra cómo validar las transacciones en tu servicio Dataproc Metastore, que utiliza un clúster de Dataproc.

  1. Conéctate al clúster de Dataproc mediante SSH. Puedes hacerlo desde un navegador o desde la línea de comandos.

  2. Ejecuta el comando hive para abrir el cliente de Hive:

    $> hive
    
  3. Configura el lado del cliente para habilitar la compatibilidad con ACID de Hive para las transacciones en la sesión del cliente de 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 tabla transaccional en la que insertar y actualizar datos. A continuación, se muestra un ejemplo.

    1. Crea una tabla de transacciones:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. Comprueba si la tabla es transaccional:

      describe formatted <tableName>;
      

      Se imprimirá una lista de las propiedades de la tabla. Una tabla transaccional tiene transactional=true en sus parámetros.

    3. Inserta datos en la tabla:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. Observa la carpeta delta creada en el directorio student del directorio warehouse del servicio. Se crean varias carpetas delta si ejecutas varias instrucciones de inserción o actualización.
    4. Consulta qué compactaciones se están ejecutando y sus estados. El metastore de Hive ejecuta un hilo llamado iniciador cada cinco minutos para comprobar si hay tablas que deban compactarse y solicita la compactación de esas tablas.

      show compactions;
      
      1. Para iniciar una compactación manual (menor o mayor), sigue estos pasos:

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

Siguientes pasos