2012-04-10 39 views
28

我使用以下指南試圖安裝的Hadoop版本0.20.203.0在僞分佈式配置:沒有數據節點開始

http://www.javacodegeeks.com/2012/01/hadoop-modes-explained-standalone.html

運行start-all.sh腳本後,我跑「太平紳士」。

我得到這樣的輸出:

4825 NameNode 
5391 TaskTracker 
5242 JobTracker 
5477 Jps 
5140 SecondaryNameNode 

當我嘗試使用將信息添加到HDFS:

bin/hadoop fs -put conf input 

我得到了一個錯誤:

[email protected]:~/software/hadoop$ bin/hadoop fs -put conf input 
12/04/10 18:15:31 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417) 
     at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596) 
     at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:416) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377) 

     at org.apache.hadoop.ipc.Client.call(Client.java:1030) 
     at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224) 
     at $Proxy1.addBlock(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
     at $Proxy1.addBlock(Unknown Source) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3104) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2975) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446) 

12/04/10 18:15:31 WARN hdfs.DFSClient: Error Recovery for block null bad datanode[0] nodes == null 
12/04/10 18:15:31 WARN hdfs.DFSClient: Could not get block locations. Source file "/user/hadoop/input/core-site.xml" - Aborting... 
put: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1 
12/04/10 18:15:31 ERROR hdfs.DFSClient: Exception closing file /user/hadoop/input/core-site.xml : org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417) 
     at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596) 
     at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:416) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377) 

org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/hadoop/input/core-site.xml could only be replicated to 0 nodes, instead of 1 
     at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1417) 
     at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:596) 
     at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:523) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1383) 
     at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1379) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at javax.security.auth.Subject.doAs(Subject.java:416) 
     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059) 
     at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1377) 

     at org.apache.hadoop.ipc.Client.call(Client.java:1030) 
     at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:224) 
     at $Proxy1.addBlock(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:82) 
     at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:59) 
     at $Proxy1.addBlock(Unknown Source) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3104) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:2975) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2000(DFSClient.java:2255) 
     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2446) 

我不完全當然,但我相信這可能與datanode沒有運行的事實有關。

有人知道我做錯了什麼,或者如何解決這個問題?

編輯:這是datanode.log文件:

2012-04-11 12:27:28,977 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting DataNode 
STARTUP_MSG: host = m1a2/139.147.5.55 
STARTUP_MSG: args = [] 
STARTUP_MSG: version = 0.20.203.0 
STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-security-203 -r 1099333; compiled by 'oom' on Wed May 4 07:57:50 PDT 2011 
************************************************************/ 
2012-04-11 12:27:29,166 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties 
2012-04-11 12:27:29,181 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered. 
2012-04-11 12:27:29,183 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s). 
2012-04-11 12:27:29,183 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started 
2012-04-11 12:27:29,342 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered. 
2012-04-11 12:27:29,347 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists! 
2012-04-11 12:27:29,615 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /tmp/hadoop-hadoop/dfs/data: namenode namespaceID = 301052954; datanode namespaceID = 229562149 
     at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232) 
     at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:354) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:268) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1480) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1419) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1437) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1563) 
     at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1573) 

2012-04-11 12:27:29,617 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down DataNode at m1a2/139.147.5.55 
************************************************************/ 
+1

您是否嘗試啓動datanode?試試'sudo /etc/init.d/hadoop-0.20-datanode start' – 2012-04-10 22:53:26

+0

如果有,可以發佈數據節點的日誌嗎? – 2012-04-10 23:03:30

+0

它關於datanode ..你可以更新datanode日誌,你也可以配置文件。 – 2012-04-11 05:19:07

回答

47

您在DN日誌中收到這個錯誤在這裏描述:http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#java-io-ioexception-incompatible-namespaceids

在這個頁面:

目前,似乎有兩種解決方法,如下所述。

解決方法1:從零開始

