0

我是 hadoop 的新手,并试图理解为什么我的 oozie shell 操作即使在执行 kinit 之后也没有获得新票。这是我的场景。

  1. 我使用我的 ID“A”登录,并为我的 ID 提供了 kerberos 票证。我使用我的 ID 提交带有 shell 操作的 oozie 工作流。在 oozie shell 操作中,我执行另一个 kinit 以获得 ID“B”的票证。只有这个 id "B" 可以访问一些 HDFS 文件。kinit 工作正常,因为 klist 显示了 id "B" 的票证。现在,当我读取只有 B 可以访问的 HDFS 文件时,我收到权限被拒绝错误,说“A”没有访问此文件的权限。但是,当我在 oozie 之外的 linux cli 上做同样的事情时,在我执行 kinit 并为“B”取票后,我可以将 HDFS 文件读取为“B”。但是相同的步骤在 oozie shell 操作中不起作用,hadoop fs 命令似乎总是作为提交 oozie 工作流的用户而不是存在 kerberos 票证的用户工作。有人可以解释为什么会这样吗?我无法理解这一点。

  2. 在同一个 shell 操作中,虽然 hadoop fs 命令无法更改为用户“B”,但 hbase shell 以用户 B 的身份工作。为了测试,我创建了一个只有“A”可以访问的 hbase 表。我添加了 hbase shell 以在此表上执行 get 命令。如果我为用户“B”做 kinit -kt 并获得它的票,这也失败了,说“B”没有访问这个表的权限。所以我认为 hbase 正在接受新票而不是提交 oozie 工作流的用户的委托令牌。当我不在 shell 操作中执行 kinit -kt 时,hbase 命令成功。如果我执行 kinit,我什至无法运行 hive 查询,说“A”没有对某些目录(如 /tmp/B/)的执行访问权限,只有“B”可以访问,所以我无法理解 hive 是如何工作的,
    有人可以帮我理解上述情况吗?哪些 hadoop 服务使用新票证进行身份验证,哪些命令使用委托令牌(如 hadoop fs 命令)?这是它的工作方式还是我做错了什么?我只是不明白为什么相同的 hadoop fs 命令从 oozie 外部作为不同的用户工作,但即使在 kinit 之后也不能在 oozie shell 操作中工作。

  3. 这个委托令牌实际上是什么时候创建的?是否仅在提交 oozie 工作流甚至我发出 hadoop fs 命令时才创建它?谢谢!
4

2 回答 2

2

理论上——Oozie自动将提交者(即 A)的凭据传输到运行作业的 YARN 容器。您不必关心kinit,因为事实上,为时已晚
您不应该在 Oozie 作业中冒充另一个用户,这会破坏严格 Kerberos 身份验证的目的

在实践中它更棘手——(1)核心 Hadoop 服务(HDFS、YARN)只检查一次 Kerberos 令牌,然后他们创建一个在所有节点和所有服务之间共享的“委托令牌”。

(2)oozie服务用户具有特殊权限,它可以执行一种 Hadoop“sudo”,以便它连接到 YARN,oozie但 YARN 为作业提交者(即 A)创建“委托令牌”,就是这样,你可以' t alter 更改该令牌。

(3) 好吧,实际上您可以使用备用令牌,但只能使用一些自定义 Java 代码,为备用用户显式创建UserGroupInformation对象。Hadoop 命令行界面不这样做。

(4) 非核心 Hadoop,即 HBase 或 Hive Metastore,或非 Hadoop 的东西,即 Zookeeper 呢?他们根本不使用“委托代币”。您可以显式管理UserGroupInformationJava 代码,或者在连接时使用默认的 Kerberos 令牌。
这就是你的 HBase shell 工作的原因,如果你使用 Beeline(JDBC 瘦客户端)而不是 Hive(旧的胖客户端),它可能也会工作。

<credentials>(5) Oozie 试图用Hive、Beeline ("Hive2" action)、HBase 等的特定选项来填补这一空白;我不确定它是如何工作的,但它必须暗示一个非默认的 Kerberos 票证缓存,位于您的作业容器本地。

于 2016-06-14T08:54:17.513 回答
0

我们发现一旦启动 oozie 工作流程,就有可能成为另一个遏制主体。我们必须运行一个 shell 操作,然后使用自定义的 -Djava.security.auth.login.config=custom_jaas.conf 运行 java,然后它将提供一个 jvm kinit'ed 作为其他人。这与 Samson (3) 的思路一致,尽管这个 kinit 甚至可以是一个完全不同的领域。

于 2017-01-20T23:28:01.480 回答