avatar

目录
Hadoop-电商日志分析(Hive实现)

[TOC]

参考:https://coding.imooc.com/class/301.html

之前讲过用HDFS+MapReduce实现电商日志分析,现在用hive实现相同的功能。

外部表

shell
1
2
3
4
5
6
7
8
9
10
# 查看表结构
hive> desc formated emp;
Table Type: MANAGED_TABLE # 这是一个内部表
mysql> use hadoop hive;
mysql> show tables;
mysql> select * from TBLS \G;
# 内部表删除表:HDFS上数据被删除了 & meta信息也被删除

# 创建外部表
create extennal table emmp_extenal()....

![屏幕快照 2019-09-04 下午1.13.47](20190904113856638/屏幕快照 2019-09-04 下午1.13.47.png)

加载数据到外部表

![屏幕快照 2019-09-04 下午1.16.41](20190904113856638/屏幕快照 2019-09-04 下午1.16.41.png)

shell
1
2
3
4
5
6
7
hive> select * from emp_extenal;
# 此时,外部表数据已加载进来;HDFS也有数据

hive> desc formated emp;
Table Type: EXTENAL_TABLE # 这是一个外部表

# 外部表删除表:Hive上表被删除了 & meta信息也被删除 ,但HDFS上数据

分区表

分区就是HDFS的不同目录,比如按天分区,按性别分区,这样省去了杂乱排序需要的全扫描筛选时间。

比如以下是创建基于性别的分区表:

![屏幕快照 2019-09-04 下午4.08.35](20190904113856638/屏幕快照 2019-09-04 下午4.08.35.png)

然后,将性别是F的数据插入对应分区表:

![屏幕快照 2019-09-04 下午4.11.33](20190904113856638/屏幕快照 2019-09-04 下午4.11.33.png)

track_info的创建

按天分区,外部表

外部表是将源端数据move到目标端去,而不是copy

sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
create external table track_info(
ip string,
country string,
province string,
city string,
url string,
time string,
page string
) patitioned by (day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location '/project/trackinfo/';

select * from track_info;
deec formatted track_info;

基于ETL的数据加载到数据仓库

1、将原始数据放到HDFS

2、跑ETL清洗数据etl.sh

定时执行:crontab表达式进行调度、Azkaban调度(依赖):ETLApp==>其他统计分析

(调度系统)

3、加载数据到hive表(要分区)

shell
1
2
3
4
5
6
7
8
LOAD DATA INPATH ‘hdfs://centos01:8020/project/input/etl’ OVERWRITE INTO TABLE track_info partition(day='2013-07-21');

$ hadoop fs -ls /project/track_info
/project/track_info/day=2013-07-21 # 自动建立了分区目录,数据在分区目录里

# 查询hive数据
select * from track_info where day='2013-07-21' limit 5;
# 注意数据要一一对应

使用Hive进行统计分析

shell
1
2
3
4
5
6
7
8
# 查看数据量(跑mapreduce)
# 统计每天的浏览量
select count(*) from track_info where day='2013-07-21';

# 统计各个省份浏览量
select province, count(*) from track_info where day='2013-07-21' group by province;

# 总结:首先用MR做一次ETL,后续操作采用Hive SQL

现在是结果直接打在控制台,怎么存?建立一张目标表,例如省份统计表:

![屏幕快照 2019-09-04 下午3.39.00](20190904113856638/屏幕快照 2019-09-04 下午3.39.00.png)

接下来要把一条SQL执行的结果写在结果表中:

![屏幕快照 2019-09-04 下午3.41.12](20190904113856638/屏幕快照 2019-09-04 下午3.41.12.png)

结果:

![屏幕快照 2019-09-04 下午3.42.47](20190904113856638/屏幕快照 2019-09-04 下午3.42.47.png)

结果数据存在Hive后,怎样使用呢?(例如前端展示)

![屏幕快照 2019-09-04 下午3.44.16](20190904113856638/屏幕快照 2019-09-04 下午3.44.16.png)

使用Hive的离线处理方案总结:

![屏幕快照 2019-09-04 下午3.47.11](20190904113856638/屏幕快照 2019-09-04 下午3.47.11.png)

把各个步骤,写出shell脚本,然后使用Azkaban定时任务调用。

MapReduce与Hive实现对比

使用Hive相当程度减少了代码量(MR代码 > SQL语句)

else TODO

Hadoop分布式集群搭建

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
数据抽取工具:

kafka
flume
sync
数据清洗

hive/tez
pig/tez
storm
spark
其它工具

数据存储:hadoop、hbase,ES、redis
任务管理:azkaban、oozie
数据同步:datax、sqoop
文章作者: Machine
文章链接: https://machine4869.gitee.io/2019/09/04/20190904113856638/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论