使用kerberized webhdfs/hdfs和javaapi

syqv5f0l  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(442)

我有一个启用了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工作,现在可以生成票证了
但是curl不起作用(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/>

请建议

olhwl3o2

olhwl3o21#

这可以通过hdfs命令来实现。您所需要的只是namenode上的hadoop发行版和配置文件。
复制客户端节点上的hadoop发行版。这意味着您必须将完整的hadoop包复制到客户机上。参考此
使用kinit命令从keytab获取用户票证,kinit命令是java的命令行工具。
答。在客户机中安装jdk。
b。把 java 放在家里,看这里
c。在c:\windows\krb5.ini位置创建一个krb5.ini文件。此文件应包含以下信息,

[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变量中设置了javabin路径。打开命令提示符,键入以下命令以获取用户票证。

kinit -k -t keytabfile username

现在您可以使用“hadoopfs-put src dest”或java将文件放入hdfs。

相关问题