1

我对 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 问题 :-)

4

1 回答 1

0

您是否考虑过为 Hive 数据设置组权限?例如,您的目录可能具有以下权限:

drwxrwxr-x - hive hadoop 0 2014-10-14 04:28 /user/hive/warehouse/test

属于该hadoop组的任何用户都将拥有对该表的完全读/写/执行权限。

于 2015-06-09T21:28:37.293 回答