我正在尝试使用以下指南在伪分布式配置中设置 Hadoop版本0.20.203.0 :
http://www.javacodegeeks.com/2012/01/hadoop-modes-explained-standalone.html
运行start-all.sh
脚本后,我运行“jps”。
我得到了这个输出:
4825 NameNode
5391 TaskTracker
5242 JobTracker
5477 Jps
5140 SecondaryNameNode
当我尝试使用以下命令向hdfs添加信息时:
bin/hadoop fs -put conf input
我收到了一个错误:
hadoop@m1a2:~/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
************************************************************/
答案 0 :(得分:47)
此处描述了您在DN日志中收到的错误:http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#java-io-ioexception-incompatible-namespaceids
从该页面开始:
目前,似乎有两种解决方法,如下所述。
解决方法1:从头开始
我可以证明以下步骤解决了这个错误,但副作用不会让你开心(我也不会)。我找到的原始解决方法是:
当删除所有HDFS数据并从头开始听起来不是一个好主意(在初始设置/测试期间可能没问题),您可能会尝试第二种方法。
解决方法2:更新有问题的DataNode的namespaceID
非常感谢Jared Stehler提出以下建议。我还没有自己测试过,但请随意尝试并向我发送反馈。此解决方法是“微创的”,因为您只需编辑有问题的DataNode上的一个文件:
如果您按照我的教程中的说明操作,相关文件的完整路径为:
NameNode:/ app / hadoop / tmp / dfs / name / current / VERSION
DataNode:/ app / hadoop / tmp / dfs / data / current / VERSION
(背景:dfs.data.dir默认设置为
$ {hadoop.tmp.dir} / dfs / data,我们设置hadoop.tmp.dir
本教程中的/ app / hadoop / tmp)。
如果你想知道VERSION的内容是什么样的,这是我的一个:
/ current / VERSION的内容
namespaceID = 393514426
storageID = DS-1706792599-10.10.10.1-50010-1204306713481
cTime = 1215607609074
storageType = DATA_NODE
layoutVersion = -13
答案 1 :(得分:11)
好的,我再次发布这个:
如果有人需要这个,对于较新版本的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
最后sbin/start-all.sh
希望这有帮助。
答案 2 :(得分:7)
我使用hadoop1.1.2在伪节点上遇到了同样的问题 所以我运行了bin / stop-all.sh来停止集群 然后在hdfs-site.xml
中看到了我的hadoop tmp目录的配置<name>hadoop.tmp.dir</name>
<value>/root/data/hdfstmp</value>
所以我进入了/ root / data / hdfstmp并使用命令删除了所有文件(你可能会丢失你的数据)
rm -rf *
然后再次格式化namenode
bin/hadoop namenode -format
然后使用
启动集群bin/start-all.sh
主要原因是bin / hadoop namenode -format没有删除旧数据。所以我们必须手动删除它。
答案 3 :(得分:5)
执行以下步骤:
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
答案 4 :(得分:2)
我一直在使用CDH4作为我的hadoop版本,并且一直无法配置它。即使在尝试重新格式化我的名字节点后,我仍然收到错误。
我的VERSION文件位于
/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 *
然后重新格式化namenode我终于能够解决问题了。感谢第一个回复,帮助我弄清楚我需要炸弹的文件夹。
答案 5 :(得分:2)
尝试格式化datanode并重新启动它。
答案 6 :(得分:2)
我按照Jared Stehler在Chris Shain的回答中尝试使用方法2,我可以确认在完成这些更改后,我能够解决上述问题。
我对名称和数据VERSION文件使用了相同的版本号。意思是说将文件VERSION里面的版本号(/ app / hadoop / tmp / dfs / name / current)复制到VERSION里面(/ app / hadoop / tmp / dfs / data / current)它就像魅力一样
干杯!
答案 7 :(得分:1)
使用未经修改的cloudera quickstart vm 4.4.0-1
时遇到此问题作为参考,cloudera经理表示我的datanode状况良好,即使DataStreamer stacktrace中的错误消息表明没有数据节点正在运行。
来自https://stackoverflow.com/a/10110369/249538的解决方法#2,但我将详细介绍使用cloudera quickstart vm的具体体验。
具体来说,我做了:
按此顺序停止服务hue1, hive1, mapreduce1, hdfs1
通过cloudera经理http://localhost.localdomain:7180/cmf/services/status
通过以下方式找到我的VERSION
文件:
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
我检查了这些文件的内容,但它们都有一个匹配的namespaceID
,除了一个文件完全没有它。所以我添加了一个条目。
然后我通过cloudera管理器以相反的顺序重新启动服务。
现在我可以-put
填入hdfs。
答案 8 :(得分:0)
就我而言,我错误地为dfs.name.dir
和dfs.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>
答案 9 :(得分:0)
我遇到了同样缺少datanode的问题 我按照这个对我有用的步骤
1.找到datanode所在的文件夹。 cd hadoop / hadoopdata / hdfs 2.在文件夹中查看,您将看到hdfs中的文件 的 LS 强> 3.删除datanode文件夹,因为它是datanode的旧版本 rm -rf / datanode / * 4.运行上一个命令后,您将获得新版本 5.启动新的datanode hadoop-daemon.sh启动datanode 6.刷新Web服务。您将看到丢失的节点出现 JS Fiddle