Spark-Hudi: сохранить как таблицу для склеивания / Каталог улья

#apache-spark #pyspark #hive #aws-glue #apache-hudi

#apache-spark #pyspark #улей #aws-glue #apache-hudi

Вопрос:

Сценарий: Сохранить фрейм данных Hudi Spark с помощью saveAsTable(data frame writer) метода, чтобы автоматически создавалась таблица, поддерживаемая Hudi, со org.apache.hudi.hadoop.HoodieParquetInputFormat схемой формата ввода.

В настоящее время saveAsTable отлично работает с обычной (не таблицей Hudi), которая генерирует формат ввода по умолчанию. Я хочу автоматизировать создание таблицы Hudi с поддерживаемым форматом входного файла, либо с какой-либо переопределенной версией saveAsTable , либо другим способом, оставаясь в помещении spark.

Ответ №1:

Hudi пока НЕ поддерживается saveAsTable .

У вас есть два варианта синхронизации таблиц hudi с метастором hive:

Синхронизация внутри spark

 val hudiOptions = Map[String,String](
...
  DataSourceWriteOptions.HIVE_URL_OPT_KEY -> "jdbc:hive2://<thrift server host>:<port>",
  DataSourceWriteOptions.HIVE_SYNC_ENABLED_OPT_KEY -> "true",
  DataSourceWriteOptions.HIVE_DATABASE_OPT_KEY -> "<the database>",
  DataSourceWriteOptions.HIVE_TABLE_OPT_KEY -> "<the table>",
  DataSourceWriteOptions.HIVE_PARTITION_FIELDS_OPT_KEY -> "<the partition field>",
  DataSourceWriteOptions.HIVE_PARTITION_EXTRACTOR_CLASS_OPT_KEY -> classOf[MultiPartKeysValueExtractor].getName
...
)
// Write the DataFrame as a Hudi dataset
// it will appear in hive (similar to saveAsTable..)
test_parquet_partition.write
  .format("org.apache.hudi")
  .option(DataSourceWriteOptions.OPERATION_OPT_KEY, DataSourceWriteOptions.INSERT_OPERATION_OPT_VAL)
  .options(hudiOptions)
  .mode(SaveMode.Overwrite)
  .save(hudiTablePath)
 

Синхронизация вне spark

используйте скрипт bash после запуска документации hudi spark transformations hudi

 cd hudi-hive

./run_sync_tool.sh  --jdbc-url jdbc:hive2://hiveserver:10000 --user hive --pass hive --partitioned-by partition --base-path <basePath> --database default --table <tableName>```)
```bash
cd hudi-hive

./run_sync_tool.sh  --jdbc-url jdbc:hive2://hiveserver:10000 --user hive --pass hive --partitioned-by partition --base-path <basePath> --database default --table <tableName>```