这是一个非常基本的问题,涉及在HDFS目录中运行Grep实用程序所生成的输出文件。本质上,我已经在简单的shell脚本中包含了grep命令,该脚本应该在此目录中搜索给定的字符串-这是脚本的参数。该脚本的内容如下:
#!/bin/bash
set - e
cd $HADOOP_HOME
bin/hadoop org.apache.hadoop.examples.Grep
"hdfs://localhost:9000/user/hduser" "hdfs://localhost:9000/user/hduser/out" $1
bin/hadoop fs -get "hdfs://localhost:9000/user/hduser/out/*" "/opt/data/out/"
bin/hadoop fs -rm -r "hdfs://localhost:9000/user/hduser/out"
发送到hdfs out目录的结果将复制到最后第二行的本地目录中。我故意在此hdfs目录中放置了两个文件,其中只有一个包含我要搜索的字符串的多个实例。下面的2个文件位于我的/ opt / data / out目录中。
_SUCCESS
part-r-00000
作业看起来好像运行成功,但是我在两个文件之间看到的唯一内容是在“ part-r-0000”文件中,其字面含义如下。
29472 e
我想我很天真地希望看到字符串所在的文件名,并且可能是对它出现的次数进行计数。
我的问题是,通常从hadoop grep命令返回这些值的方式和位置是什么?我一直在浏览控制台,而地图在运行时减少了工作,并且没有引用存储搜索字符串的文件名。我不确定如何解释“ 29472 e”,因此可以提供任何有关如何访问此信息的指示。
答案 0 :(得分:0)
我了解... 您在HDFS中有一些作业的输出,然后将其复制到本地。 然后,您尝试获取文件中字符串的计数。
在这种情况下,请在以下行之后添加代码
bin/hadoop fs -get "hdfs://localhost:9000/user/hduser/out/*" "/opt/data/out/"
grep -c $1 /opt/data/out/*
此命令将执行预期的操作。 它将提供文件名以及在文件中找到的字符串数。