[ https://issues.apache.org/jira/browse/HDFS-8337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14578356#comment-14578356 ]
Alejandro Abdelnur commented on HDFS-8337: ------------------------------------------ [~yzhangal], thanks for looking into this. After digging a bit in the code, I think the intended way for this to work is that HTTPFS authentication filter should do the following in its {{getConfiguration()}} method (KMS does exactly this): {code} String authType = props.getProperty(AUTH_TYPE); if (authType.equals(PseudoAuthenticationHandler.TYPE)) { props.setProperty(AUTH_TYPE, PseudoDelegationTokenAuthenticationHandler.class.getName()); } else if (authType.equals(KerberosAuthenticationHandler.TYPE)) { props.setProperty(AUTH_TYPE, KerberosDelegationTokenAuthenticationHandler.class.getName()); } props.setProperty(DelegationTokenAuthenticationHandler.TOKEN_KIND, WebHdfsConstants.WEBHDFS_TOKEN_KIND.toString()); {code} > httpfs doesn't work with creates from a jar with kerberos > --------------------------------------------------------- > > Key: HDFS-8337 > URL: https://issues.apache.org/jira/browse/HDFS-8337 > Project: Hadoop HDFS > Issue Type: Bug > Components: HDFS, hdfs-client, security, webhdfs > Reporter: Yongjun Zhang > Assignee: Yongjun Zhang > Attachments: HDFS-8337.001.patch, HDFS-8337.002.patch, > HDFS-8337.003.patch > > > In a secure cluster, running a simple program: > {code} > import org.apache.hadoop.conf.*; > import org.apache.hadoop.fs.*; > import org.apache.hadoop.security.*; > class Foo { > public static void main(String args[]) throws Exception { > FileSystem fs = FileSystem.get(new > java.net.URI("webhdfs://<host>:14000/"), new Configuration()); > System.out.println(fs.listStatus(new Path("/"))[0]); > java.io.OutputStream os = fs.create(new Path("/tmp/foo")); > os.write('a'); > os.close(); > } > } > {code} > Basically to access httpfs via webhdfs, the following exception is thrown: > {code} > [systest@yj52s ~]$ /usr/java/jdk1.7.0_67-cloudera/bin/java -cp $(hadoop > classpath):. Foo > 15/05/06 23:51:38 WARN ssl.FileBasedKeyStoresFactory: The property > 'ssl.client.truststore.location' has not been set, no TrustStore will be > loaded > Exception in thread "main" > org.apache.hadoop.ipc.RemoteException(com.sun.jersey.api.ParamException$QueryParamException): > java.lang.IllegalArgumentException: No enum constant > org.apache.hadoop.fs.http.client.HttpFSFileSystem.Operation.GETDELEGATIONTOKEN > at > org.apache.hadoop.hdfs.web.JsonUtil.toRemoteException(JsonUtil.java:163) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.validateResponse(WebHdfsFileSystem.java:354) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.access$200(WebHdfsFileSystem.java:91) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.runWithRetry(WebHdfsFileSystem.java:608) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.access$100(WebHdfsFileSystem.java:458) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner$1.run(WebHdfsFileSystem.java:487) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:415) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.run(WebHdfsFileSystem.java:483) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.getDelegationToken(WebHdfsFileSystem.java:1299) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.getDelegationToken(WebHdfsFileSystem.java:237) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.getAuthParameters(WebHdfsFileSystem.java:423) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.toUrl(WebHdfsFileSystem.java:444) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractFsPathRunner.getUrl(WebHdfsFileSystem.java:691) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.runWithRetry(WebHdfsFileSystem.java:603) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.access$100(WebHdfsFileSystem.java:458) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner$1.run(WebHdfsFileSystem.java:487) > at java.security.AccessController.doPrivileged(Native Method) > at javax.security.auth.Subject.doAs(Subject.java:415) > at > org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem$AbstractRunner.run(WebHdfsFileSystem.java:483) > at > org.apache.hadoop.hdfs.web.WebHdfsFileSystem.listStatus(WebHdfsFileSystem.java:1277) > at Foo.main(Foo.java:7) > {code} > Thanks [~qwertymaniac] and [~caseyjbrotherton] for reporting the issue. -- This message was sent by Atlassian JIRA (v6.3.4#6332)