使用spark检索受kerberos保护的hdfs文件

klsxnrf1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(559)

我在设置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连接到KerberizedHDFS位置吗?
我知道spark需要在yarn模式下才能工作,但是login方法在这方面似乎不起作用。尽管我知道用户组信息(ugi)对象是有效的,因为我已经用它连接到同一个对象和hbase中的zk。

w8ntj3qf

w8ntj3qf1#

该错误意味着客户端试图与未经身份验证的hdfs进行对话,但被拒绝。确保ugi是真正安全的日志,并做一些基本的hadoop文件系统代码之前,去Spark;这样就更容易追踪了

qnakjoqk

qnakjoqk2#

确认conf/spark-env.sh已配置或: export HADOOP_CONF_DIR=/etc/hadoop/conf 这必须指向为集群配置的客户端。

相关问题