Usa tablas transaccionales con Dataproc Metastore

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

Configuraciones

Debes establecer las configuraciones del servidor y del cliente para habilitar la compatibilidad con transacciones.

Configuraciones del servidor

Las siguientes configuraciones del servidor se establecen de forma predeterminada durante la creación del servicio en Dataproc Metastore. Puedes anular estos valores si reemplazas Key y Value en Anulaciones de configuración del almacén de metadatos.

  • metastore.compactor.initiator.on: Indica si se debe ejecutar el subproceso de inicio y limpieza en el servicio de Dataproc Metastore.

    Se configura como true para habilitar el iniciador.

  • metastore.compactor.worker.threads: Cantidad de subprocesos de trabajador compactador que se ejecutan en Dataproc Metastore.

    Configúralo en un número positivo para habilitar el compactador. Configurar esta opción en un número mayor puede afectar el rendimiento del servicio, en especial si estás en el nivel del desarrollador. Si es necesario modificar este número, te recomendamos que uses un valor inferior, como 8.

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

    Se define en false. Si se configura como true, solo los superusuarios en la configuración de proxy tienen permiso. Consulta Seguridad de la API de notificación del almacén de metadatos para obtener más información sobre el privilegio de proxy de superusuario.

Configuraciones del cliente

Las configuraciones del cliente se establecen en el cliente de Hive, como se describe en Valida transacciones.

  • hive.support.concurrency: Configurado como true para que admita transacciones de inserción, actualización y eliminación.

  • hive.exec.dynamic.partition.mode: En modo estricto, debes especificar al menos una partición estática en caso de que todas las particiones se reemplacen accidentalmente. En modo no estricto, todas las particiones pueden ser dinámicas.

    Configurado como nonstrict para que admita transacciones de inserción, actualización y eliminación.

  • hive.txn.manager: Configurado como org.apache.hadoop.hive.ql.lockmgr.DbTxnManager.

Valida las 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 de 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 configurar 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 instrucciones siguientes, se demuestra cómo validar transacciones en tu servicio de Dataproc Metastore que usa un clúster de Dataproc.

  1. Establece una conexión SSH en el clúster de Dataproc. 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. Establece las configuraciones del lado del cliente a fin de habilitar la compatibilidad con ACID de Hive para las transacciones en la sesión de 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 para insertar y actualizar. 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. Revisa si la tabla es transaccional:

      describe formatted <tableName>;
      

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

    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 del almacén del servicio. Se crean múltiples carpetas delta si ejecutas varias instrucciones de inserción o actualización.
    4. Observa qué compactaciones se están ejecutando y sus estados. El almacén de metadatos de Hive ejecuta un subproceso llamado iniciador cada cinco minutos para verificar las tablas que se deben a la compactación y solicita la compactación para esas tablas.

      show compactions;
      
      1. Para iniciar una compactación manual (menor o mayor), haz lo siguiente:

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

¿Qué sigue?