将来自Spark hivecontext的查询锁定hive表吗?

时间:2017-03-09 17:05:25

标签: apache-spark hivecontext

我知道如果我从Hive提交查询,将获取共享锁,然后hive表将被查询锁定:https://cwiki.apache.org/confluence/display/Hive/Locking

所以我只是想知道查询是否由Spark Hivecontext执行,是否需要锁定并且表格也会被锁定?另外,如果我通过Spark Hivecontext将数据插入表中,它是否需要独占锁?

谢谢

2 个答案:

答案 0 :(得分:0)

Spark 1.x允许您使用sqlContext.sql("LOCK <table> [EXCLUSIVE]")显式锁定表。您首先应该通过执行sqlContext.setConf("hive.support.concurrency","true")启用Hive并发。

但是,如果您尝试在Spark 2+中执行相同的LOCK <table>...,则会出现错误

org.apache.spark.sql.catalyst.parser.ParseException:
Operation not allowed: LOCK TABLE(line 1, pos 0)

答案 1 :(得分:0)

Spark SQL v.1.6支持此功能,而2.x和3.x版本不支持。

https://github.com/apache/spark/blob/branch-2.2/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4

unsupportedHiveNativeCommands
...
    | kw1=LOCK kw2=TABLE
    | kw1=LOCK kw2=DATABASE
    | kw1=UNLOCK kw2=TABLE
    | kw1=UNLOCK kw2=DATABASE