hadoop :mkdir: 'input': No such file or directory问题

本文记录了作者初接触Hadoop时遇到的问题及解决过程,包括命令版本差异、DataNode启动失败及NameNode格式化等问题。

初接触hadoop,遇到的问题真不少。在执行bin/hadoop fs -mkdir input时,出错了。测试发现,bin/hadoop fs -ls也不行。排查了一会才发现是版本的原因:

2.x以前的版本这个命令,2.x之后的版本命令改成了:bin/hdfs dfs -mkdir -p ..


input目录创建完成之后,开始上传本地目录:

bin/hdfs dfs -put /root/data /input

发现报错,试试拷贝本地文件:

bin/hdfs dfs -copyFromLocal /root/data/person.txt /input

发现也报错:


看提示应该是datanode没启动。通过jps查看,果然是。然后开始重启hadoop,重启了之后,发现datanode依然没成功启来。没办法了,去查启动日志,发现以下异常:

FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to spark1/192.168.122.113:9000. Exiting.

java.io.IOException: Incompatible clusterIDs in /usr/local/programs/hadoop/tmp/dfs/data: namenode clusterID = CID-19f887ba-2e8d-4c7e-ae01-e38a30581693; datanode clusterID = CID-14aac0b3-3c32-45db-adb8-b5fc494eaa3d

这提示应该是指两个clusterID不一致。开始检查dfs下文件,data 和 name文件夹下有一部分文件。本想试试能不能通过文件覆盖解决不一致问题,后来觉得麻烦,就直接把文件name 和 data下的文件删了。然后重启hadoop...

本以为应该很顺利,没想问题又来了:

2016-05-13 15:28:28,952 INFO org.apache.hadoop.hdfs.server.common.Storage: Lock on /usr/local/programs/hadoop/dfs/name/in_use.lock acquired by nodename 25041@spark1
2016-05-13 15:28:28,954 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimage
java.io.IOException: NameNode is not formatted.
    at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1022)
    at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:741)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:538)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:597)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:764)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:748)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)

接着去格式化namenode..

然后,

bin/hdfs dfs -mkdir -p /input
bin/hdfs dfs -put /root/data /input

OK.

接下来,终于可以开始通过spark读取分析hdfs的文件了。。。

原文:https://blog.youkuaiyun.com/ludonqin/article/details/51396187
 

<think>好的,用户在使用Hadoop的copyFromLocal命令时遇到了文件或目录不存在的错误,需要解决这个问题。首先,我应该回忆一下常见的导致这个错误的原因,然后根据这些可能的原因逐步给出解决方案。 首先,用户提到的错误可能是本地文件路径错误或者HDFS目标路径不存在。因此,第一步需要确认本地文件是否存在,路径是否正确。比如用户输入的是input.txt,但可能实际文件名不同,或者路径不对。这时候应该建议用户使用绝对路径或者检查文件名是否正确。 接下来,HDFS的目标路径是否存在也是一个关键点。如果目标目录不存在,copyFromLocal会失败。因此,用户需要先使用hadoop fs -mkdir创建目录,或者确保路径正确。 然后,Hadoop集群的状态也很重要。比如引用[2]提到的安全模式,如果NameNode处于安全模式,就无法执行写操作。这时候需要用户先退出安全模式,使用hdfs dfsadmin -safemode leave命令。另外,引用[3]中的错误提示说明没有运行的DataNode,导致文件无法复制。这时候需要检查DataNode是否启动,集群是否正常运行。 还有权限问题,用户是否有权限写入HDFS的目标路径。可能需要使用chmod或者hadoop fs -chmod来修改权限。 另外,文件是否正在被其他进程占用,比如其他复制操作未完成,导致临时文件存在,这时候需要等待或者清理临时文件。 最后,如果以上步骤都确认无误,可能需要检查Hadoop的配置是否正确,比如core-site.xml和hdfs-site.xml中的配置是否有误,或者重启Hadoop服务。 现在需要将这些步骤整理成清晰的解决方案,分点列出,并引用相关的站内引用支持。同时,根据用户提供的引用,特别是引用[1]的正确用法,引用[2]的安全模式问题,引用[3]的DataNode问题,这些都需要在回答中提及,帮助用户逐步排查问题。</think>### Hadoop copyFromLocal "文件或目录不存在" 解决方案 #### 1. 验证本地文件路径 - **关键步骤**: 使用绝对路径确保文件存在 ```bash ls -l /完整路径/input.txt # 检查本地文件 hadoop fs -copyFromLocal /完整路径/input.txt /目标路径/ ``` - **典型错误**: 相对路径在Hadoop执行环境中可能解析错误,建议优先使用绝对路径[^1] #### 2. 创建HDFS目标目录 - **必要操作**: 目标路径必须预先存在 ```bash hadoop fs -mkdir -p /目标路径 # 递归创建目录 hadoop fs -ls / # 验证目录结构 ``` #### 3. 检查集群运行状态 - **安全模式检测** (引用[2]): ```bash hdfs dfsadmin -safemode get # 查看模式 hdfs dfsadmin -safemode leave # 退出安全模式 ``` - **DataNode验证** (引用[3]): ```bash jps | grep DataNode # 确认DataNode进程存在 hadoop dfsadmin -report # 查看节点状态 ``` #### 4. 权限配置检查 - **双重权限控制**: ```bash hadoop fs -chmod 777 /目标路径 # HDFS权限 chmod 644 本地文件 # 本地系统权限 ``` #### 5. 处理特殊文件状态 - **临时文件清理**: ```bash hadoop fs -rm /目标路径/._COPYING_ # 删除残留临时文件 ``` #### 6. 配置文件验证 - **核心配置检查**: - `core-site.xml` 中 `fs.defaultFS` 配置 - `hdfs-site.xml` 中副本数量配置 ```xml <!-- 示例配置片段 --> <property> <name>dfs.replication</name> <value>1</value> </property> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值