Überlegungen und Einschränkungen für die Verwendung von Hudi in Amazon EMR - Amazon EMR

Überlegungen und Einschränkungen für die Verwendung von Hudi in Amazon EMR

  • Datensatzschlüsselfeld darf nicht null oder leer sein – Das Feld, das Sie als Datensatzschlüsselfeld angeben, darf weder null-Werte noch leere Werte aufweisen.

  • Das Schema wird standardmäßig beim Upsert und Insert aktualisiert – Hudi bietet eine Schnittstelle HoodieRecordPayload, die bestimmt, wie der Eingabe-DataFrame und der vorhandene Hudi-Datensatz zusammengeführt werden, um einen neuen, aktualisierten Datensatz zu erzeugen. Hudi stellt eine Standardimplementierung dieser Klasse OverwriteWithLatestAvroPayload bereit, die bestehende Datensätze überschreibt und das Schema aktualisiert, wie es im Eingabe-DataFrame angegeben ist. Um diese Logik für die Implementierung von Merge- und Teilaktualisierungen anzupassen, können Sie mithilfe des Parameters DataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY eine Implementierung der HoodieRecordPayload-Schnittstelle bereitstellen.

  • Löschen erfordert Schema – Beim Löschen müssen Sie den Datensatzschlüssel, den Partitionsschlüssel und die Schlüsselfelder für die Vorab-Kombination angeben. Andere Spalten können auf null gesetzt werden oder leer sein, aber das vollständige Schema ist erforderlich.

  • Einschränkungen bei MoR-Tabellen – MoR-Tabellen unterstützen kein Savepointing. Sie können MoR-Tabellen mit der leseoptimierten Ansicht oder der Echtzeitansicht (tableName_rt) von Spark SQL, Presto oder Hive abfragen. Wenn Sie die leseoptimierte Ansicht verwenden, werden nur Basisdateidaten und keine zusammengeführte Ansicht von Basis- und Protokolldaten angezeigt.

  • Hive

    • Für die Registrierung von Tabellen im Hive-Metastore erwartet , dass der Hive Thrift-Server am Standardport 10000 ausgeführt wird. Wenn Sie diesen Port mit einem benutzerdefinierten Port überschreiben, übergeben Sie die Option HIVE_URL_OPT_KEY wie im folgenden Beispiel gezeigt.

      .option(DataSourceWriteOptions.HIVE_URL_OPT_KEY, "jdbc:hive2://localhost:override-port-number
    • Der Datentyp timestamp in Spark ist in Hive als long-Datentyp und nicht als Hive-Typ timestamp registriert.

  • Presto

    • Presto unterstützt nicht das Lesen von MoR-Echtzeittabellen.Funktionen in Hudi-Versionen unter 0.6.0.

    • Presto unterstützt nur Snapshot-Abfragen.

    • Damit Presto Hudi-Datensatz-Spalten korrekt interpretiert, stellen Sie den hive.parquet_use_column_names-Wert auf true ein.

      • Um den Wert für eine Sitzung festzulegen, führen Sie in der Presto-Shell den folgenden Befehl aus:

        set session hive.parquet_use_column_names=true
      • Um den Wert auf Clusterebene festzulegen, verwenden Sie die Konfigurationsklassifizierung presto-connector-hive, um hive.parquet.use_column_names auf true einzustellen, wie im folgenden Beispiel veranschaulicht. Weitere Informationen finden Sie unter Anwendungen konfigurieren.

        [ { "Classification": "presto-connector-hive", "Properties": { "hive.parquet.use-column-names": "true" } } ]
  • HBase-Index

    • Die HBase-Version, die zum Erstellen von Hudi verwendet wurde, unterscheidet sich möglicherweise von der in den EMR-Versionshinweisen aufgeführten Version. Um die richtigen Abhängigkeiten für Ihre Spark-Sitzung abzurufen, führen Sie den folgenden Befehl aus.

      spark-shell \ --jars /usr/lib/spark/external/lib/spark-avro.jar,/usr/lib/hudi/cli/lib/*.jar \ --conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \ --conf "spark.sql.hive.convertMetastoreParquet=false"