简介
- 基于HDFS上的数据仓库
- 基于HDFS上的数据分析引擎
- 2.x 前:SQL -----> Hive ----> MapReduce
- 2.x 后:推荐执行引擎为 Spark
- 支持SQL子集
体系架构
- 执行方式:CLI、JDBC、HWI(推荐HUE)
- Hive元信息:表名、列名、列的类型、分区、桶,存储在MySQL中
- 读取MySQL得到Hive元信息
- 数据在HDFS中
安装配置
-
嵌入模式
- 不需要MySQL,使用Hive自带的Derby数据库存储元信息(Derby较小,嵌入到Hive中)
- 只支持一个连接,用于开发和测试
- 本地模式
- 需要MySQL,Hive和MySQL在一起
- 连接驱动:mysql-connector-java-5.1.43-bin
- 远程模式
- 需要MySQL,Hive和MySQL不在一起
- 在 hive-site.xml 中写入mysql地址
- mysql中TBLS存储Hive表信息,COLUMNS_2保存列的信息
数据模型
- 内部表:类似MySQL中的表
-
- 导入数据:load(剪切)
- 静默模式:hive -S(不打印日志)
- 分区表:建立分区,提高效率
- 一个分区对应一个HDFS文件
1 create table emp_part 2 (empno int, 3 ename string, 4 job string, 5 mgr int, 6 hiredate string, 7 sal int, 8 comm int 9 )partitioned by (deptno int) 10 row format delimited fields terminated by ',';
-
- select * from emp_part where deptno=10;
- 打印执行计划:explain select * from emp_part where deptno=10;
- 外部表:只定义表结构,数据保存在HDFS的某目录下
- 桶表:类似Hash分区,对要插入的数据进行hash运算再插入,查询效率提高,插入效率降低
- 视图:
- 是一个虚表,查询操作和普通表一样,但不存储数据,数据来自底层依赖的基表
- 作用:简化复杂的查询(不提高效率)
执行Hive查询
- 执行HQL,HQL是SQL的子集
- 转换为MapReduce程序执行
- 使用 sqoop 导入 mysql 的数据,或将Hive的数据导出到mysql
使用JDBC查询
扫描二维码关注公众号,回复:
11241953 查看本文章
Hive自定义函数
- UDF:User Define Function,封装业务逻辑,本质是java程序