Ü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 KlasseOverwriteWithLatestAvroPayload
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 ParametersDataSourceWriteOptions.PAYLOAD_CLASS_OPT_KEY
eine Implementierung derHoodieRecordPayload
-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 (
) 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.tableName
_rt -
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 OptionHIVE_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 alslong
-Datentyp und nicht als Hive-Typtimestamp
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 auftrue
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
, umhive.parquet.use_column_names
auftrue
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"
-