设为首页 加入收藏

TOP

[大数据]使用hive做数据分析
2018-12-07 01:26:12 】 浏览:8
Tags:数据 使用 hive 数据分析

前面使用flume把第一手的日志上传到了hadoop

接下来就是要对数据进行分析了,

这里可以使用hadoop的mapreduce,但是缺点是开发过程比较慢

很多人都习惯使用sql来进行查询,hive很好的满足了这个要求

而且根据大公司的精力,之前大家都是使用自己封装的mapreduce库

后来都转成hive了


把hadoop的日志转成hive表就是第一步了

这里我尝试的方案是

外表+json的方式

!---

hive的json处理需要引入第三方serde

http://congiu.net/hive-json-serde/1.3.7/cdh5/ 这里可以直接下载,省去github自己打包的麻烦

下载下来的jar包直接丢到hive的lib文件夹下

(这里还是需要下源码重新打包下,把hive和hadoop的版本做个配置支持,

网站上面只有cdh4,chd5等1,2个版本的支持,版本对不上容易出现莫名其妙的错误

)

上面这个serde稳定性不行,解析经常容易失败,最后换了

https://github.com/cloudera/cdh-twitter-example 这个开源的

'com.cloudera.hive.serde.JSONSerDe'

下载代码后把hive和hadoop的版本做修改再编译


然后就是建立外表的过程

项目的日志格式是/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';


这里有个问题是无法直接使用分区参数和数据值一起做为查询条件

这个问题自己还要尝试解决

{解决:

JsonSerDe里面有个配置选项跳过哪些无法解析的json串,测试了一下java的解析跟python解析还有有些不全

我用python导出的3w条记录有几百条无法用这个SerDe解析出来。

ALTER TABLE gatetestSET SERDEPROPERTIES ("ignore.malformed.json"="true");

增加这句,这个是在代码库里面的说明找的。

}







编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hive元数据库配置metadata 下一篇Hive表 增改删字段

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }