Hive
什么是Hive?
- . 基于Hadoop的数据仓库解决方案
- 将结构化的数据文件映射为数据库表
- 提供类sql的查询语言HQL(Hive Query Language)
- Hive让更多的人使用Hadoop
- Hive成为Apache顶级项目
- Hive始于2007年的Facebook
- 官网:hive.apache.org
Hive的优势和特点
- 提供了一个简单的优化模型
- HQL类SQL语法,简化MR开发
- 支持在不同的计算框架上运行
- 支持在HDFS和HBase上临时查询数据
- 支持用户自定义函数、格式
- 成熟的JDBC和ODBC驱动程序,用于ETL和BI
- 稳定可靠(真实生产环境)的批处理
- 有庞大活跃的社区
Hive的发展里程碑和主流版本
- Hive发展历史及版本
- 07年8月 – 始于Facebook
- 13年5月 – 0.11 Stinger Phase 1 ORC HiveServer2
- 13年10月 – 0.12.0 Stinger Phase 2 - ORC improvement
- 14年4月 – Hive 0.13.0 as Stinger Phase 3
- 14年11月 – Hive 0.14.0
- 15年2月 – Hive 1.0.0
- 15年5月 – Hive 1.2.0
- 16年2月 – Hive 2.0.0 (添加 HPLSQL, LLAP)
- 16年6月 – Hive 2.1.0
Hive和MapReduce
- 以下两块代码那个执行效率更快?
- MapReduce执行效率更快,Hive开发效率更快
Hive元数据管理
- 记录数据仓库中模型的定义、各层级间的映射关系
- 存储在关系数据库中
- 默认Derby, 轻量级内嵌SQL数据库
- Derby非常适合测试和演示
- 存储在.metastore_db目录中
- 实际生产一般存储在MySQL中
- 修改配置文件hive-site.xml
- 默认Derby, 轻量级内嵌SQL数据库
- HCatalog
- 将Hive元数据共享给其他应用程序
Hive体系架构
Hive Interface - 命令窗口模式
- 有两种工具:Beeline和Hive命令行(CLI)
- 有两种模式:命令行模式和交互模式
- 命令行模式
| 操作 | HiveServer2 Beeline | HiveServer1 CLI |
|---|---|---|
| Server Connection | beeline –u <jdbcurl> -n <username> -p <password> | hive –h <hostname> -p <port> |
| Help | beeline -h or beeline --help | hive -H |
| Run Query | beeline -e <query in quote> beeline -f <query file name> | hive -e <query in quote> hive -f <query file name> |
| Define Variable | beeline --hivevar key=value | hive --hivevar key=value |
Hive Interface - 命令窗口模式
- 交互模式
| 操作 | HiveServer2 Beeline | HiveServer1 CLI |
|---|---|---|
| Enter Mode | beeline | hive |
| Connect | !connect <jdbcurl> | N/A |
| List Tables | !table | show tables; |
| List Columns | !column <table_name> | desc table_name; |
| Save Result | !record <file_name> !record | N/A |
| Run Shell CMD | !sh ls | !ls; |
| Run DFS CMD | dfs -ls | dfs -ls ; |
| Run SQL File | !run <file_name> | source <file_name>; |
| Check Version | !dbinfo | !hive --version; |
| Quit Mode | !quit | quit; |
Hive工具操作
-
检查Hive服务是否已经正常启动
-
使用Hive
- hive
-
使用beeline
-
虚拟机里的URL
- jdbc:hive2://localhost:10000/default
-
beeline -u “jdbc:hive2://localhost:10000/default”
-
Hive数据类型 - 原始类型
- 类似于SQL数据类型
| 类型 | 示例 | 类型 | 示例 |
|---|---|---|---|
| TINYINT | 10Y | SMALLINT | 10S |
| INT | 10 | BIGINT | 100L |
| FLOAT | 1.342 | DOUBLE | 1.234 |
| DECIMAL | 3.14 | BINARY | 1010 |
| BOOLEAN | TRUE | STRING | ’Book’ or “Book” |
| CHAR | 'YES’ or “YES” | VARCHAR | 'Book’ or “Book” |
| DATE | '2013-01-31’ | TIMESTAMP | '2013-01-31 00:13:00.345’ |
Hive数据类型-复杂数据类型
- ARRAY:存储的数据为相同类型
- MAP:具有相同类型的键值对
- STRUCT:封装了一组字段
| 类型 | 格式 | 定义 | 示例 |
|---|---|---|---|
| ARRAY | [‘Apple’,’Orange’,’Mongo’] | ARRAY<\string> | a[0] = ‘Apple’ |
| MAP | {‘A’:’Apple’,’O’:’Orange’} | MAP<string, string> | b[‘A’] = ‘Apple’ |
| STRUCT | {‘Apple’, 2} | STRUCT<fruit:string, weight:int> | c.weight = 2 |
Hive元数据结构
| 数据结构 | 描述 | 逻辑关系 | 物理存储(HDFS) |
|---|---|---|---|
| Database | 数据库 | 表的集合 | 文件夹 |
| Table | 表 | 行数据的集合 | 文件夹 |
| Partition | 分区 | 用于分割数据 | 文件夹 |
| Buckets | 分桶 | 用于分布数据 | 文件 |
| Row | 行 | 行记录 | 文件中的行 |
| Columns | 列 | 列记录 | 每行中指定的位置 |
| Views | 视图 | 逻辑概念,可跨越多张表 | 不存储数据 |
| Index | 索引 | 记录统计数据信息 | 文件夹 |