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

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überlegungen und Einschränkungen für die Verwendung von Hudi bei 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 festlegt, wie die Eingabe DataFrame und der vorhandene Hudi-Datensatz zusammengeführt werden, um einen neuen, aktualisierten Datensatz zu erzeugen. Hudi bietet eine Standardimplementierung dieser KlasseOverwriteWithLatestAvroPayload, die bestehende Datensätze überschreibt und das in der Eingabe angegebene Schema aktualisiert. DataFrame 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 SparkSQL, 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" } } ]
  • HBaseIndex

    • Die HBase Version, die zum Erstellen von Hudi verwendet wurde, unterscheidet sich möglicherweise von der Version, die im EMR Versionshandbuch aufgeführt ist. 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"