写点什么

12.6 大数据仓库 Hive

用户头像
张荣召
关注
发布于: 2020 年 12 月 14 日

1.如果用 MapReduce 实现下面语句?

不同年龄段对页面的喜好。PV_Users.

单独一天的数据可记录数据库。如果统计一年的数据,数据则是万亿级规模,普通数据库无法存储,普通数据库 SQL 计算无法执行。

==>数据存储使用 HDFS,统计使用 MapReduce。


直接写 MapReduce 程序,比较复杂,是否有工具将 SQL 语句直接转化为 MapReduce 程序。

==>Hive.

2.Hive 实现查询原理

3.Hive 命令

hive>  CREATE TABLE pokes(foo INT,bar STRING)


hive> SHOW TABLES;


hive> ALTER TABLE pokes ADD COLUMNS(new_col INT);


hive> DROP TABLE pokes;


hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;


hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15'

3.Hive 架构

解析:

Metastore:  元数据:表名称,字段名称,字段类型。


Client 获取 SQL,通过 Driver 驱动器,提交给 Compiler 编译器。

Compiler 把 SQL 编译成一个执行计划。编译过程:调用 Metastore 记录的表结果信息。

根据表结果信息把元数据关联起来,构建成一个 MapReduce 执行计划。


执行计划提交给 Hadoop。Hadoop 执行 MapReduce。

4.Hive 和 Hadoop 关系

5.Hive 编译器

  • Parser:   把 SQL 转换为抽象语法树(AST)

  • SemanOc  Analyzer:  把抽象语法树转化为查询块(QB)

  • Logical Plan Generator: 把 QB 转换为逻辑执行计划(Logical Plan)

  • Logical OpOmizer:重写执行计划,带入更多的优化后的计划

  • Physical Plan Generator:将逻辑执行计划转化为物理执行计划(Map/Reduce Jobs)

  • Physical Opomizer: 适应性 Join 策略调整


6.Example Query(Filter)

Filter status updates containing 'michael jsckson'

  • SELECT * FROM status_updates WHERE status LIKE 'michael jackson'


7.Example Query(Aggregation)

Figure out total number of status_updates in a given day

  • SELECT COUNT(1) FROM status_updates WHERE ds='2009-08-01'


8.Hive QL-Join in Map Reduce

INSERT OVERWRITE TABLE pv_users

SELECT pv.pageid, u.age

FROM page_view pv

   JOIN user u

   ON (pv.userid = u.userid);

语义分析: 相同 userid 的 pageid,age 数据合并。


逆向分析:

reduce 输出分析:reduce 数据合并输出列为(pageid,age)。

reduce 输入分析:因为 reduce 对相同 key 数据合并,(pageid,age)数据的相同 key 是 userid。

                            ==>reduce 的输入 key:userid。

                            ==>reduce 的输入 value:<数据来自哪张表,pageid>,<数据来自哪张表,age>

map 输出分析: reduce 的输入即为 map 的输出

                            ==>map 的输出 key 为:userid。

                                    map 的输出 value:page_view 表 map 输出 value:<表序号,pageid>,

                                                                 user 表输出 value<表序号,age>

map 输入分析:page_view,user 表的行记录。


正向图解:


8.Hive QL-Join 优化


INSERT OVERWRITE TABLE pv_users

SELECT /*MAPJOIN(PV)*/ pv.pageid, u.age

FROM page_view pv

   JOIN user u

   ON (pv.userid = u.userid);


用户头像

张荣召

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
12.6大数据仓库Hive