Hive ACID aktivieren

Wenn Sie sich in Big Data Service 3.0.9+ befinden, verwenden sowohl Spark als auch Hive denselben Katalog "hive", und ACID in Hive ist standardmäßig deaktiviert. Um ACID zu aktivieren, müssen die folgenden Konfigurationen mit der Ambari-UI aktualisiert werden. Nachdem ACID in Hive aktiviert wurde, kann Spark in von Hive verwalteten Tabellen nicht lesen/schreiben. Stellen Sie daher sicher, dass Sie den Katalog in Spark aktualisieren. Nur die externe Tabelle funktioniert korrekt von Spark.

  1. Öffnen Sie Apache Ambari.
  2. Wählen Sie in der seitlichen Symbolleiste unter Services die Option Hive aus.
  3. Konfigurationen.
  4. Geben Sie unter Benutzerdefinierte hive-site die folgenden Konfigurationsinformationen ein:
    • Suchen Sie nach hive.support.concurrency: Aktivieren Sie es, und speichern Sie es dann.
    • Suchen Sie nach hive.txn.manager: Aktualisieren Sie den Wert in org.apache.hadoop.hive.ql.lockmgr.DbTxnManager, und speichern Sie dann.
    • Nach hive.enforce.bucketing suchen: Aktivieren
    • Suchen Sie nach hive.exec.dynamic.partition.mode: Aktualisieren Sie auf Nonstrict, und speichern Sie dann
    • Suchen Sie nach hive.compactor.initiator.on: Aktivieren Sie es, und speichern Sie es dann.
    • Suchen Sie nach hive.compactor.worker.threads: Legen Sie den Wert auf 5 fest, und speichern Sie dann
    • Suchen Sie nach hive.strict.managed.tables: Aktualisieren Sie auf True, und speichern Sie dann
    • Suchen Sie nach hive.create.as.insert.only: Aktivieren Sie diese Option, und speichern Sie sie dann.
    • Suchen Sie nach metastore.create.as.acid: Aktivieren Sie die Datei, und speichern Sie sie anschließend.
  5. Starten Sie alle betroffenen Services neu.
    Hinweis

    Wenn das Erstellen einer Tabelle mit TBLPROPERTIES (transactional=true,transactional_properties=insert_only) nicht erfolgreich ist, verläuft das normale Einfügen in einen Tabellenbefehl mit dem folgenden Fehler in den hiveserver/hivemetastore-Logs nicht erfolgreich.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.)

    Zur Lösung:

    1. Wählen Sie in Ambari Hive > Configs aus.
    2. Wählen Sie unter Benutzerdefinierte Hive-Site die Option Hinzufügen aus. Legen Sie metastore.client.capability.check=false fest.
    3. Speichern Sie, und starten Sie alle betroffenen Services neu.
  6. Starten Sie den Hive-Service neu.