原文地址: https://blog.csdn.net/xnby/article/details/51262615
我们使用Flume把第一手的日志导入到了Hadoop中,接下来就要对导入的数据进行分析了。
分析时,可以开发Hadoop的MapReduce程序,这样有开发过程比较慢的缺点。很多人都习惯使用sql语句来进行数据分析和查询,Hive很好的满足了这个要求。
1、把Hadoop的日志转成Hive表就是第一步
这里我尝试的方案是,外表+json的方式
然后就是建立外表的过程,项目的日志格式是/flume/yyyy-mm-dd/h/files,这里使用了日期和时间2个分区参数
建表的语句如下:
建表语句
CREATE EXTERNAL TABLE gatetest(
url string,
ip string,
param struct<request_id: string, method:string, data: map<string, string> >,
agent string,
logtime string,
time string,
type string
)
PARTITIONED BY (mydate string, myhour string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION '/flume';
增加分区
alter table gatetest add partition (date='20160427', hour='0') location '/flume/20160427/0';
查看分区数:
show partitions gateLog;
基于分区查询:
select count(*) from gateLog where date='20160427';
这里有个问题是无法直接使用分区参数和数据值一起做为查询条件