Activación de ACID de Hive

Si está en Big Data Service 3.0.9+, tanto Spark como Hive utilizan el mismo catálogo 'hive' y ACID en Hive está desactivado por defecto. Para activar ACID, se deben actualizar las siguientes configuraciones mediante la interfaz de usuario de Ambari. Después de activar ACID en Hive, Spark no puede leer/escribir en tablas gestionadas por Hive. Por lo tanto, asegúrese de actualizar el catálogo en Spark. Solo la tabla externa funciona correctamente desde Spark.

  1. Acceda a Apache Ambari.
  2. En la barra de herramientas lateral, en Servicios, seleccione Hive.
  3. Configuraciones.
  4. En Custom hive-site, introduzca la siguiente información de configuración:
    • Busque hive.support.concurrency: active y, a continuación, guarde
    • Busque hive.txn.manager: actualice el valor a org.apache.hadoop.hive.ql.lockmgr.DbTxnManager y, a continuación, guarde
    • Buscar hive.enforce.bucketing: activar
    • Busque hive.exec.dynamic.partition.mode: actualice a Nonstrict y, a continuación, guarde
    • Busque hive.compactor.initiator.on: active y, a continuación, guarde
    • Busque hive.compactor.worker.threads: defina en 5 y, a continuación, guarde
    • Busque hive.strict.managed.tables: actualice a True y, a continuación, guarde
    • Busque hive.create.as.insert.only: active y, a continuación, guarde
    • Busque metastore.create.as.acid: active y, a continuación, guarde
  5. Reinicie todos los servicios afectados.
    Nota

    Si crea una tabla con TBLPROPERTIES (transactional=true,transactional_properties=insert_only), al realizar una inserción normal en el comando de tabla se produce un error con el siguiente error en los logs de hiveserver/hivemetastore.Caused by: MetaException(message:Your client does not appear to support insert-only tables. To skip capability checks, please set metastore.client.capability.check to false. This setting can be set globally, or on the client for the current metastore session. Note that this may lead to incorrect results, data loss, undefined behavior, etc. if your client is actually incompatible. You can also specify custom client capabilities via get_table_req API.)

    Para resolver:

    1. En Ambari, seleccione Hive > Configs.
    2. En Custom hive-site, seleccione Add. Defina metastore.client.capability.check=false.
    3. Guárdelo y reinicie todos los servicios afectados.
  6. Reinicie el servicio Hive.