崩溃后如何格式化和添加文件到hadoop?

时间:2012-04-15 13:35:56

标签: hadoop

我正在使用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,但它似乎有点矫枉过正。感谢。

4 个答案:

答案 0 :(得分:5)

您需要先使用

停止hadoop

bin / 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)

  1. 尝试手动删除存储namenode数据的目录。这是由mapred-site.xml中的属性配置的,例如mapred.local.dirmapred.system.dir等。之后,停止hadoop,重新格式化namenode并重试。如果仍然面临问题,那么转到第2步

  2. 尝试将namenode配置设置为其他路径而不是当前路径。在此之后,停止hadoop,重新格式化namenode并重试。如果仍然面临问题,那么转到第3步

  3. 验证是否存在足够的磁盘空间。如果没有,则在分区中创建一些空间,其中配置了namenode。如果仍然面临问题,那么转到步骤4

  4. hdfs.site.xml中,将dfs.replication设置为0.在此之后,停止hadoop,重新格式化namenode并重试。

  5. 如果仍然面临问题,请告知我您的错误/异常。

答案 2 :(得分:2)

过去我遇到过这类问题,对我来说这是因为我的磁盘分区已满。所以我建议你检查你的磁盘,看看它是否相关。

如果是这种情况,只需释放一些空间,重启你的守护进程(你可能必须手动杀死它,有时会发生这种情况),然后重启。

答案 3 :(得分:0)

最重要的是,检查/etc/hadoop/conf/hdfs-site.xml并确保您没有为同一个值指定相同的值:

dfs.name.dir&amp; dfs.data.dir。

两者都应该有不同的值。

阿比