对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:列出目录中的所有文件列表;
grep:根据文件名中的时间过滤出符合时间要求的文件列表;
awk:提取出文件列表中的文件名,得到文件名列表;
xargs:对文件名列表中的每个文件名,执行后面指定的具体操作;
bash -c:指定具体操作的内容;
hadoop fs cat:输出文件内容;
zgrep:对压缩的文件内容进行过滤。
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:对压缩的文件内容进行过滤。
相关文章推荐
- HDFS启动过程
- 从HDFS拷贝一个表到系统目录生成CSV
- HDFS的 InputFormat自定义
- Spark优化:禁止应用程序将依赖的Jar包传到HDFS
- Hadoop2.x HDFS shell命令
- hadoop fs 命令
- Hadoop集群日常运维
- HDFS快照
- hadoop安装实战(mac实操)
- hadoop2.7.1安装
- hadoop学习
- hadoop hdfs fsimage和eidts
- HDFS 基础
- hadoop
- 【甘道夫】HBase开发环境搭建过程中可能遇到的异常:No FileSystem for scheme: hdfs
- hadoop block
- 启动HDFS
- hadoop源码编译
- Reduce统计结果汇总混乱
- RDD读写HDFS