我有一个使用webhdfs管理hdfs的工作应用程序。我需要能够在kerberos安全的集群上执行此操作。
问题是,没有库或扩展来协商我的应用程序的票证,我只有一个基本的http客户端。
有没有可能创建一个java服务来处理票证交换,一旦获得服务票证,就将其传递给应用程序,以便在http请求中使用?换句话说,我的应用程序会要求java服务协商票证,它会以字符串或原始字符串的形式将服务票证返回给我的应用程序,而应用程序只会将其附加到http请求?
编辑:有没有类似的优雅的解决方案,比如为httpfs描述的@samsonscharfrichter(据我所知,它不支持委托令牌)
嗨,伙计们,我还是完全迷路了。我想弄清楚hadoop的身份验证客户端,但没有任何运气。你能再帮我一次吗?我已经花了好几个小时在读这本书了。例如,要做到这一点:
* // establishing an initial connection
*
* URL url = new URL("http://foo:8080/bar");
* AuthenticatedURL.Token token = new AuthenticatedURL.Token();
* AuthenticatedURL aUrl = new AuthenticatedURL();
* HttpURLConnection conn = new AuthenticatedURL(url, token).openConnection();
* ....
* // use the 'conn' instance
* ....
我已经迷路了。我需要什么初始连接?你怎么能
new AuthenticatedURL(url, token).openConnection();
取两个参数?这种情况没有构造器(我得到的错误,因为这个)。校长不应该被指定在什么地方吗?可能不会这么容易。
URL url = new URL("http://<host>:14000/webhdfs/v1/?op=liststatus");
AuthenticatedURL.Token token = new AuthenticatedURL.Token();
HttpURLConnection conn = new AuthenticatedURL(url, token).openConnection(url, token);
2条答案
按热度按时间xxe27gdn1#
使用java代码加上hadoop java api来打开kerberized会话,获取会话的委托令牌,并将该令牌传递给另一个应用程序(正如@tellisnz所建议的那样)有一个缺点:java api需要相当多的依赖项(即大量JAR,加上hadoop本机库)。尤其是,如果你在windows上运行你的应用程序,那将是一段艰难的旅程。
另一种方法是使用java代码和webhdfs运行一个spnegoed查询并获取委派令牌,然后将其传递给另一个应用程序——该方法完全不需要服务器上的hadoop库。赤骨版应该是类似于sthg的
这就是我用来从windows powershell脚本(甚至是excel宏)访问hdfs的方法。注意:对于windows,您必须动态地创建kerberos tgt,方法是向jvm传递指向相应keytab文件的jaas配置。但无论如何,这个警告也适用于javaapi。
ghhaqwfi2#
您可以查看hadoop auth客户机并创建一个执行第一个连接的服务,然后您可以从中获取“authorization”和“x-hadoop-delegation-token”头和cookie,并将其添加到基本客户机的请求中。
首先,在运行应用程序之前,您需要使用kinit对用户进行身份验证。否则,您将不得不为您的用户进行jaas登录,本教程提供了一个非常好的概述。
然后,要登录到webhdfs/httpfs,我们需要执行以下操作: