使用 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 存储库?