我正在使用hadoop版本1.0.1和Ubuntu linux 11.10运行单节点集群。当它崩溃时我正在运行一个简单的脚本,可能是因为我的电脑进入了睡眠状态。我尝试使用
重新格式化文件系统bin / hadoop namenode -format
并收到以下错误:
错误namenode.NameNode:java.io.IOException:无法锁定storage / app / hadoop / tmp / dfs / name。该目录已被锁定。在org.apache.hadoop.hdfs.server.common.Storage $ StorageDirectory.lock(Storage.java:602)
我尝试使用以下命令添加输入文件:
bin / hadoop fs -copyFromLocal dataDirectory / * .txt inputDirectory
并收到错误:
12/04/15 09:05:21 WARN hdfs.DFSClient:DataStreamer异常:org.apache.hadoop.ipc.RemoteException:java.io.IOException:文件/home/hduser/input/book1.txt只能被复制到0个节点,而不是1个
12/04/15 09:05:21 WARN hdfs.DFSClient:块null错误恢复错误datanode [0] nodes == null 12/04/15 09:05:21 WARN hdfs.DFSClient:无法获取块位置。源文件“/home/hduser/input/book1.txt” - 正在中止......
之后,我看到输入目录中的文件,但是它们的大小是0.关于如何添加文件的任何想法?我能够在hadoop崩溃之前添加文件,所以我可以重新安装linux和hadoop,但它似乎有点矫枉过正。感谢。
答案 0 :(得分:5)
您需要先使用
停止hadoopbin / stop-all.sh
然后尝试格式化文件系统,因为hadoop(名称节点和数据节点仍在运行)它会锁定文件系统,可以给出错误。
所以,如果在给出命令bin / stop-all.sh之后,只需要杀死进程,你可以做的就是在shell中给出命令“jps”,这将显示进程(java进程)并将有一个与每个进程相关的pid,你可以给命令“kill processno”,比如“kill 23232”,就像杀死所有进程一样,并使用你说的命令删除你指定的hdfs文件系统文件夹。
并检查磁盘空间是否足够可用,假设您已在Windows中安装了ubuntu,您可以通过在/ host /和某个文件夹中指定文件系统来获得更多空间。 < / em>的
注意:您不需要格式化hdfs,因为您可以停止所有namenode和数据节点并再次启动hadoop进程,因为它不会经常被停止,在停止并启动hadoop后如果它给出任何错误然后您格式化文件系统。
希望这会对你有所帮助......
答案 1 :(得分:3)
尝试手动删除存储namenode数据的目录。这是由mapred-site.xml
中的属性配置的,例如mapred.local.dir
,mapred.system.dir
等。之后,停止hadoop,重新格式化namenode并重试。如果仍然面临问题,那么转到第2步
尝试将namenode配置设置为其他路径而不是当前路径。在此之后,停止hadoop,重新格式化namenode并重试。如果仍然面临问题,那么转到第3步
验证是否存在足够的磁盘空间。如果没有,则在分区中创建一些空间,其中配置了namenode。如果仍然面临问题,那么转到步骤4
在hdfs.site.xml
中,将dfs.replication
设置为0.在此之后,停止hadoop,重新格式化namenode并重试。
如果仍然面临问题,请告知我您的错误/异常。
答案 2 :(得分:2)
过去我遇到过这类问题,对我来说这是因为我的磁盘分区已满。所以我建议你检查你的磁盘,看看它是否相关。
如果是这种情况,只需释放一些空间,重启你的守护进程(你可能必须手动杀死它,有时会发生这种情况),然后重启。
答案 3 :(得分:0)
最重要的是,检查/etc/hadoop/conf/hdfs-site.xml并确保您没有为同一个值指定相同的值:
dfs.name.dir&amp; dfs.data.dir。
两者都应该有不同的值。
阿比