Hadoop Oozie shell操作中kerberos票证和委派令牌的使用
我是hadoop的新手,我试图理解为什么我的oozie shell操作即使在完成kinit之后也没有获得新的票证。这是我的设想Hadoop Oozie shell操作中kerberos票证和委派令牌的使用,hadoop,hive,kerberos,oozie,kerberos-delegation,Hadoop,Hive,Kerberos,Oozie,Kerberos Delegation,我是hadoop的新手,我试图理解为什么我的oozie shell操作即使在完成kinit之后也没有获得新的票证。这是我的设想 我使用我的ID“A”登录,并且有一个用于我的ID的kerberos票证。我使用我的ID提交带有shell操作的oozie worklow。 在oozie shell操作中,我做了另一个kinit来获取ID“B”的票证。 只有此id“B”可以访问某些HDFS文件。自从klist出示id为“B”的罚单后,kinit运行良好。现在,当我读取只有B有权访问的HDFS文件时,我得
有人能帮我理解上面的情景吗?哪些hadoop服务接受新的身份验证票证,哪些命令接受委派令牌(如hadoop fs命令)?是这样的,还是我做错了什么? 我只是不明白为什么同一个hadoop fs命令作为不同的用户在oozie外部工作,但即使在kinit之后也不能在oozie shell操作内部工作
您不应该在Oozie作业中模拟另一个用户,这将破坏严格Kerberos身份验证的目的 在实践中更棘手的是——(1)核心Hadoop服务(HDFS,Thread)只检查一次Kerberos令牌,然后创建一个“委托令牌”,在所有节点和所有服务之间共享 (2)
oozie
服务用户拥有特权,它可以执行一种Hadoop“sudo”,这样它就可以作为oozie
连接到Thread,但是Thread为作业提交者(即a)创建“委派令牌”,就是这样,您不能更改该令牌
(3) 实际上,您可以使用备用令牌,但只能使用一些自定义Java代码,为备用用户显式创建UserGroupInformation
对象。Hadoop命令行接口不能做到这一点
(4) 那么非核心Hadoop,即HBase或Hive Metastore,或者非Hadoop的东西,即Zookeeper呢?他们根本不使用“委托代币”。要么在Java代码中显式管理UserGroupInformation
,要么在连接时使用默认的Kerberos令牌。这就是为什么你的HBase外壳可以工作的原因,如果你使用了Beeline(JDBC瘦客户端)而不是Hive(传统胖客户端),它可能也可以工作 (5) Oozie试图用特定的
选项来填补这一空白,如Hive、Beeline(“Hive2”操作)、HBase等;我不确定它是如何工作的,但它必须意味着一个非默认的Kerberos票证缓存,位于作业容器的本地。理论上——Oozie自动将提交者的凭证(即a)传输到运行作业的容器。你不必关心kinit,因为事实上,现在已经太晚了。您不应该在Oozie作业中模拟另一个用户,这将破坏严格Kerberos身份验证的目的 在实践中更棘手的是——(1)核心Hadoop服务(HDFS,Thread)只检查一次Kerberos令牌,然后创建一个“委托令牌”,在所有节点和所有服务之间共享 (2)
oozie
服务用户拥有特权,它可以执行一种Hadoop“sudo”,这样它就可以作为oozie
连接到Thread,但是Thread为作业提交者(即a)创建“委派令牌”,就是这样,您不能更改该令牌
(3) 实际上,您可以使用备用令牌,但只能使用一些自定义Java代码,为备用用户显式创建UserGroupInformation
对象。Hadoop命令行接口不能做到这一点
(4) 那么非核心Hadoop,即HBase或Hive Metastore,或者非Hadoop的东西,即Zookeeper呢?他们根本不使用“委托代币”。要么在Java代码中显式管理UserGroupInformation
,要么在连接时使用默认的Kerberos令牌。这就是为什么你的HBase外壳可以工作的原因,如果你使用Beeline(JDBC瘦客户端)而不是Hive(传统胖客户端),它可能也可以工作。