我是 hadoop 的新手,并试图理解为什么我的 oozie shell 操作即使在执行 kinit 之后也没有获得新票。这是我的场景。
我使用我的 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 票证的用户工作。有人可以解释为什么会这样吗?我无法理解这一点。
在同一个 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 操作中工作。- 这个委托令牌实际上是什么时候创建的?是否仅在提交 oozie 工作流甚至我发出 hadoop fs 命令时才创建它?谢谢!