4

场景: 使用方法存储 Hudi Spark 数据帧saveAsTable(data frame writer),这样Hudi 支持的带有 org.apache.hudi.hadoop.HoodieParquetInputFormatInput 格式 schema 的表就会自动生成。

目前,saveAsTable正常(非 Hudi 表)可以正常工作,生成默认输入格式。我想使用支持的输入文件格式自动创建 Hudi 表,或者使用某些覆盖版本saveAsTable或其他方式保持在 spark 的前提下。

4

1 回答 1

0

Hudi还不支持saveAsTable

您有两个选项可以将 hudi 表与 hive 元存储同步:

在火花内同步

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)

同步外部火花

运行 hudi spark 转换后使用 bash 脚本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>```
于 2021-08-12T13:03:23.133 回答