我们正在kubernetes上运行spark来访问kerberized hdfs集群。我们可以使用hdfs委托令牌从单个用户访问数据,也可以使用服务键表从服务帐户访问数据。
但是,我们希望在同一spark作业中读取/写入来自多个hdfs帐户的数据。特别地:
从用户帐户读取、处理数据,然后将结果保存到属于服务帐户的目录中,作为作业的中间步骤(用于在用户之间缓存/共享)。
从同一作业中的用户帐户和服务帐户读取。
到目前为止,我能找到的所有文档都只涉及每个spark作业只有一个kerberos用户的场景。
在单个spark作业中是否可以使用多个kerberos凭据?也就是说,当从 hdfs://mycluster/user/a
使用用户a的凭据,并且在从 hdfs://mycluster/user/b
是否使用用户b的凭据?我们以编程方式启动spark,作为一个更大的scala程序的一部分。
我们可以通过直接使用hadoop hdfs api从java程序访问多个用户帐户,方法如下:
val ugi1 = UserGroupInformation.loginUserFromKeytabAndReturnUGI(user1, keytab1)
val ugi2 = UserGroupInformation.loginUserFromKeytabAndReturnUGI(user2, keytab2)
val fs1 = ugi1.doAs(new PrivilegedAction[Unit] {
override def run(): Unit = {
FileSystem.get(...)
}
})
val fs2 = ugi2.doAs(new PrivilegedAction[Unit] {
override def run(): Unit = {
FileSystem.get(...)
}
})
// Code using fs1 and fs2
我们希望从spark作业(在kubernetes集群上运行)中执行类似的操作。这可能吗?如果是,我们怎么做?
暂无答案!
目前还没有任何答案,快来回答吧!