将 grep 结果输出到不同目录中的新文件时出现 Hadoop 错误

Hadoop error when outputting the grep results to a new file in a different directory

我正在尝试读取一些文件的内容并使用 grep 查找包含我的搜索查询的行,然后将结果输出到另一个目录中的文件夹中。我收到错误消息“不存在这样的文件或目录”。我已经创建了文件夹结构和文本文件。

hadoop fs -cat /Final_Dataset/c*.txt | grep 2015-01-* > /energydata/2015/01/01.txt

错误:

-bash: /energydata/2015/01/01.txt: 没有那个文件或目录

> /energydata/2015/01/01.txt 表示输出被重定向到 local 文件。 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