HIVE-Hive的简单概述

11 篇文章 0 订阅
8 篇文章 0 订阅

什么是Hive?

Hive是一种构建数据仓库的工具。里面有表的概念。
在Mysql里从表中插入的数据,会放在磁盘上。再打开这个表的时候,会把磁盘上的数据规整到一个表格里显示。

但是计算机不会自己规整成表格,所以在Hive中需要一份元数据

这份元数据包括:

元数据(
行的分隔符(这样在映射成表的时候知道能映射成几行)
字段分隔符(这样在映射成表的时候知道能映射成几列)
字段的类型
字段的名称

Hive内部也是有表的概念,Hive把数据存储到HDFS上。
它的元数据存到了本地的轻量级的数据库中。

Hive依赖于HDFS和MapReduce,可以看成是分布式的大表,也支持使用SQL语句进行数据的处理。

Hive原理

1.客户端传一条SQL语句给Hive(Hive支持所有的SQL标准)
2.Hive对SQL进行解析,优化SQL,策略选择器,消耗模型(看下哪种计划是最好的,看下消耗时间),把一个个的SQL解析成一个个MapReduce。(解析器,编译器,优化器)
3.MR计算的数据在HDFS上。MR处理HDFS上的数据。

效率问题:封装的越高层,效率越低

Hive做了什么事情
通过SQL语句解析成MapReduce这个过程是Hive做的。
其它的事情是它指挥别人来做的。

Hive中表的类型

内部表(受控表):受Hive控制。删除内部表的时候,HDFS上的数据及元数据都会被删除。
外部表:删除外部表的时候,HDFS上的数据不会被删除但是元数据会被删除。
临时表(测试):在当前会话期间内存在,会话结束自动消失。生命周期随着session

分区表:将一批数据分成多个目录来存储

为什么创建分区表?
防止暴力扫描全表,需要一个分区表来提高查询效率

往分区中添加数据有四种方式:
(1)insert 指定分区
(2)load data 指定分区
(3)查询已有表的数据,insert到新表中
from day_hour_table insert into table newt partition(dt=01,hour=9898) select id,content
(4)alter table add partition创建空分区,然后使用HDFS命令往空分区目录中上传数据
(5)创建分区,并且指定分区数据的位置

分桶表:取模存储

为什么创建分桶表?
思想:引例找两个文件的url—将url装成hashcode取模,转成小文件,比对小文件

比如,有两个表如上。要找所有用户的订单数,就要进行join。
join底层的原理:先搞一个笛卡尔积。遍历右表n次,效率很慢。

分桶:
把用户信息表存储的时候,根据ID(哈希值)与number(分成小文件的个数)取模,分成多个表来存。
订单表也同样根据ID(哈希值)与number(分成小文件的个数)取模,分成多个表来存。
对应的表两两join就可以完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值