一、简介
Hive是建立在Hadoop HDFS上的数据仓库基础架构;
Hive可以用来进行数据提取转化加载(ETL);
Hive定义了简单的类似SQL查询语言,称之为HQL它允许熟悉SQL的用户查询数据;
Hive允许熟悉MapReduce开发者开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作;
Hive是SQL解析引擎,他将SQL语句转移成M/R JOB然后在Hadoop执行;
Hive的表其实就是HDFS的目录/文件;
二、Hive的体系结构
Hive的元数据
Hive将元数据存储在数据库中(metastore),支持mysql、derby等数据库;
Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等;
Hive的执行过程
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(Plan)的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行;
Hive的体系结构
三、Hive的管理
1、命令行方式
直接输入#<HIVE_HOME>/bin/hive的执行程序
或者输入#hive --service cli
常用的CLI命令
- 清屏: Ctrl + L 或者 !clear
- 查看数据仓库中的表: show tables;
- 查看数据仓库中内置的函数: shou functions;
- 查看表结构: desc 表名
- 查看HDFS上的文件: dfs -ls 目录
- 执行操作系统的命令: ! 命令
- 执行HQL语句: select *** from ***
- 执行SQL的脚本: source SQL文件
2、Web界面方式
- 端口号9999
- 启动方式:hive --servicehwi &
- 通过浏览器访问:http://<IP地址>:9999/hwi/
3、远程服务启动方式
- 端口号10000
- 启动方式:hive --service hiveserver &
- 以JDBC或ODBC的程序登录到hive中操作数据时,必须用远程服务启动方式
四、Hive的数据类型
基本数据类型
- tinyint/smallint/int/bigint:整数类型
- float/double:浮点数类型
- boolean:布尔类型
- string:字符串类型
复杂数据类型
- Array:数组类型,由一系列相同数据类型的元素组成
- Map:集合类型,包含key-value键值对,可以通过key来访问元素
- Struct:结构类型,可以包含不同数据类型的元素,这些元素可以通过“点语法”的方式来得到所需要的元素
时间类型
- Date:从Hive0.12.0开始支持
- Timestamp:从Hive0.8.0开始支持
五、Hive的数据模型
表
- Table 内部表
与数据库中的Table在概念上是类似
每一个Table在Hive中都有一个相应的目录存储数据
所有的Table数据(不包括External Table)都保存在这个目录中
删除表时,元数据与数据都会被删除
- Partition 分区表
Partition对应于数据库的Partition列的密集索引
在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中
- External Table 外部表
指向已经在HDFS中存在的数据,可以创建Partition
它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异
外部表只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表时,仅删除该链接
- Bucket Table 桶表
桶表是对数据进行哈希取值,然后放到不同文件中存储
视图
视图是一种虚表,是一个逻辑概念;可以跨越多张表
视图建立在已有表的基础上,视图赖以建立的这些表称为基表
视图可以简化复杂的查询