【问题标题】:Will query from Spark hivecontext lock the hive table?来自 Spark hivecontext 的查询会锁定 hive 表吗?
【发布时间】: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 来管理锁,但我对此表示怀疑。

标签: apache-spark hivecontext


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2016-03-19
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多