例示Hive + Sqoop Export

做完Hive分析后,怎么让普通用户通过web界面访问你的分析结果? 最直接的办法是将分析结果存为另一张Hive表,然后让web应用通过hive jdbc连接这张表。

这种做法的坏处是:Hive结果表在被查询时会临时起MapReduce任务,这对快速返回查询结果不利;如果结果表本身比较大、并且查询方式本身还有点复杂的话,那响应就更慢了,因为Hive对查询的优化能力跟RDBMS没法比。

所以最好把hive结果表再通过sqoop导入到rdbms的一张表中,以适应OLTP环境下的各种查询。

这里以日志分析为例。 假设你拿到了若干很大的日志文件并已存为Hive表,业务方要求你返回总的访问次数、总的访问用户数、访问次数最多的10个用户

第一步当然是对Hive日志表进行分析。由于用户数并非海量,所以结果表可以存成<user_name_id, visit_count>这种格式,最好再导到RDBMS中

create table visiting_user (usernameid string, visitcount int);  --创建Hive结果表
insert overwrite table visiting_user  -- 统计分析
    select usernameid, visitcount from  
      (select usernameid, count(*) as visitcount from coupon11_log group by usernameid) stats 
    order by  visitcount desc 
    limit 10;  

然后把Hive结果表导入mysql

create table visiting_user (usernameid varchar(50), visitcount int); --在mysql中创建结果表

$sqoop export --connect jdbc:mysql://localhost/kent --username kent --password *** --table visiting_user --verbose --export-dir /user/hive/warehouse/visiting_user/ --input-fields-terminated-by '\0001'    ##\0001是Hive的默认列分隔符

最后去mysql里做二次查询

select sum(visitcount) from visiting_user ; --总的访问数
select count(*) from visiting_user ; --总的用户数
select * from visiting_user order by visitcount desc; --访问次数最多的10个用户

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.