我使用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)atg.apache.hadoop.ipc.Client.call (Client.java:1399)org.apache.hadoop.ipc.ProtobufRpcEngine $ Invoker.invoke(ProtobufRpcEngine.java:232)at com.sun.proxy . $ Proxy44.create(Unknown Source)at org.apache.hadoop . hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:295)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:606)在org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)在org.apache.hadoop位于com.sun.proxy的.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102 . )org.apache.hadoop.hdfs.DFSOutputStr中的$ Proxy45.create(未知来源) eam.newStreamForCreate(DFSOutputStream.java:1725)在org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1668)在org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1593)在组织.apache.hadoop.hdfs.DistributedFileSystem $ 6.doCall(DistributedFileSystem.java:397)在org.apache.hadoop.hdfs.DistributedFileSystem $ 6.doCall(DistributedFileSystem.java:393)在org.apache.hadoop.fs.FileSystemLinkResolver.resolve (FileSystemLinkResolver.java:81)在org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:393)在org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:337)在org.apache . hadoop.fs.FileSystem.create(FileSystem.java:908)在org.apache.hadoop.fs.FileSystem.create(FileSystem.java:889)在com.abc.HDFSFileWriter.createOutputFile(HDFSFileWriter.java:354).. . 更多引起:java.io.IOException:org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] org.apache.hadoop.ipc.Client $ Connection $ 1 . 在java.security.AccessController.doPrivileged(Native Method)上运行(Client.java:680),位于org.apache.hadoop.security.UserGroupInformation.doAs的javax.security.auth.Subject.doAs(Subject.java:415) UserGroupInformation.java:1628)org.apache.hadoop.ipc.Client $ Connection.handleSaslConnectionFailure(Client.java:643)org.apache.hadoop.ipc.Client $ Connection.setupIOstreams(Client.java:730)at org位于org.apache.hadoop.ipc.Client的org.apache.hadoop.ipc.Client.getConnection(Client.java:1521)的.apache.hadoop.ipc.Client $ Connection.access $ 2800(Client.java:368) . call(Client.java:1438)... 43更多引起:org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] org.apache.hadoop.security.SaslRpcClient.selectSaslClient(SaslRpcClient)的.java:172)在org.apache.hadoop.security.SaslRpcClient.saslConnect(SaslRpcClient.java:396)在org.apache.hadoop.ipc.Client $ Connection.setupSaslConnection(Client.java:553)在org.apache . hadoop.ipc.Client $ Connection.access $ 180 0(Client.java:368)org.apache.hadoop.ipc.Client $ Connection $ 2.run(Client.java:722)at org.apache.hadoop.ipc.Client $ Connection $ 2.run(Client.java: 718)在javax.security.auth.Subject.doAs的java.security.AccessController.doPrivileged(Native Method)中(Subject.java:415)