使用hive进行日志分析
2013-12-11 14:51
274 查看
任务
将一批登陆日志导入到hive中,然后通过hive计算如下数据,并将计算结果存入mongoDB
1. 每小时的登陆用户数(qid消重)
2. 每小时通过各渠道登陆各游戏的用户数
3. 12月9日10点的新用户
登陆日志的数据结构如下所示:
年 月时分秒
gkey 登陆时间 qid skey 渠道 ip地址
步骤
1.在hive中建立日志的表结构
由于登陆日志中,有一些无用的信息需要剔除,例如”info、SPR“等,因此在建表时,需要通过自定义SerDe(serialize/deserialize,数据序列化和反序列化时格式化数据)来提取特定信息。
2.加载数据到登陆日志表
日志文件是按小时组织的,因此一天有24个文件。通过使用“20131208*”可以将12月8号那天的24个文件一次性加载到hive中。
3.在hive中建立计算结果的表结构
storedby指定了该表的存储位置。这里使用了开源的Hive-mongo程序使hive的计算结果直接保存到mongoDB中。
tblproperties中指定了mongo的host、port、db、collection。
4.加载数据到计算结果表
遇到的坑
1.加载数据到登陆日志表失败,所有记录的值都为null
原因:正则表达式编写不正确。
由于自定义了表属性信息serdeproperties,因此要求正则表达式必须能与日志格式完全匹配,否则提取不到特定信息。
为了写出正确的正则表达式,首先在Regex Match Tracer中编写来匹配日志,成功后再将每个正则表达式中的转义字符再加上一个转义符号"\"(详细解释),但仍然加载不成功。
仔细分析后发现,在Regex Match Tracer中用来匹配的那条日志记录,其"渠道"字段都为字符串,因此我在正则表达式中直接使用\w+来匹配,而日志中绝大多数的记录,其“渠道”字段中有分隔符“-”,从而导致绝大多数日志记录不匹配。
而每次查看日志表时,只查看前10条记录,恰好前10条记录都不匹配,让我误以为所有的都是null。
2.加载数据到计算结果表时,经常性的失败
原因:将mongo.host写成127.0.0.1
hive会将操作语句转换为map-reduce任务,map-reduce会在w5-w15集群中进行分布式运算。
本机为w5,而mongodb只有在w5上才有。若任务分配到w5则能成功连上mongodb,若分配到其他机器上,则会尝试连接其他机器的mongodb,当然会连不上而导致失败。
相关文章推荐
- 使用hadoop和hive来进行应用的日志数据分析
- 使用hive来分析flume收集的日志数据
- 使用Pig对手机上网日志进行分析
- 使用Logstash进行日志分析
- flume使用之flume+hive 实现日志离线收集、分析
- 使用objdump进行Android crash 日志 分析
- linux下使用awk,wc,sort,uniq,grep对nginx日志进行分析和统计
- hadoop日志分析系统二 第二部分利用hadoop平台进行数据处理 第三种方式 hive+sqoop+zookeeper方式
- 通过Hive及其Udf函数进行Nginx日志分析
- 一次有趣的Debug——使用Lumigent Log Explorer对SQL Server事务日志进行分析,对SQL Server事务、操作进行撤销(恢复)
- [置顶] 使用Flume+Kafka+SparkStreaming进行实时日志分析
- flume学习(六):使用hive来分析flume收集的日志数据
- windows下使用MYSQL的mysqldumpslow进行慢日志分析
- 使用Lumigent Log Explorer对SQL Server事务日志进行分析,对SQL Server事务、操作进行撤销
- flume学习(六):使用hive来分析flume收集的日志数据
- linux下使用awk,wc,sort,uniq,grep对nginx日志进行分析和统计
- flume学习(六):使用hive来分析flume收集的日志数据
- Hadoop详解(七)——Hive的原理和安装配置和UDF,flume的安装和配置以及简单使用,flume+hive+Hadoop进行日志处理
- 使用Hive的正则解析器RegexSerDe分析nginx日志
- windows下使用MYSQL的mysqldumpslow进行慢日志分析