离线作业执行流程
- 通过MapReduce进行数据清洗,得到ETL数据
- 创建Hive表,加载ETL数据
- 进行各种维度的统计,并写入到Hive表中
- 将Hive表中的数据导出到MySql(optional,可利用Sqoop框架实现该功能)
目前第一步已经执行完成,路径在 /etl/part-r-00000
数据格式如下:
time | url | referer | ip | ua | province | pageid |
---|---|---|---|---|---|---|
2013-07-21 16:42:55 | http://www.yihaodian.com/cart/cart.do?action=view | http://www.yihaodian.com/cmsPage/show.do?pageId=20391&provinceId=14 | 117.27.153.190 | Mozilla/5.0 (compatible; MSIE 9.0;) | 福建省 | - |
创建表trackinfo
create external table trackinfo(
time string,
url string,
referer string,
ip string,
ua string,
province string,
pageid bigint
)PARTITIONED BY (day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location '/trackinfo';
说明:创建外部表名叫trackinfo
,根据day
字段进行分区,导入数据的行分隔符是\t
,指定表文件位置在HDFS的trackinfo
文件夹下。
加载ETL数据到trackinfo
load data inpath '/etl/part-r-00000' into table trackinfo partition(day='2013-07-21');
说明:加载HDFS上路径为/etc/part-r-00000
的数据到trackinfo
表中,分区天数day=2013-07-21
。
统计每个省份的总数
create external table province_stat(
province string,
count int
)PARTITIONED BY (day string)
location '/trackinfo/province';
insert overwrite table province_stat partition(day='2013-07-21')
select province,count(province) count from trackinfo group by province;
说明:将trackinfo
中的省份统计结果写到province_stat
表,并按天分区。
HDFS文件展示
总结
其实Hive就是把一个HiveQL语句翻译成一个MapReduce作业去跑,将跑完的结果写出到HDFS上,对于一些简单的统计任务可以用Hive来实现,但如果出现比较复杂的业务场景,还是得写代码来实现。