1:hive是一个构建在hadoop上的数据仓库平台,hive提供一个被称为Hive查询语言,来查询存储在Hadoop集群中的数据。hive的查询语句会被解析为mapreduce任务,由hadoop集群执行mapReduce任务读取hdfs分布式文件系统中的数据,hive不会在数据加载时进行验证,而是在查询时进行,读时模式。
2:hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。
3:hive本身不存储和计算数据,依赖于hdfs和mapreduce,hive中的表是逻辑表,是元数据。
4:hbase是一个分布式的,面向列的开源数据库,它是一个适合于非结构化数据存储的数据库,是物理表。
5: hive与关系性数据库:
存储位置:HDFS和本地文件
数据格式:用户定义和系统决定
数据更新:不支持和支持
索引:无和有
执行:MapReduce和Executor(数据库执行引擎)
执行延迟:高和低
6:数据仓库(DW):面向主题,数据稳定,时间而更新,数据模型(星型模型和雪花模型)
7:hive的元数据存储:hive的元数据包括表的名字,表的列,表的分区,表的属性(是否是外部表,表的目录位置),存储在关系型数据库中。
hive的内嵌模式使用的是derby数据库联接,不支持多会话,可以使用hive的本地模式,使mysql数据库联接,支持多会话。
8:hive的数据存储:存储是在hadoop文件系统
内部表和外部表:内部表的操作包含两个步骤:表创建过程和数据加载,删除表时元数据和hdfs文件都会删除
外部表创建只有一个步骤,创建表和加载数据同时完成,删除表时只删元数据。
主要原因是:内部表数据会移动到数据仓库目录中。
9:mapReduce实现基本SQL操作 (主要是明确如何确定key,value)
(1)join实现原理:在map阶段将两个关联的表按照关联键拆成key和value,在shuffe阶段把key值相同组合在一组,最后reduce将value值合并。
红色的标示tag,表示那个表
A 表
uid name key value key value name orderid
1 apple 1 <1,apple> 1 <1,apple> apple 1002
2 orange 2 <1,oranger> 1 <2,1002> apple 1003
---> map --->shuffle 1 <2,1003> --->reduece
B表
uid orderid key value key value name orderid
1 1001 1 <2,1001> 2 <1,oranger> oranger 1003
1 1002 1 <2,1002> 2 <2,1003>
2 1003 2 <2,1003>
(2)group by的实现原理:在map阶段按照分组的字段拆成key和value,在这时value值会按照key汇总,然后在shuffe阶段把key值相同的组合在一组,最后reduce再将value再次汇总。
city表
value 是count值
rank isonline key value key value rank isonline value
A 1 --->map <A,1> 2 ---> shuffle <A,1> 2 A 1 3
A 1 <A,1> 1
rank isoneline key value key value rank isonline value
A 1 --->map <A,1> 1 --->shuffle <B,0> 1 B 0 1
B 0 <B,0> 1
10:sql转为mapreduce的过程:客户端执行sql,driver会找到对应的元数据,driver将sql语句交给编译器,编译器执行编译好的sql后,driver会将sql转为mapreduce任务交由hadoop集群来执行。
11: 什么情况下可以避免mapReduce
本地模式: 如select * from employee limit 10 在这种情况下,hive可以简单地读取employees对应的存储目录下的文件。
过滤条件只是分区字段
12: Hive的UDF函数
方式一:编写一个UDF,需要继承UDF类并实现evaluate()函数,在查询执行过程中,查询中对应的每个应用到这个函数的地方都会对这个类进行实例化。
对于每行输入都会调用到evaluate()函数,然后evaluate()处理后的值会返回给Hive
如果想在Hive中使用UDF,那么需要将对应的jar文件加入到类路径下,然后再创建一个Function
CREATE TEMPORARY FUNCTION ‘函数名' As ‘类名’ (是临时的,查询执行完,就不可以再使用了)
方式二:不变的UDF函数
通过注册的方式:将函数增加到hive内置函数中
registerUDF("方法名","Calss"); // 注册函数方法
13: Hive结合zookeeper(实现了高度可靠的分布式协调功能),支持锁功能
14: Hive和Oozie整合 (Oozie是一个工作流引擎服务器,将工作流的状态和发起任务的客户端分离开)
Oozie通过workflow.xml文件配置Action任务,可以将多个Action串起来
15: hive -f mail.sql >> mail.csv
LOAD DATA local INFILE 'D://dev_code//mail.csv' into table fact_repertory_alarm_mail FIELDS TERMINATED by '\t'