Hive介绍
条评论内容:Hive介绍
Hive介绍
数据仓库
数据仓库与数据库
数据库 Database (Oracle, Mysql, PostgreSQL)主要用于事务处理,数据仓库 Datawarehouse (Amazon Redshift, Hive)主要用于数据分析。
用途上的不同决定了这两种架构的特点不同。
数据库(Database)的特点是:
- 相对复杂的表格结构,存储结构相对紧致,少冗余数据。
- 读和写都有优化。
- 相对简单的read/write query,单次作用于相对的少量数据。
数据仓库(Datawarehouse)的特点是:
- 相对简单的(Denormalized)表格结构,存储结构相对松散,多冗余数据。
- 一般只是读优化。
- 相对复杂的read query,单次作用于相对大量的数据(历史数据)。
Hive产生背景
直接使用MapReduce处理大数据,将面临以下问题:
1 | MapReduce 开发难度大,学习成本高 |
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表 (类似于RDBMS中的表),并提供类SQL查询功能;Hive是由Facebook开源,用于解决海量结构化日志的数据统计。
Hive和RDBMS对比
1 | -- 查询语言相似 |
Hive的优缺点
Hive的优点
学习成本低。Hive提供了类似SQL的查询语言,开发人员能快速上手;
处理海量数据。底层执行的是MapReduce 任务;
系统可以水平扩展。底层基于Hadoop; 功能可以扩展。Hive允许用户自定义函数;
良好的容错性。某个节点发生故障,HQL仍然可以正常完成;
统一的元数据管理。元数据包括:有哪些表、表有什么字段、字段是什么类型
Hive的缺点
HQL表达能力有限;
迭代计算无法表达;
Hive的执行效率不高(基于MR的执行引擎);
Hive自动生成的MapReduce作业,某些情况下不够智能;
Hive的调优困难;
Hive架构
用户接口 CLI(Common Line Interface):
Hive的命令行,用于接收HQL,并返 回结果; JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似;
WebUI:是指可通过浏览器访问Hive;
Thrift Server
Hive可选组件,是一个软件框架服务,允许客户端使用包括Java、C++、Ruby和 其他很多种语言,通过 编程的
方式远程访问Hive;
元数据管理(MetaStore)
Hive将元数据存储在关系数据库中(如mysql、 derby)。Hive的元数据包括:数据库名、表名及类型、字段名称
及数据类型、数 据所在位置等;
驱动程序(Driver)
解析器 (SQLParser) :使用第三方工具(antlr)将HQL字符串转换成抽象语 法树(AST);对AST进行语法
分析,比如字段是否存在、SQL语义是否有 误、表是否存在;
编译器 (Compiler) :将抽象语法树编译生成逻辑执行计划;
优化器 (Optimizer) :对逻辑执行计划进行优化,减少不必要的列、使用分 区等;
执行器 (Executr) :把逻辑执行计划转换成可以运行的物理计划;
数据类型
基本数据类型
大类 | 类型 |
---|---|
Integers(整型) | TINYINT – 1字节的有符号整数 SMALLINT – 2字节的有符号整数 INT – 4字节的有符号整数 BIGINT – 8字节的有符号整数 |
Floating point numbers(浮点数) | FLOAT – 单精度浮点数 DOUBLE – 双精度浮点数 |
Fixed point numbers(定点数) | DECIMAL – 17字节,任意精度数字。通常用户自定 义decimal(12, 6) |
String(字符串) | STRING – 可指定字符集的不定长字符串 VARCHAR – 1-65535长度的不定长字符串 CHAR – 1-255定长字符串 |
Datetime(时间日期类 型) | TIMESTAMP – 时间戳(纳秒精度) DATE – 时间日期类型 |
Boolean(布尔类型) | TRUE / FALSE |
Binary types(二进制类 型) | BINARY – 字节序列 |
数据类型的隐式转换
Hive的数据类型是可以进行隐式转换的,类似于Java的类型转换。如用户在查询中将 一种浮点类型和另一种浮点类型的值做对比,Hive会将类型转换成两个浮点类型中值 较大的那个类型,即:将FLOAT类型转换成DOUBLE类型;当然如果需要的话,任意 整型会转化成DOUBLE类型。 Hive 中基本数据类型遵循以下层次结构,按照这个层 次结构,子类型到祖先类型允许隐式转换。
总的来说数据转换遵循以下规律:
1 | select '1.0'+2; |
数据类型的显示转换
使用cast函数进行强制类型转换;如果强制类型转换失败,返回NULL
1 | select cast('1111s' as int); |
集合数据类型
Hive支持集合数据类型,包括array、map、struct、union
类型 | 描述 | 字面量示例 |
---|---|---|
ARRAY | 有序的相同数据类型的集合 | array(1,2) |
MAP | key-value对。key必须是基 本数据类型,value不限 | map(‘a’, 1, ‘b’,2) |
STRUCT | 不同类型字段的集合。类似 于C语言的结构体 | struct(‘1’,1,1.0), named_struct(‘col1’, ‘1’, ‘col2’, 1, ‘clo3’, 1.0) |
UNION | 不同类型的元素存储在同一 字段的不同行中 | create_union(1, ‘a’, 63) |
和基本数据类型一样,这些类型的名称同样是保留字;
ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似;
STRUCT 与 C 语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允 许任意层次的嵌套;
1 | -- array |