我对 Linux、Hive 和 Spark 之间的用户帐户有一个非常有趣且棘手的问题......
我们有一个 Spark 应用程序在工作,它必须能够由多个 (Linux) 用户帐户执行。但是,我们需要共享 Hive 用户来“拥有”所有表,否则一个用户可以创建一个其他用户无法覆盖的表,这意味着我们的代码会中断,除了第一次运行代码以删除/创建表的用户之外.
现在,为了手动修改,我可以使用 Hive Beeline 中的命令行参数将我的“Hive 用户”设置为我的 Linux 用户以外的其他内容:
/usr/lib/hive/bin/beeline -u jdbc:hive2://<our hive server>:10000 -n <hiveuserid> -d org.apache.hive.jdbc.HiveDriver --hiveconf mapreduce.job.queuename=<queuename>
但是,我知道没有这样的命令行参数来设置 Spark 作业的 Hive ID:
@SPARK_HOME/bin/spark-submit -? <hiveuserid>
在这里使用 sudo 不是一种选择,因为出于安全原因,我们公司为我们提供了一个没有相应 Linux 用户的 Hive 用户,因此我们确实需要将一个 HIVE 用户参数传递给我们的应用程序。
似乎 spark-submit 命令中应该有一些东西(有关 spark-submit 的命令行参数和参数,请参见https://spark.apache.org/docs/latest/configuration.html),或者来自 WITHIN我的 Spark scala 代码,例如
import org.apache.spark._
import org.apache.spark.SparkContext._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
sc = new SparkContext(. . .)
hc = new HiveContext(sc)
hc.sql("set user as <hiveuserid>")
或者 Hive 上下文本身有一些设置用户的功能?
hc.SetUser("<hiveuserid>")
有任何想法吗?在我们可以使用相同的 Hive 用户之前,我们无法以不同的 Linux 用户身份运行此作业
(PS 同样,创建一个与共享 Hive 用户匹配的新共享 Linux 用户对我们来说不是一个选项,因为让多人共享一个 Linux 帐户用户 ID 违反了公司安全策略,并且我们不允许共享一个密码,所以我们的 Linux sudoer 帐户与我们共享的 Hive 用户帐户不同——不要问我为什么,这是 IT 问题 :-)