我可以證明以下步驟解決這個錯誤開始,但副作用是不會讓你快樂(我也沒有)。將粗的解決方法我發現是:

  1. 停止集羣
  2. 刪除上有問題的數據管理部的數據的目錄:目錄是通過在CONF/HDFS-site.xml中dfs.data.dir指定;如果您是本教程中,相關的目錄是/程序/ Hadoop的/ tmp目錄/ DFS /數據
  3. 重新格式化的NameNode(注:在此過程中的所有HDFS數據丟失)
  4. 重新啓動集羣

當刪除所有HDFS數據並從頭開始聽起來不是一個好主意(在初始設置/測試期間可能沒問題),您可以嘗試第二種方法。

解決方法2:更新有問題的DataNodes的名稱空間ID

非常感謝賈裏德Stehler以下建議。我還沒有自己測試過,但隨時可以嘗試一下,並向我發送您的反饋。這種解決方法是「微創」爲你只需要編輯對問題的DataNodes一個文件:

  1. 停止數據管理部
  2. 編輯名稱空間ID在/電流值/版本,以匹配當前的NameNode的價值
  3. 重新啓動數據管理部

如果您按照我的教程說明,相關文件的完整路徑是:

NameNode: /app/hadoop/tmp/dfs/name/current/VERSION

DataNode: /app/hadoop/tmp/dfs/data/current/VERSION

(background: dfs.data.dir is by default set to

${hadoop.tmp.dir}/dfs/data, and we set hadoop.tmp.dir

in this tutorial to /app/hadoop/tmp).

如果你想知道版本的內容看起來怎麼樣,這裏是我的一個:

# contents of /current/VERSION

namespaceID=393514426

storageID=DS-1706792599-10.10.10.1-50010-1204306713481

cTime=1215607609074

storageType=DATA_NODE

layoutVersion=-13

+0

所以這確實爲我工作。但是,在得到錯誤之前,它運行得很好。是什麼讓我陷入了一種糟糕的狀態,這樣我就不必再糾正這些問題了? 「全部關閉」後發生錯誤。 – nick 2013-07-09 21:46:16

+0

我會更進一步,我使用此修復程序後,昨天關閉彈出相同的錯誤。我在Mac上運行它,如果它有任何區別(它真的不應該)。 – nick 2013-07-11 20:11:17

+0

解決方法1爲我工作。謝謝。 – Bhushan 2013-09-04 07:28:32

2

我一直在使用CDH4作爲我的版本的Hadoop,並一直有麻煩配置它。即使嘗試重新格式化我的namenode後,我仍然收到錯誤。

我的版本文件位於

/var/lib/hadoop-hdfs/cache/{username}/dfs/data/current/VERSION 

您可以通過尋找hadoop.tmp.dir財產找到HDFS緩存目錄的位置:

more /etc/hadoop/conf/hdfs-site.xml 

我發現,通過做

cd /var/lib/hadoop-hdfs/cache/ 
rm -rf * 

然後reformatti在namenode我終於能夠解決這個問題。感謝第一次回覆,幫助我弄清楚我需要炸彈的文件夾。

2

嘗試格式化您的datanode並重新啓動它。

2

我嘗試了Jared Stehler在Chris Shain的回答中提出的方法2,我可以確認在做這些更改後,我能夠解決上述問題。

我對名稱和數據版本文件都使用了相同的版本號。意思是說將版本號從文件VERSION裏面(/ app/hadoop/tmp/dfs/name/current)複製到VERSION裏面(/ app/hadoop/tmp/dfs/data/current),它的功能就像魅力

乾杯!

7

我在僞節點上使用hadoop1.1.2有同樣的問題 所以我跑bin/stop-all.sh來停止集羣 然後在hdfs-site中看到我的hadoop tmp目錄的配置。XML

<name>hadoop.tmp.dir</name> 
<value>/root/data/hdfstmp</value> 

於是我走進/根/數據/ hdfstmp和使用命令(你可能會失去烏爾數據)

rm -rf * 

