2012-07-05 53 views
0

當我下面這個教程http://v-lad.org/Tutorials/Hadoop/14%20-%20start%20up%20the%20cluster.html的Hadoop在Windows上使用Eclipse錯誤開始數據節點

我在「啓動集羣」的步驟,但是當我開始數據節點(當我執行命令:斌/ Hadoop的datanode)我收到以下錯誤:

$ bin/hadoop datanode 
12/07/04 23:53:53 INFO datanode.DataNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting DataNode 
STARTUP_MSG: host = halgarci-WS/10.21.144.26 
STARTUP_MSG: args = [] 
STARTUP_MSG: version = 0.19.1 
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/core/branches/bra        nch-0.19 -r 745977; compiled by 'ndaley' on Fri Feb 20 00:16:34 UTC 2009 
************************************************************/ 
12/07/04 23:53:54 ERROR datanode.DataNode: java.io.IOException: Expecting a line        not the end of stream 
     at org.apache.hadoop.fs.DU.parseExecResult(DU.java:181) 
     at org.apache.hadoop.util.Shell.runCommand(Shell.java:179) 
     at org.apache.hadoop.util.Shell.run(Shell.java:134) 
     at org.apache.hadoop.fs.DU.<init>(DU.java:53) 
     at org.apache.hadoop.fs.DU.<init>(DU.java:63) 
     at org.apache.hadoop.hdfs.server.datanode.FSDataset$FSVolume.<init>(FSDa        taset.java:325) 
     at org.apache.hadoop.hdfs.server.datanode.FSDataset.<init>(FSDataset.jav        a:681) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNod        e.java:291) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:        205) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode        .java:1238) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(D        ataNode.java:1193) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNo        de.java:1201) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:13        23) 

12/07/04 23:53:54 INFO datanode.DataNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down DataNode at halgarci-WS/10.21.144.26 
************************************************************/ 

有關如何解決此錯誤的任何建議?

謝謝!

回答

1

DU類執行命令du -sk <dirPath>並嘗試解析其結果。

你得到的異常表明結果(標準輸出)是空的。這裏參考的分析代碼:如果指定的目錄不存在

protected void parseExecResult(BufferedReader lines) throws IOException { 
    String line = lines.readLine(); 
    if (line == null) { 
     throw new IOException("Expecting a line not the end of stream"); 
    } 
    String[] tokens = line.split("\t"); 
    if(tokens.length == 0) { 
     throw new IOException("Illegal du output"); 
    } 
    this.used.set(Long.parseLong(tokens[0])*1024); 
    } 

如果在命令行中運行du你可以看到,STD-out是空的。所以我會認爲這是這種情況。

您是否檢查過datanode數據目錄(配置爲dfs.data.dirhdfs-site.xml)?

+0

如何檢查datanode數據目錄是否存在?不知道它將在哪裏。 不知道這是否有幫助,但在我的「C:\ cygwin \ home \ halgarci \ hadoop-0.19.1 \ conf」文件夾中有一個名爲hadoop-site.xml的文件 – user1047260

+0

A)您可以在' hadoop-site.xml「用於'dfs.data.dir'。 B)你可以在org.apache.hadoop.fs.DU.getExecString()中設置斷點並在調試器中運行數據節點。這就是爲什麼你可以看到'du'被調用的目錄以及在cygwin提示符下執行命令時的結果。 C)你可以通過在名爲'hadoop-default.xml'的文件中查找'dfs.data.dir'的默認值,該文件應該位於hadoop發行版的某個位置。 (使用調試器可能是最好的方法,你不必猜測命令。) – Joe23

3

不知道你是否已經解決了這個問題。 Hadoop使用的'du'命令是windows/system32/builtin,而不是cygwin/bin/du.exe。 我剛剛刪除了Windows builtid du.exe,讓haddop使用cygwin's,然後一切正常。