场景:
使用 saveAsTable(data frame writer)
存储 Hudi Spark 数据帧方法,使得 Hudi 支持表 org.apache.hudi.hadoop.HoodieParquetInputFormat
输入格式架构是自动生成的。
目前,saveAsTable
正常(非 Hudi 表)工作正常,生成默认输入格式。
我想使用支持的输入文件格式自动创建 Hudi 表,或者使用一些覆盖版本 saveAsTable
或其他方式停留在 Spark 的前提下。
最佳答案
胡迪不支持 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 运行您的 hudi spark 转换后使用 bash 脚本 hudi documentation
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>```
关于apache-spark - Spark-Hudi : Save as table to Glue/Hive catalog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65412195/