然後進行格式化NameNode會再次

bin/hadoop namenode -format 
刪除所有文件

然後使用啓動集羣

bin/start-all.sh 

主要原因是bin/hadoop namenode -format沒有刪除舊數據。所以我們必須手動刪除它。

+1

這對我2.2.0版本的工作,需要清空datanode,數據目錄。 – 2014-07-02 23:55:01

+0

謝謝!這對2.6.0有效! :) – 2015-04-30 03:15:23

+0

對於2.6.0這是工作!我嘗試過所有其他的,但失敗了。 – Nakul91 2015-05-15 12:45:11

4

待辦事項以下步驟:

1. bin/stop-all.sh 
2. remove dfs/ and mapred/ folder of hadoop.tmp.dir in core-site.xml 
3. bin/hadoop namenode -format 
4. bin/start-all.sh 
5. jps 
1

我使用未修改Cloudera的快速啓動VM 4.4.0-1

時作爲參考遇到這個問題,Cloudera的經理說我的數據節點的健康狀況良好,甚至儘管DataStreamer stacktrace中的錯誤消息表示沒有數據節點正在運行。

功勞歸於https://stackoverflow.com/a/10110369/249538解決方法#2,但我會詳細介紹使用cloudera quickstart vm的具體體驗。

具體地說,我做的:
順序,停止該服務通過Cloudera的經理http://localhost.localdomain:7180/cmf/services/status

發現我VERSION文件通過hue1, hive1, mapreduce1, hdfs1
sudo find/-name VERSION

我得到:

/dfs/dn/current/BP-780931682-127.0.0.1-1381159027878/current/VERSION 
/dfs/dn/current/VERSION 
/dfs/nn/current/VERSION 
/dfs/snn/current/VERSION 

我檢查了這些文件的內容,bu他們都有匹配的namespaceID,只有一個文件完全沒有。所以我添加了一個條目。

然後我通過cloudera管理器以相反順序重新啓動服務。 現在我可以-put東西到hdfs上。

+0

我們在亞馬遜雲平臺上設置了預測IO集羣,我們也遇到過類似的問題。最後,在stackoverflow上爬取所有頁面後,此修復程序爲我工作。謝謝! – 2015-03-13 15:06:47

0

在我的情況下,我錯誤地設置了dfs.name.dirdfs.data.dir的一個目的地。正確的格式爲

<property> 
<name>dfs.name.dir</name> 
<value>/path/to/name</value> 
</property> 

<property> 
<name>dfs.data.dir</name> 
<value>/path/to/data</value> 
</property> 
7

好吧,我張貼此一次:

萬一有人需要這個,Hadoop的的新版本(基本上我運行2.4.0)

  • 在這種情況下,停止集羣sbin/stop-all.sh

  • 然後轉到/etc/hadoop獲取配置文件。

在文件:hdfs-site.xml中查找與dfs.namenode.name對應的目錄路徑。dir dfs.namenode.data.dir

  • 遞歸刪除這兩個目錄(rm -r)。

  • 現在通過bin/hadoop namenode -format

  • 格式化NameNode和最後sbin/start-all.sh

希望這有助於。

+0

曾與hadoop 2.6.0與Ubuntu 15.04 – Prashant 2016-01-30 10:15:18

+0

工作hadoop 2.7.4與Ubuntu 16.04。謝謝 – 2017-10-16 18:11:39

0

我有一個數據節點缺少 同樣的問題,我按照此步驟是爲我工作

是個Datanode所在的文件夾1.find。 CD的Hadoop/hadoopdata/HDFS 2.look在該文件夾,你會看到什麼樣的文件,你在HDFS LS 3.刪除數據管理部文件夾,因爲它是舊版本的數據節點的 室射頻/數據節點/ * 4.你會得到後的新版本跑過 先前的命令 5.啓動新的datanode hadoop-daemon.sh啓動datanode 6.刷新Web服務。您將看到丟失的節點出現 ​​