文章目录
一:Hive的基本架构原理:

1.用户接口:Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
2.元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
3.Hadoop
使用HDFS进行存储,使用MapReduce进行计算。
4.驱动器:Driver
(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
二:Hive的作用和优势:
-
基于Hadoop的数据仓库解决方案
- Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为数据库表。
- 提供类sql的查询语言HQL(Hive Query Language)
- 数据不放在hive上,放在HDFS上
- 由Facebook开源用于解决海量结构化日志的数据统计。
- 执行程序运行在Yarn上
-
优势:
- 提供了简单的优化模型
- HQL类sql语法,简化MR开发
- 支持在HDFS和HBase上临时查询数据
- 支持用户自定义函数,格式
- 成熟JDBC和ODBC驱动程序,用于ETL和BI
- 稳定可靠的批处理
- 支持在不同计算框架运行
-
缺点:
-
Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合
-
迭代式算法无法表达
-
数据挖掘方面不擅长
-
Hive自动生成的MapReduce作业,通常情况下不够智能化
-
Hive调优比较困难,粒度较粗
-
三:Hive的数据类型:
| 类型 | 示例 | 类型 | 示例 |
|---|---|---|---|
| TINYINT | 10Y | SMALLINT | 10S |
| INT | 10 | BIGINT | 100L |
| FLOAT | 1.342 | BINARY | 1010 |
| DECIMAL | 3.14 | STRING | ’Book’ or "Book" |
| BOOLEAN | TRUE | VARCHAR | ’Book’ or "Book" |
| CHAR | ’YES’or"YES" | TIMESTAMP | ’2013-01-31 00:13:00:345’ |
| DATE | ’2013-01-31’ | DOUBLE | 1.234 |
| ARRAY | [‘Apple’,‘Orange’] | ARRAY | a[0] = 'Apple’ |
| MAP | {‘A’:‘Apple’,‘0’:‘Orange’} | MAP<STRING, STIRNG> | b[‘A’] = 'Apple’ |
| STRUCT | {‘Apple’,2} | STRUCTfruit: | c.weight = 2 |
四:Hive元数据结构:
元数据管理:
**元数据包括:**表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等
- 记录数据仓库中的模型定义
- 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
| 数据结构 | 描述 | 逻辑关系 | 物理存储 |
|---|---|---|---|
| Database | 数据库 | 表的集合 | 文件夹 |
| Table | 表 | 行数据的集合 | 文件夹 |
| Partition | 分区 | 用于分割数据 | 文件夹 |
| Buckets | 分桶 | 用于分布数据 | 文件 |
| Row | 行 | 行记录 | 文件中的行 |
| Columns | 列 | 列记录 | 每行指定的位置 |
| Views | 视图 | 逻辑概念,可跨越多张表 | 不存储数据 |
| Index | 索引 | 记录统计数据信息 | 文件夹 |
五:Hive的数据库表分类:
内部表:
HDFS中为所属数据库目录下的子文件夹
数据完全由Hive管理,删除表(元数据)会删除数据,虽然存储路径在HDFS上,但由Hive自己管理。
外部表:
数据保存在指定位置的HDFS路径中
Hive不完全管理数据,删除表(元数据)不会删除数据
注意:
PS:
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),
外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里)
六:Hive基本命令:
命令语句hql结构几乎和mysql一致
-
创建数据库:
create database mydemo; -
创建内部表:
create table userinfos( userid int, username string ); -
创建外部表:
create external table customs( cust_id string, cust_name string, age int ) row format delimited fields terminated by ',' location '/data'; -
插入表数据:
insert into userinfos values('1','zs'); -
查询表数据:
select count(*) from userinfos; -
修改表元数据:
ALTER TABLE employee RENAME TO new_employee; ALTER TABLE c_employee SET TBLPROPERTIES ('comment'='New name, comments'); ALTER TABLE employee_internal SET

最低0.47元/天 解锁文章
1996

被折叠的 条评论
为什么被折叠?



