我有一个启用了Kerberos的Hadoop集群我希望使用集群外的Windows / Linux机器将文件放在HDFS上。
Hadoop管理团队为我提供了访问hadoop和keytab文件的用户名,我应该如何在我的java代码中使用它们?
我在互联网上浏览了很多资源,但是他们都没有提供任何从群集外部访问kerberized hadoop的指南。
此外,是否有必要使用hadoop jar
运行代码?如果是,我将如何从集群外部运行它
参考
http://blog.rajeevsharma.in/2009/06/using-hdfs-in-java-0200.html
http://princetonits.com/technology/using-filesystem-api-to-read-and-write-data-to-hdfs/
我让kerberos工作,现在可以生成票据
但卷曲不起作用(windows)
curl -i --negotiate u:qjdht93 "http://server:50070/webhdfs/v1/user/qjdht93/?op=LISTSTATUS"
给出错误
HTTP/1.1 401 Authentication required
Cache-Control: must-revalidate,no-cache,no-store
Date: Mon, 01 Jun 2015 15:26:37 GMT
Pragma: no-cache
Date: Mon, 01 Jun 2015 15:26:37 GMT
Pragma: no-cache
Content-Type: text/html; charset=iso-8859-1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Version=1; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 G
MT; HttpOnly
Content-Length: 1416
Server: Jetty(6.1.26)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 401 Authentication required</title>
</head>
<body><h2>HTTP ERROR 401</h2>
<p>Problem accessing /webhdfs/v1/user/qjdht93. Reason:
<pre> Authentication required</pre></p><hr /><i><small>Powered by Jetty://</s
mall></i><br/>
<br/>
<br/>
请建议
答案 0 :(得分:-1)
这可以通过hdfs命令实现。您只需要在namenode上显示hadoop发布和配置文件。
[libdefaults] default_realm = REALM [realms] REALM = { kdc = kdcvalue admin_server = kdcvalue default_domain = kdcvalue } [domain_realm] .kdcvalue = REALM kdcvalue = REALM
REALM - 服务器领域名称
kdcvalue - 服务器主机名或IP地址
d。确保在Windows机器中的PATH变量中设置了java bin路径。打开命令提示符,键入以下命令以获取用户票证。
kinit -k -t keytabfile username