巧用 Hive 模拟分布式 grep

grep 由于内置高效的字符串搜索算法,兼容各种风格的正则,且功能众多,有着 linux 下字符串处理三剑客之一的称号,但是到了如今的大数据/分布式时代,这种单机时代的工具显得有些廉颇老矣。。。

1、需求背景

我们经常会遇到需要在 hadoop 上查找原始日志,校对 ETL 数据的情况,往往很多同学直接用的老办法:

hadoop fs -cat /M_track/$yesterday/* | grep ooxx | wc -l

这种情况下是要把分布在整个集群上的日志都拉到单机上 grep 然后 wc,这是一件极其痛苦的事情,瓶颈很显然卡在了网络 IO 上,一百多 G 的日志,一个简单的 grep 往往半小时都出不来结果。。。

好在数据在 hadoop 上,那我们为了执行分布式查询,自然可以想到写 mr 来解决,但是一个简单的统计查询,也太重量级了,整个编写打包上传流程走下来,时间成本太高,那我们自然想到了 hive, 使用 hive 直接解析,查询原始日志。

hive 中的 like 支持的是通配,和 mysql 一样,RLIKE/REGEXP 支持的是正则,这样大部分的 grep 正则、通配能干的事情,hive 也都可以干了。

2、流程与案例

2.1 首先针对整个原始日志建表

create EXTERNAL table IF NOT EXISTS ext_M_track (
    line     string
)
PARTITIONED BY (statDate STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\001‘
COLLECTION ITEMS TERMINATED BY ‘\002‘
MAP KEYS TERMINATED BY ‘\003‘
LINES TERMINATED BY ‘\n‘
STORED AS TEXTFILE
LOCATION ‘/M_track‘
;

2.2 添加分区

ALTER TABLE ext_M_track ADD PARTITION (statDate=‘20140903‘) LOCATION ‘/M_track/20140903‘;

2.3 案例分析

2.3.1 查找包含某个字符串的记录总数

select count(1) from ext_M_track where statDate=‘20140903‘ and line like ‘%tag=pvstatall%‘;

2.3.2 按小时统计全天的流量分布

select regexp_extract(line, "(03/Sep/2014:\\d{2})", 1) hour, count(1) pv from ext_M_track where statDate=‘20140903‘ and line like ‘%tag=pvstatall%‘ group by regexp_extract(line, "(03/Sep/2014:\\d{2})", 1);

03/Sep/2014:22	40867
03/Sep/2014:21	38951
03/Sep/2014:13	35113
03/Sep/2014:14	34285
03/Sep/2014:15	34120
03/Sep/2014:20	33852
03/Sep/2014:12	33308
03/Sep/2014:10	32644
03/Sep/2014:11	32362
03/Sep/2014:16	32284
03/Sep/2014:09	30031
03/Sep/2014:17	29023
03/Sep/2014:23	28247
03/Sep/2014:19	28125
03/Sep/2014:18	26250
03/Sep/2014:08	24452
03/Sep/2014:07	17456
03/Sep/2014:00	16103
03/Sep/2014:01	11679
03/Sep/2014:06	11074
03/Sep/2014:02	7262
03/Sep/2014:05	5367
03/Sep/2014:03	5047
              	4666
03/Sep/2014:04	4221

2.4 如何流程化

步骤 2.2 中我们对某天的日志进行了手动处理,我们实际使用当中,很容易流程化,将下面的脚本用 crontab 定期调度即可:

#!/bin/bash
# 为库 tmpdb 表 ext_M_track 每天建立分区
yesterday=`date -d ‘1 days ago‘ +‘%Y%m%d‘`
hive -e "use tmpdb; ALTER TABLE ext_M_track ADD PARTITION (statDate=‘$yesterday‘) LOCATION ‘/M_track/$yesterday‘;"

3、Refer:

[1] LanguageManual UDF

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

[2] archive-analysis

https://github.com/vinaygoel/archive-analysis/tree/master/hive/cdx

时间: 2025-01-06 23:08:30

巧用 Hive 模拟分布式 grep的相关文章

分布式事务基于消息中间件实现

环境需求:假如佳先森有5个女朋友(有点复杂),每天晚上佳先森都有给他的女朋友打电话说晚安,那么每给一个女朋友打电话,其他女朋友都要进入等待状态.一个一个打下去...等打到最后一个已经是凌晨了,对方都睡了.那么有什么办法可以解决呢?此时佳先森可以利用微信公众号将自己甜言蜜语放进公众号中,让他女朋友订阅公众号,则这些女朋友不用依次等待又可收到消息.此原理就是消息队列. 一.什么是中间件 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用,不能直接给客户带来价值的软件统称为中间件. 二.什么是

阿里云服务器centos7.3下搭建hadoop伪分布式环境

一.软硬件环境 CentOS 7.2 64位 OpenJDK-1.8.0 Hadoop-2.7 二.安装SSH客户端 安装ssh: yum install openssh-clients openssh-server 安装完成后,使用以下命令测试: ssh localhost输入 root 账户的密码,如果可以正常登录,则说明SSH安装没有问题. 配置SSH免key登陆 hadoop是一个分布式系统,节点间通过ssh通信,为了避免在连接过程中人工输入密码,需要进行ssh免key登陆的配置,由于本

【Todo】【转载】全栈工程师-Hadoop, HBase, Hive, Spark

学习参考这篇文章: http://www.shareditor.com/blogshow/?blogId=96 机器学习.数据挖掘等各种大数据处理都离不开各种开源分布式系统, hadoop用于分布式存储和map-reduce计算, spark用于分布式机器学习, hive是分布式数据库, hbase是分布式kv系统, 看似互不相关的他们却都是基于相同的hdfs存储和yarn资源管理, 本文通过全套部署方法来让大家深入系统内部以充分理解分布式系统架构和他们之间的关系.

Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.Hive是如何运行,以及基于Hadoop数据仓库的构建和分布式数据库内部具体实现.如有不足,后续及时修改. HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持. HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本

二、Hadoop-2.6的完全分布式安装模式

一.Hadoop的3中运行模式 1.1.单机模式.安装简单,几乎不用作任何配置,但仅限于调试用途: 1.2.伪分布式模式.在单节点上同时启动namenode.secondary namenode.datanode.JobTracker.TaskTracker 5个进程,模拟分布式运行的各个节点. 1.3.完全分布式模式.正常的Hadoop集群,由多个节点构成. 二.Hadoop-2.6的完全分布式安装模式 2.0.准备文件 (1)Jdk1.7(或其他版本):jdk-7u79-linux-x64.

Hive的MoveTask错误

最近在部署Hive上线,结果在线上线下同时出现了MoveTask报错的现象,虽然两者错误的日志以及错误信息一样,但是经过分析解决又发现两者的原因是不一样的. 首先线下的错误日志: 2015-05-18 18:53:09,679 ERROR [main]: exec.Task (SessionState.java:printError(833)) - Failed with exception Unable to rename: hdfs://hadoop-master:9000/tmp/hive

伪分布式模式的Hadoop环境搭建

一.本文说明:     本次测试在一台虚拟机系统上进行伪分布式搭建.Hadoop伪分布式模式是在单机上模拟Hadoop分布式,单机上的分布式并不是真正的伪分布式,而是使 用线程模拟分布式.Hadoop本身是无法区分伪分布式和分布式的,两种配置也很相似.唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均 是一个机器. 二.环境说明:      操作系统:Cent Os 6.7      hadoop版本:hadoop-2.7.2      JDK版本:jdk1.8_77     备注:

60分钟内从零起步驾驭Hive实战

内容: 1.Hive本质解析: 2.Hive安装实战: 3.使用Hive操作搜索引擎数据实战: ==========Hive本质到底是什么?============ 1.Hive是分布式数据仓库,同时又是查询引擎,所以 Spark SQL取代只是Hive 查询引擎,在企业实际生产环境下 Hive + Spark SQL是目前最为经典的数据分析组合: 2.Hive本身就是一个简单单机版本的软件,主要负责: 1)    把HQL翻译成Mapper(s)-Reducer-Mapper(s)的代码: 并

第54课:Hive集群安装和测试

一.Hive集群安装 1,安装好Hadoop,并启动HDFS和YARN. 2,下载hive 1.2.1 http://apache.fayea.com/hive/hive-1.2.1/ apache-hive-1.2.1-bin.tar.gz 上传文件至集群中 3. 安装Hive [email protected]:~# ls apache-hive-1.2.1-bin.tar.gz  core  links-anon.txtaaa  公共的  模板  视频  图片  文档  下载  音乐  桌