我在 Cloudera 集群上使用 Jupyter Notebook,需要从 hdfs 读取数据。由于集群是 Kerberized,所以我需要使用我的密钥表进行身份验证,我在我的笔记本中运行了命令:
kinit -kt keytab principal
没问题,我可以通过 klist 看到校长有有效的票
但是,当我尝试访问我有权访问的 hdfs 数据时:
df_load = sparkSession.read.csv('hdfs://cmanagerdev01/user/rxie/data.csv')
我收到以下错误:
Py4JJavaError:调用 o106.csv 时发生错误。:org.apache.hadoop.security.AccessControlException:未启用简单身份验证。可用:[TOKEN, KERBEROS] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingImpl5.javaAccessor4Accessor) java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException. java:73) 在 org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2110) 在 org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1305) 在 org。java:244) 在 py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) 在 py4j.Gateway.invoke(Gateway.java:282) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在 py4j。 commands.CallCommand.execute(CallCommand.java:79) at py4j.GatewayConnection.run(GatewayConnection.java:238) at java.lang.Thread.run(Thread.java:748) 引起:org.apache.hadoop.ipc .RemoteException(org.apache.hadoop.security.AccessControlException):未启用简单身份验证。可用:[令牌,KERBEROS] 在 org.apache.hadoop.ipc.Client.call(Client.java:1475) 在 org.apache.hadoop.ipc.Client.call(Client.java:1412) 在 org.apache。 hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229) at com.sun.proxy.$Proxy17.getFileInfo(Unknown Source) at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB。
导出 HADOOP_HOME=/etc/hadoop/
导出 HADOOP_CONF_DIR=/etc/hadoop/conf
导出类路径=$类路径:$HADOOP_CONF_DIR
设置这些环境变量应该可以解决问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句