本地文件上传HDFS失败求助——按Hortonworks教程操作遇问题
从你的操作描述来看,核心错误put: No such file or directory大概率和路径拼写错误或本地/目标路径不存在有关,先别急着怀疑8020端口(这是HDP沙箱默认的NameNode端口,一般不会出问题),我们一步步排查:
1. 先确认HDFS目标路径是否真的匹配
你提到Ambari里看到了因拼写错误创建的两个空目录,这很可能就是问题根源!执行put命令时的路径可能和实际创建的目录名不匹配。
先在终端执行命令,列出/user/hadoop下的所有目录:
hdfs dfs -ls /user/hadoop
仔细核对输出结果,找到你实际要上传文件的那个目录的准确名称(比如是不是把sf-salaries-2011-2013写成了类似sf-salaries-2011-20131这类拼写错误的名字?)。
如果目标目录不存在,先创建正确的层级目录:
hdfs dfs -mkdir -p /user/hadoop/sf-salaries-2011-2013
(-p参数会自动创建缺失的父目录,避免层级路径不存在的问题)
2. 确认本地文件是否在当前工作目录
执行put命令时,如果只写文件名sf-salaries-2011-2013.csv,HDFS CLI会默认在当前终端所在的本地目录查找这个文件。
先在终端执行:
ls -l sf-salaries-2011-2013.csv
如果输出提示No such file or directory,说明文件不在当前目录,你有两个解决方式:
- 切换到文件所在的本地目录,再执行put命令
- 直接用本地文件的绝对路径,比如:
hdfs dfs -put /home/your-local-username/sf-salaries-2011-2013.csv /user/hadoop/sf-salaries-2011-2013/
3. 简化put命令,减少拼写错误
你当前的put命令写了完整的目标文件名,其实可以省略,让HDFS自动沿用原文件名,这样能避免目标文件名的拼写错误:
hdfs dfs -put sf-salaries-2011-2013.csv /user/hadoop/sf-salaries-2011-2013/
(注意路径末尾的/,明确表示把文件放到这个目录下)
4. 最后排查端口问题(大概率不是)
如果前面的步骤都没问题,再确认NameNode的端口是否正确:
hdfs getconf -confKey fs.defaultFS
如果输出不是hdfs://sandbox-hdp.hortonworks.com:8020,说明你的HDFS配置修改了端口,这时候需要用正确的地址执行put命令,比如:
hdfs dfs -put sf-salaries-2011-2013.csv hdfs://sandbox-hdp.hortonworks.com:正确端口/user/hadoop/sf-salaries-2011-2013/
按照这个流程排查,应该能解决你的文件上传问题。
内容的提问来源于stack exchange,提问作者samba




