我正在运行Hadoop版本2.8.2,并尝试为WebHDFS客户端应用程序配置OAuth 2客户端凭据授予流程。我遵循此处记录的指导:WebHDFS REST API。在此页面上,搜索OAuth2以找到有关为WebHDFS配置OAuth 2的部分。

这是我添加到hdfs-site.xml的OAuth 2属性:

  <!-- OAuth2 properties -->
  <property>
    <name>dfs.webhdfs.oauth2.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.access.token.provider</name>
    <value>org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.client.id</name>
    <value>webHdfsClient</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.credential</name>
    <value>secret</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.refresh.url</name>
    <value>https://<hostname:port of OAuth 2 token endpoint></value>
  </property>

在我的core-site.xml中,有一些我认为可能与OAuth2配置有关的属性:
  <property>
    <name>hadoop.http.authentication.simple.anonymous.allowed</name>
    <value>false</value>
  </property>
  <property>
    <name>hadoop.http.authentication.type</name>
    <value>simple</value>
  </property>

我发现,也许是错误的,不应允许匿名身份验证。根据文档,使用“简单”要求在首次通过Web控制台访问WebHDFS时,将user.name = username作为查询字符串参数包括在内。我认为使用简单与通过OAuth到WebHDFS进行客户端应用程序身份验证没有任何关系,但是我认为如果它确实起作用,我应该提到它。

然后,我创建了一个Java客户端应用程序来访问WebHDFS端点。我已经为SSL配置了WebHDFS,以便WebHDFS端点和 token 管理服务器都使用HTTPS协议(protocol)进行侦听。

这是我编写的用于访问WebHDFS端点(hdserver.local)根目录的小型Java应用程序的主要方法:
public static void main(String[] args) throws IOException {
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","swebhdfs://hdserver.local:44305");
    FileSystem fs = FileSystem.get(conf);

    FileStatus[] fsStatus = fs.listStatus(new Path("/"));

    for(int i = 0; i < fsStatus.length; i++) {
        System.out.println(fsStatus[i].getPath().toString());
    }
}

这将正确返回,而无需我从 token 端点检索承载 token 并将其发送到WebHDFS进行身份验证。我希望该 call 失败,告诉我该 call 未获得授权或请求中缺少承载 token 。请告诉我我哪里出问题了。

最佳答案

hadoop.http.authentication.type和hadoop.http.authentication.simple.anonymous.allowed配置仅与web consoles of Hadoop(JobTracker,NameNode等)相关。 WebHDFS,即使它遍历http,也不与这些设置正交。是的,这令人困惑。

其他设置似乎正确。您是否可以在NameNode日志中看到oauth2配置生效?

关于java - 如何在Hadoop WebHDFS中启用OAuth2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47563225/

10-11 00:06