使用 Spark 检索受 Kerberos 保护的 HDFS 文件

Posted

技术标签:

【中文标题】使用 Spark 检索受 Kerberos 保护的 HDFS 文件【英文标题】:Using Spark to retrieve a HDFS file protected by Kerberos 【发布时间】:2016-03-22 22:34:42 【问题描述】:

我在设置我的 spark 环境以从 kerberized HDFS 文件位置读取时遇到问题。

目前我已尝试执行以下操作:

def ugiDoAs[T](ugi: Option[UserGroupInformation])(code: => T) = ugi match 
case None => code
case Some(u) => u.doAs(new PrivilegedExceptionAction[T] 
  override def run(): T = code
)

val sparkConf = defaultSparkConf.setAppName("file-test").setMaster("yarn-client")

val sc = ugiDoAs(ugi) new SparkContext(conf) 

val file = sc.textFile("path")

在创建 Spark 上下文时失败,出现以下错误:

Exception in thread "main" org.apache.hadoop.security.AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.apache.hadoop.yarn.ipc.RPCUtil.instantiateException(RPCUtil.java:53)
at org.apache.hadoop.yarn.ipc.RPCUtil.unwrapAndThrowException(RPCUtil.java:104)
at org.apache.hadoop.yarn.api.impl.pb.client.ApplicationClientProtocolPBClientImpl.getClusterMetrics(ApplicationClientProtocolPBClientImpl.java:155)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)

有没有人有一个简单的例子来说明如何让 spark 连接到一个 kerberized HDFS 位置?

我知道 spark 需要处于 Yarn 模式才能使其工作,但登录方法在这方面似乎不起作用。虽然我知道用户组信息 (ugi) 对象是有效的,因为我已使用它连接到同一对象和 HBase 中的 ZK。

【问题讨论】:

【参考方案1】:

确认 conf/spark-env.sh 已配置或:

export HADOOP_CONF_DIR=/etc/hadoop/conf

这必须指向您集群的客户端配置。

【讨论】:

【参考方案2】:

该错误意味着客户端试图与未经身份验证的 HDFS 通信,但被拒绝。通过记录它来确保 UGI 确实是安全的,并在触发之前执行一些基本的 hadoop 文件系统代码;这应该更容易追踪

【讨论】:

以上是关于使用 Spark 检索受 Kerberos 保护的 HDFS 文件的主要内容,如果未能解决你的问题,请参考以下文章

结构化流 + Kafka 集成 - SSL 和 Kerberos 集成?

如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?

使用Spark访问有kerberos认证的hbase

Oozie Spark 使用 kerberos 访问 hive

使用 Kerberos 设置 Spark SQL 连接

spark集成kerberos