使用kerberized webhdfs / hdfs和JAVA API

时间:2015-05-26 07:27:55

标签: hadoop hdfs kerberos java-api webhdfs

我有一个启用了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/>

请建议

1 个答案:

答案 0 :(得分:-1)

这可以通过hdfs命令实现。您只需要在namenode上显示hadoop发布和配置文件。

  1. 在客户端节点上复制hadoop发行版。这意味着您必须将完整的hadoop包复制到客户端计算机。 请参阅this
  2. 使用 kinit 命令从keytab获取用户票证,该命令是java的命令行工具。
    一个。在您的客户端计算机中安装jdk。
    湾设置JAVA_HOME,请参阅here
    C。在位置C:\ windows \ krb5.ini中创建krb5.ini文件。该文件应包含以下信息,
  3.     [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
    
    1. 现在你可以使用&#34; hadoop fs -put src dest&#34;将文件放入HDFS。或者使用java。