0

我正在使用 Spark 独立 1.6.x 版本来连接启用了 kerberos 的 hadoop 2.7.x

JavaDStream<String> status = stream.map(new Function<String, String>() { 
    public String call(String arg0) throws Exception {
        Configuration conf = new Configuration();
        FileSystem fs = null; 
        conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
        conf.set("hadoop.security.authentication", "kerberos");
        conf.set("dfs.namenode.kerberos.principal", "hdfs/_HOST@REALM");
        UserGroupInformation.setConfiguration(conf); 
        UserGroupInformation.setLoginUser(UserGroupInformation.loginUserFromKeytabAndReturnUGI("abc","~/abc.ketyab"));
        System.out.println("Logged in successfully."); 
        fs = FileSystem.get(new URI(activeNamenodeURI), conf);
        FileStatus[] s = fs.listStatus(new Path("/"));
        for (FileStatus status : s) {
            System.out.println(status.getPath().toString());
        }
        return "success";
    }
});

但低于例外

用户:abc@REALM (auth:KERBEROS) 原因:java.io.IOException:本地异常失败:java.io.IOException:org.apache.hadoop.security.AccessControlException:客户端无法通过:[TOKEN,KERBEROS] 进行身份验证; 主机详细信息:本地主机为:“hostname1/0.0.0.0”;目标主机是:“hostname2”:8020;在 org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:772) 在 org.apache.hadoop.ipc.Client.call(Client.java:1472) 在 org.apache.hadoop.ipc.Client.call (Client.java:1399) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232) 在 com.sun.proxy.$Proxy44.create(Unknown Source) 在 org.apache.hadoop。 hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:295) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun。

4

0 回答 0