2014-02-26 100 views
1

我有兩個Hadoop集羣,兩者都運行相同的Hadoop版本。我在兩個集羣中都有一個用戶「testuser」(示例)(所以testuser keytabs都存在於這兩個集羣中)。兩個安全(kerberos)集羣之間的Hadoop distcp

Namenode#1 (source cluster): hdfs://nn1:8020 
Namenode#2 (dest cluster): hdfs://nn2:8020 

我想使用hadoop distcp將一些文件從一個集羣複製到另一個集羣。例如:在源集羣中,我有一個路徑爲「/ user/testuser/temp/file-r-0000」的文件,目標集羣中的目標目錄是「/ user/testuser/dest /」。所以我想要的是從源集羣拷貝file-r-0000到目標集羣的「dest」目錄。

我嘗試了這些至今:

hadoop distcp hdfs://nn1:8020/user/testuser/temp/file-r-0000 hdfs://nn2:8020/user/testuser/dest 

hadoop distcp hftp://nn1:8020/user/testuser/temp/file-r-0000 hdfs://nn2:8020/user/testuser/dest 

我相信我並不需要使用「HFTP://」,因爲我有的Hadoop版本相同。同樣,我也嘗試了這兩種集羣,但我得到的只是一些與安全有關的例外。

當從目的地集羣HFTP運行:

14/02/26 00:04:45 ERROR security.UserGroupInformation: PriviledgedActionException as:[email protected] cause:java.net.SocketException: Unexpected end of file from server 
14/02/26 00:04:45 ERROR security.UserGroupInformation: PriviledgedActionException as:[email protected] cause:java.net.SocketException: Unexpected end of file from server 
14/02/26 00:04:45 INFO fs.FileSystem: Couldn't get a delegation token from nn1ipaddress:8020 

從源羣集在運行時:

14/02/26 00:05:43 ERROR security.UserGroupInformation: PriviledgedActionException as:[email protected] cause:java.io.IOException: Couldn't setup connection for [email protected] to nn/realm2 
With failures, global counters are inaccurate; consider running with -i 
Copy failed: java.io.IOException: Call to nn1ipaddress failed on local exception: java.io.IOException: Couldn't setup connection for [email protected] to nn/realm2 


Caused by: java.io.IOException: Couldn't setup connection for [email protected] to nn/realm2 
    at org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:560) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232) 
    at org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:513) 
    at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:616) 
    at org.apache.hadoop.ipc.Client$Connection.access$2100(Client.java:203) 
    at org.apache.hadoop.ipc.Client.getConnection(Client.java:1254) 
    at org.apache.hadoop.ipc.Client.call(Client.java:1098) 
    ... 26 more 

這也說明我的主機地址不存在於Kerberos數據庫(我沒有確切的日誌)

那麼,我需要以不同的方式配置kerberos,以便在它們之間使用discp嗎?或者我在這裏錯過了什麼?

任何信息將不勝感激。提前致謝。

+0

目前如何安裝kerberos安裝程序 - 任何信息。在那? – Jasper

+0

嗨@賈斯珀,我不知道目前它的設置如何。但通常我會對上述用戶執行kinit(該用戶有一個keytabs文件:testuser.headless.keytab),到目前爲止,所有服務都在這兩個羣集中工作。 我認爲Kerberos與領域並列,對吧?那麼每個kerberos數據庫應該有關於其他的信息還是應該允許其他領域? – dreamer

+1

是的跨領域認證shud被正確設置 - 這可能是問題。你可以禁用Kerberos的安全性並嘗試一次 - 但我想這會起作用。 – Jasper

回答

3

在兩個安全集羣之間使用distcp需要跨域身份驗證。它沒有在這兩個集羣中配置。正確設置跨領域認證後,它工作。