【发布时间】:2017-03-09 17:05:24
【问题描述】:
我知道如果我从 Hive 提交查询,将获取共享锁,然后 Hive 表将被查询锁定:https://cwiki.apache.org/confluence/display/Hive/Locking
所以我只是想知道查询是否由 Spark Hivecontext 执行,是否需要锁定以及表是否也会被锁定?另外,如果我通过 Spark Hivecontext 将数据插入到表中,是否需要独占锁?
谢谢
【问题讨论】:
-
好问题。 Hive Metastore API 公开了诸如
MetaStoreClient.lock(LockRequest)返回LockResponse之类的方法(参见 hive.apache.org/javadocs/r2.1.1/api/index.html?org/apache/…),但乍一看,Spark 代码库既不使用LockRequest也不使用LockResponse。所以我猜 Spark 可以被 Hive 查询锁定(参见stackoverflow.com/questions/42421883/…),但 Spark 不会自己锁定...... -
...除非您自己使用明确的“LOCK TABLE”命令请求锁定(参见stackoverflow.com/questions/36474638/…)
-
顺便说一句,您可以自己检查:打开 Hive 会话,在另一个控制台中启动 Spark 作业,在 Spark 加载数据时,在 Hive 中运行“SHOW LOCKS”命令。也许 Spark 通过直接点击 ZooKepper 而不使用 MetaStore API 来管理锁,但我对此表示怀疑。