与表锁定相关的 Spark Hive 插入
Posted
技术标签:
【中文标题】与表锁定相关的 Spark Hive 插入【英文标题】:Spark Hive Insert In Relation to Table Locking 【发布时间】:2017-09-20 15:59:19 【问题描述】:只是一个简单的问题。我正在尝试使用 1.6.0 版本执行 Spark 程序,该程序利用 Hive 表上的并发加载。在hiveContext.sql("insert . . .")
中使用insert
语句是一种可行的方法,因为我想在编写过程中确保表锁定,因为从我在Spark 文档中看到的情况来看,在使用保存操作时不能确保表锁定和原子性一个数据框。
"保存操作可以选择采用 SaveMode,即 指定如何处理现有数据(如果存在)。重要的是要 意识到这些保存模式不使用任何锁定并且不是 原子。此外,在执行覆盖时,数据将被 在写出新数据之前删除。”
在访问/插入指定配置单元表中的数据时,如何确保 Spark 中配置单元表的原子性或锁定?
任何建议都很有帮助。非常感谢。
【问题讨论】:
【参考方案1】:解决方案取决于您需要原子写入的目的。
最简单的一种可能是使用分区外部表:
-
在 Spark 作业中,您不是将数据帧写入表,而是写入 HDFS 目录。
写入完成后,向表中添加一个新分区,指向新目录。
【讨论】:
好的,感谢您的反馈。但是,由于 spark 完成的保存模式没有任何表锁定功能,我如何确保发生表锁定? 将分区添加到外部表是原子的(没有时间,当有人只看到插入的一部分数据时)以上是关于与表锁定相关的 Spark Hive 插入的主要内容,如果未能解决你的问题,请参考以下文章
Spark Shell 的 Spark Session 中不显示新插入的 Hive 记录
如何在 Spark 2.4.0 中使用 PySpark API 将表插入 Hive
在分区 hive 表中插入 spark Dataframe 而不会覆盖数据