2014-01-17 47 views
3

我對Kerberos來說很新奇。我正在使用共享的Hadoop集羣。我的管理員爲我提供了一個用戶名和密碼以及KDC服務器的位置。如何使用java API訪問安全kerberized hadoop

是否可以使用JAVA GSS API和Hadoop USerGroupInformation類來訪問Hadoop集羣。

對於非Kerberos Hadoop集羣,這將是代碼片段我會用,比如讀取HDFS文件:

String uname = <Some username>; 
UserGroupInformation ugi = UserGroupInformation.createRemoteUser(uname); 
ugi.doAs(new PrivilegedExceptionAction<Void>(){ 

    public Void run() throws Exception { 

     HdfsConfiguration hdfsConf = new HdfsConfiguration(); 
     ... SETUP Configuration ... 
     FileSystem fs = FileSystem.get(hdfsConf); 
     ... Use 'fs' to read/write etc ... 
    } 

}); 

現在對於安全集羣,我還提供了Kerberos口令對於用戶.. 有人可以請我提供什麼是我需要對上述代碼片段做出的確切更改,以首先訪問KDC並執行kinit,然後繼續進行HDFS操作

請記住,在我打算部署Java應用程序的環境,我可能沒有在本地安裝'kinit',因此調用th Java內部的kinit進程不是一個選項。

在此先感謝..

+0

如果你可以從你的客戶執行的Java程序,那麼除非你構建一個Kerberos客戶到你的程序不能部署對安全集羣你的工作,之前沒有執行kinit。 – jtravaglini

回答

4

如果你有一個keytab文件爲UserGroupInformation超級用戶的身份,您可以使用在hadoop-common庫所提供的API org.apache.hadoop.security.SecurityUtil#login(…),直接從您的代碼登錄。完整的API可以在[1]找到。

這將需要做之前創建遠程用戶(或更一般地,在任何形式的任何套接字連接可以給服務守護程序進行),作爲調用否則將失敗,並沒有登錄憑據被發現。

您不需要krb5-workstation軟件包和實用程序已安裝或在執行機器上可用,以使其工作。

[1] - http://hadoop.apache.org/docs/stable1/api/org/apache/hadoop/security/SecurityUtil.html#login(org.apache.hadoop.conf.Configuration,%20java.lang.String,%20java.lang.String)

0

我有類似的問題。我只是把我在文檔中找不到的東西。

Ensure your site XML files are in your classpath.