与表锁定相关的 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 插入的主要内容,如果未能解决你的问题,请参考以下文章

在 HIVE 上插入 Spark-SQL 插件

Spark Shell 的 Spark Session 中不显示新插入的 Hive 记录

如何在 Spark 2.4.0 中使用 PySpark API 将表插入 Hive

在分区 hive 表中插入 spark Dataframe 而不会覆盖数据

使用 scala spark 将固定宽度的文件插入 Hive

Hive:Spark中如何实现将rdd结果插入到hive1.3.1表中