HDFS文件列表追加文本文件及条件查询报错问题咨询
嘿,我来帮你搞定这两个HDFS相关的问题!
问题1:列出HDFS文件并追加至文本文件
你可以结合HDFS的文件查看命令和重定向/追加命令来实现,分两种场景:
追加到本地文本文件
用hdfs dfs -ls列出目标HDFS目录的内容,再通过本地shell的>>符号追加到本地文件(文件不存在会自动创建):hdfs dfs -ls /你的HDFS目录路径 >> /本地文件路径/输出文件.txt举个实际例子:要列出HDFS根目录下的所有文件,追加到本地用户目录的
hdfs_file_list.txt里:hdfs dfs -ls / >> ~/hdfs_file_list.txt追加到HDFS上的文本文件
因为本地shell的重定向无法直接操作HDFS文件,所以要用HDFS自带的appendToFile命令,配合管道读取ls的输出:hdfs dfs -ls /你的HDFS目录路径 | hdfs dfs -appendToFile - /目标HDFS路径/输出文件.txt这里的
-代表读取标准输入的内容,也就是前面ls命令的输出,然后追加到指定的HDFS文件中。
问题2:文件实际存在但提示“No such file or directory”的解决
先给你划重点:这个错误是本地bash shell抛出的,本质是你把HDFS路径当成了本地文件系统的路径来操作,本地系统里根本没有这个路径,所以才会报错。
比如你可能写了这样的错误命令:
hdfs dfs -ls /hdfs_target_dir >> /hdfs_path/test.txt
这里的/hdfs_path/test.txt是HDFS上的路径,但>>是本地shell的操作,bash会去本地硬盘找这个路径,自然找不到。
解决办法分两种情况:
如果目标是本地文件:把输出路径改成本地的合法路径就行,比如:
hdfs dfs -ls /hdfs_target_dir >> ~/本地存储的文件.txt如果目标是HDFS上的test.txt:必须用HDFS的追加命令,不能用本地重定向,命令格式如下:
hdfs dfs -ls /hdfs_target_dir | hdfs dfs -appendToFile - /hdfs_path/test.txt另外还可以检查这几个细节:
- 确认你有访问该HDFS路径的权限:执行
hdfs dfs -ls /hdfs_path看看能不能正常看到test.txt。 - 检查HDFS路径拼写:有没有写错路径名,是不是以
/开头的绝对路径(HDFS路径一般用绝对路径更稳妥)。 - 确认文件确实存在:有时候可能自己记错了路径,再用
hdfs dfs -find / -name test.txt全局搜一下确认位置。
- 确认你有访问该HDFS路径的权限:执行
内容的提问来源于stack exchange,提问作者user8587005
相关产品推荐
相关产品推荐

