在同一个 Spark 作业中访问多个 Kerberos 用户的 HDFS 文件

问题描述

我们在 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 集群上运行)做类似的事情。这可能吗?如果是这样,我们怎么做?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)