我试图读取几个文件的内容,并使用grep找到我的搜索查询行,然后将结果输出到另一个目录中的文件夹中。我得到一个错误"没有这样的文件或目录存在"。我已经创建了文件夹结构和文本文件。
hadoop fs -cat /Final_Dataset/c*.txt | grep 2015-01-* > /energydata/2015/01/01.txt
错误:
-bash:/energydata/2015/01/01.txt: No such file or directory
> /energydata/2015/01/01.txt
表示输出被重定向到本地文件。hdfs fs -cat
将输出发送到您的本地机器,此时您不再在Hadoop中操作。grep
只是对数据流起作用,它不关心(或知道)它来自哪里。
在执行该命令之前,需要确保本地存在/energydata/2015/01/
。您可以使用mkdir -p /energydata/2015/01/
创建它。
如果你想从HDFS上的文件中提取某些记录,然后将新文件重写到HDFS,那么我建议不要将文件cat
-ing,而是通过使用Spark或Hive之类的东西来有效地转换数据,从而将处理完全放在集群上。如果做不到,就做一个hadoop dfs -put <local_path> /energydata/2015/01/01.txt
。
下面的CLI命令有效
hadoop fs -cat /FinalDataset/c*.txt | grep 2015-01-* | hadoop fs -put - /energydata/2015/01/output.txt