在HDP 3.1.0中,HWC hive-warehouse-connector-assembly-1.0.0.3.1.0.0-78.jar,i不能根据数据库追加(或覆盖)到现有的表。
我在一个名为DSN的数据库上测试,它工作,但在另一个名为CLEAN_CRYPT的数据库上它失败了。两个数据库都是加密的+ kerberos
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession._
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession
val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()
hive.execute("show databases").show()
hive.setDatabase("clean_crypt")
val df=hive.execute("select * from test")
df.write.format(HIVE_WAREHOUSE_CONNECTOR).option("table","test").mode("append").save错误消息是“表已存在”。我尝试了覆盖模式,但没有成功。如果我丢弃了表,它就会通过!
有什么想法吗?
发布于 2020-05-07 14:36:02
这可能与多个用户here报告的HWC有关。
我发现只有当你尝试在编写时使用partitionBy时,它才会发生,比如:
df.write.partitionBy("part")
.mode(SaveMode.Overwrite)
.format(com.hortonworks.hwc.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR)
.option("table", "`default`.`testout`").save;另一方面,如果您删除partitionBy片段,分区将按预期工作(因为分区信息已经存储在Hive表中),但如果您使用覆盖模式(而不是,例如,append),HWC将删除并重新创建您的表,并且不会重新应用分区信息。
发布于 2021-05-24 19:24:25
如果您希望使用Hortnoworks连接器并将其附加到已分区的表中,则不应该使用partitionBy,因为它似乎不能与此连接器一起正常工作。相反,您可以使用分区选项并为动态分区添加Spark参数。
示例:
import org.apache.spark.SparkConf
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR
import org.apache.spark.sql.{SaveMode, SparkSession}
val sparkConf = new SparkConf()
.setMaster("yarn")
.setAppName("My application")
.set("hive.exec.dynamic.partition", "true")
.set("hive.exec.dynamic.partition.mode", "nonstrict")
val spark = SparkSession.builder()
.config(sparkConf)
.getOrCreate()
val hive = HiveWarehouseBuilder.session(spark).build()
val hiveDatabase = "clean_crypt")
hive.setDatabase(hiveDatabase)
val df = hive.execute("select * from test")
df
.write
.format(HIVE_WAREHOUSE_CONNECTOR)
.mode(SaveMode.Append)
.option("partition", partitionColumn)
.option("table", table)
.save()对于以上内容,使用了hive-warehouse-connector-assembly-1.0.0.3.1.4.0-315.jar。如果该表不存在,连接器会创建它并(默认情况下)以ORC格式存储它。
https://stackoverflow.com/questions/59946572
复制相似问题