您的位置:首页 > 大数据 > Hadoop

对HDFS上多个文件并行执行grep操作

2016-01-12 18:44 429 查看
HDFS上存了大量归档压缩的日志文件,偶尔需要到上面查询一些信息。

hadoop fs虽然可以执行ls,cat等操作,但是却不能直接执行grep操作。写个map reduce程序再执行,虽然可行,却感觉有点麻烦,没有直接使用shell命令方便灵活。经过查询和尝试,终于找到了方法。

举个例子,启用10个进程,查询在2016年1月11日19点和20点之间的所有包含abcdefg的日志记录:

hadoop fs -ls /path-to-log-dir/ | \
grep '2016011119' | awk '{print $8}' | \
xargs -n 1 -I {} -P 10 bash -c "hadoop fs -cat {} | zgrep 'abcdefg'"


说明:

hadoop fs ls:列出目录中的所有文件列表;

grep:根据文件名中的时间过滤出符合时间要求的文件列表;

awk:提取出文件列表中的文件名,得到文件名列表;

xargs:对文件名列表中的每个文件名,执行后面指定的具体操作;

bash -c:指定具体操作的内容;

hadoop fs cat:输出文件内容;

zgrep:对压缩的文件内容进行过滤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: