【问题标题】:Spark-Hudi: Save as table to Glue/Hive catalogSpark-Hudi:另存为表到 Glue/Hive 目录
【发布时间】:2021-04-01 08:43:22
【问题描述】:
场景:
使用saveAsTable(data frame writer)方法存储Hudi Spark数据帧,这样Hudi支持的表 org.apache.hudi.hadoop.HoodieParquetInputFormat自动生成输入格式架构。
目前,saveAsTable 可以正常使用(非 Hudi 表),它会生成默认输入格式。
我想使用支持的输入文件格式自动创建 Hudi 表,或者使用某些覆盖版本 saveAsTable 或其他方式保持在 spark 的前提下。
【问题讨论】:
标签:
apache-spark
pyspark
hive
aws-glue
apache-hudi
【解决方案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 外部同步
在运行 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>```