Hive小结

三.  Hive


sql(关系型数据库)这种工具对mapreduce这种方式优点:
不用进行思维转换,同时也更加接近人类语言,使用人群较大 


hive用来把sql这种工具通过某种方式跟hadoop结合起来,实现用原来处理问题的思维来处理海量数据


hive语句是 HQL 语句,
类SQL也就是说的HQL:Hive Query Language


hive 执行流程
编译器将一个Hive Query Language转换操作符,操作符是Hive的最小的处理单元,每个操作符代表HDFS的一个操作或者一道MapReduce作业。Hive定义一个处理过程为Operator。


操作符 描述
TableScanOperator 扫描hive表数据
ReduceSinkOperator 创建将发送到Reduce端的<key,value>对
JoinOperator Join两份数据
SelectOperator 选择输出列
FileSinkOperator 过滤输出数据
GroupByOperator GroupBy语句
MapJoinOperator /*+mapjoin(t) */
LimitOperator Limit语句
UnionOperator Union语句


Hive通过ExecMapper和ExecReducer执行MapReduce任务。


1.hive 是什么?  
Hive 数据仓库工具
hive 基于hadoop的数据仓库,可用于存储(HDFS)和计算(MapReduce),可扩展性和高容错性
Hive就是我们所说的使用传统的sql来分析海量数据的工具
可以把Hive当成一个“数据库”,它也具备传统数据库的数据单元,数据库(Database/Schema)和表(Table).但实际上只是Hadoop上的一个工具。


从技术角度来看:
hive就是一个翻译器,将传统的sql转化成mapreduce来计算。
或者说:hive是基于mapreduce 的一个上层数据分析框架


2.hive 两部分组成


1)基于mapreduce
2)使用传统sql的编程思想(类sql语句)


3.hive 的作用?


hive能够用来进行 --- 海量数据的存储  查询  和  离线分析。


4.hive基本架构


1)用户接口:包括 CUI(命令行),JDBC/ODBC,WebUI
2)元数据存储:默认存储在再带的数据库derby(嵌入式数据库)中 , (生产环境)线上使用时一般换位MySql
3)驱动器
4)hadoop:用MapReduce进行计算,用HDFS进行存储


什么是元数据?


数据的数据,比如:文件名称,大小,修改日期,存储块的位置信息


那么 数据库的元数据?
库名,表名,字段,数据类型,创建表的时间,表结构。。


元数据存储位置?  
默认保存自带derby数据库中


5.hive 四大驱动器(Driver)


1)解释器:将类sql的Hql语句解析
2)编译器:将Hql语句编译为Job
3)优化器:优化job
4)执行器:调用hadoop执行job


6.hive访问过程?


Hive通过给用户提供的一系列交互接口,接收到用户的执行(sql),是用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
在使用过程中,只需要将Hive看做是一个数据库就行,本身Hive也具备了数据库的很多特性和功能。


7.库的本质?表的本质?


1)Hive中的数据库概念,本质上仅仅是表的一个目录结构或命名空间。
2)Hive中的表概念,本质上仅仅是数据的一个目录结构或命名空间。


8.hive的数据单元?


1)Databases:数据库。概念等同于关系型数据库的Schema,不多解释;
2)Tables:表。概念等同于关系型数据库的表,不多解释;
3)Partitions:分区。概念类似于关系型数据库的表分区,没有那么多分区类型,只支持固定分区,将同一组数据存放至一个固定的分区中。
4)Buckets (or Clusters):分桶  同一个分区内的数据还可以细分,将相同的KEY再划分至一个桶中,这个有点类似于HASH分区,只不过这里是HASH分桶,也有点类似子分区。 " 更细粒度的操作 "


9.表  分为两种? 区别?
1)表分为:管理表(内部表) , 外部表


2)内部表:
Hive会控制表中数据的生命周期,当删除一张管理表时,同时也会删除表中的数据。管理表中的数据不与其他工具共享


3)外部表:
Hive只控制元数据,当删除一张外部表时,只会删除元数据,并不会删除真实数据。外部表中的数据与其他工具共享


5)内、外部表的区别:
删除表时:
数据是否共享:
一些HiveQL语法不试用于外部表。比如,外部表键表时需要加关键字


10.分区 
1)分区的本质 
 创建目录 --- 一个区的数据都在该目录下
 
2)分区的目的
 创建分区表的最主要的目的是:快速查询
 
3)分区 方式
分区还可以分为静态分区和动态分区


静态分区的分区字段不能增加,
动态分区相反。默认情况下的分区表是静态的。


11.分桶
1)分桶的目的
快速查询
分桶的优点在于,将数据大致平均的、随机的放入多个桶中,这样方便对海量的数据做抽样调查、分析


2)如何进行分桶
Hive以表中的某一列作为分桶的依据(一般都是由id进行分桶),
把id去'hash'值再以桶的个数进行'取模'来计算某条记录属于那个桶




12. hive数据类型 
1)基本数据类型


数据类型 长度 例子
TINYINT 1byte 有符号整数 20
SMALINT 2byte 有符号整数 20
INT 4byte 有符号整数 20
BIGINT 8byte 有符号整数 20
BOOLEAN 布尔类型,true或者false TRUE
FLOAT 单精度浮点型 3.14159
DOUBLE 双精度 3.14159


BINARY 字节数组
STRING 字符序列,可以指定字符集,可以使用单引号或者双引号 'now is the time',"now is the time"
TIMESTAMP(v0.8.0+) 整数,浮点数或者字符串 时间格式


2)复杂数据类型
STRUCT 和C语言中的struct或者对象类似,都可以通过'点'符号访问 struct('John','Doe')
Map Map是一组键-值对元组集合,使用数组表示法(根据key值)可以访问元素 map('first','John','last','Doe')
ARRAY 数组是一组具有相同类型和名称的变量的集合,这些变量成为数组的元素,每个数组元素都有一个索引值,下标


13. hive默认分隔符
\n 换行符 , 分割记录
^A 用于分个字段(列),在CREATE TABLE 语句中可以使用八进制编码\001表示
^B 用于分割ARRARY或者STRUCT中的元素,或用于MAP中键值对之间的分割,在creat语句中\002表示
^C 用于MAP中键和值之间的分隔,在CREATE TABLE语句中使用\003表示


14. hive元数据存储
Hive元数据的本质:
Hive库表和HDFS上的文件结构的对应关系
不配置的话默认在HDFS上的以下目录:hdfs:///user/hive/warehouse/


Hive元数据的存储:
存储在关系型数据库中。默认存Derby  内置数据库 2mb,内嵌在Hive中


15. 多种配置方式,优先级
修改配置文件
hive-site.xml
Hadoop中的配置文件


命令行参数
启动Hive时,可以在命令行添加-hiveconf param=value,但这一设定只对本次启动的Session有效


参数声明
在HiveQL前用set关键字进行参数设定,这一设定的作用域也是Session级的,也是单次有效


**注意:以上三种设定方式的优先级依次递增。即参数声明覆盖命令行参数,命令行参数覆盖配置文件设定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值