2016-02-10 93 views
0

我在aws上有一個hadoop羣集,我試圖通過hadoop客戶端從羣集外部訪問它。我可以成功hdfs dfs -ls和看到所有的內容,但是當我嘗試putget文件我得到這個錯誤:從羣集外部訪問hdfs

Exception in thread "main" java.lang.NullPointerException 
    at org.apache.hadoop.fs.FsShell.displayError(FsShell.java:304) 
    at org.apache.hadoop.fs.FsShell.run(FsShell.java:289) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
    at org.apache.hadoop.fs.FsShell.main(FsShell.java:340) 

我已經安裝了集羣和我的本地機器都在Hadoop中2.6.0。我已將羣集的conf文件複製到本地計算機,並在hdfs-site.xml中有這些選項(以及其他一些選項)。

<property> 
    <name>dfs.client.use.datanode.hostname</name> 
    <value>true</value> 
</property> 
<property> 
    <name>dfs.permissions.enable</name> 
    <value>false</value> 
</property> 

我的核心-site.xml中包含一個單一的財產集羣和客戶端:

<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://public-dns:9000</value> 
    <description>NameNode URI</description> 
</property> 

我發現類似的問題,但沒能找到解決這個。

+0

這個問題沒有足夠的細節來幫助你。你是如何在本地機器上安裝hadoop命令行工具的? –

+0

和你的'core-site.xml'? –

+0

所以...我找不到任何真正的在線幫助。另一種方法是通過SSH進入集羣來運行所有'hdfs dfs'命令。 –

回答

0

你如何通過SSH進入該機器?

我知道這是一個非常糟糕的主意但要完成工作,你可以使用scp機器上的文件,然後SSH先複製到羣/主,做對複製的本地文件hdfs dfs -put

您也可以通過腳本自動執行此操作,但再次,這只是爲了完成目前的工作。

等待別人回答,知道正確的方法!

+1

事實上這是我最終做的,因爲我找不到解決方案。感謝您的回答! –

+0

如果您想要:您可以接受它 –

0

我在運行hadoop fs -get時遇到了類似的問題,我可以解決它。只需使用本地主機的FQDN(完全限定域名)來檢查所有數據節點是否可以解析。在我的情況下,nc命令成功地使用ip地址作爲數據節點,但不使用主機名。 運行以下命令: for i in cat /<host list file>;做nc -vz $ i 50010;完成 50010是默認數據節點端口

當您運行任何hadoop命令時,它嘗試使用FQDN連接到數據節點,並在那裏提供這個奇怪的NPE。

下面做出口和運行Hadoop的命令 出口HADOOP_ROOT_LOGGER = DEBUG,控制檯

你會看到當它試圖連接到任何數據節點的數據傳輸這個NPE來。

我有一個java代碼這也是做Hadoop的FS -get使用API​​和那裏,例外的是更清晰的

java.lang.Exception的:java.nio.channels.UnresolvedAddressException

讓我知道如果這對你有幫助。