hive
hive的架构 ,三种重要的角色。
hiveserver
编译hql,解析成对应的yarn任务,spark,hdfs任务 。
MeatStore
提供元数据服务
WebHcat
对外提供http协议的元数据的访问,ddl的查询的服务 。
加入了众多企业级定制化特性,如Colocation建表,列加密,语法增强等特性。整个产品在高可靠,高容错,可扩展性以及性能等各方面较社区有巨大提升。
hive作用
Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。
特性
灵活方便的ETL(extract/transform/load)。
支持MapReduce,Tez,Spark等多种计算引擎。
可直接访问HDFS文件以及HBase。
易用易编程。
应用场景
数据挖掘
非实时分析
数据仓库
数据汇总
特点
Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。
Hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。因此,Hive 并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。
Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。
Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析
Hive 是一种数据仓库处理工具,使用类SQL的HiveQL语言实现数据查询功能,所有Hive的数据都存储在HDFS中。
设计特点
Hive 是一种底层封装了Hadoop 的数据仓库处理工具,使用类SQL 的HiveQL 语言实现数据查询,所有Hive 的数据都存储在Hadoop 兼容的HDFS中。
支持索引,加快数据查询。
不同的存储类型,例如,纯文本文件、HBase 中的文件。
将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。
可以直接使用存储在Hadoop 文件系统中的数据。
类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
缺点
延迟较高
- 1.默认MR为执行引擎。
- 2.MR延迟较高。
不支持物化视图
- 1.Hive支持普通视图,不支持物化视图。
- 2.Hive不能在视图上更新、插入、删除数据。
不适用OLTP
- 1.暂不支持列级别的数据添加、更新、删除操作。
暂不支持存储过程
- 1.当前版本不支持存储过程,只能通过UDF来实现一些逻辑处理
优点
高可靠
- 1.HiveServer采用集群模式
- 2.双MetaStore
- 3.超时重试机制
可扩展
- 1.自定义存储格式
- 2.自定义函数
多接口
- 1.Beeline
- 2.JDBC
- 3.Thrift
- 4.Python
- 5.ODBC
类sql
- 1.类似SQL语法
- 2.内置大量函数
Hive内置函数:
数学函数,如round(),floor(),abs(),rand()等。
日期函数,如to_date(),month(),day()等。
字符串函数,如trim(),length(),substr()等。
UDF ( User- Defined Funcation)。
Hive增强特性 - Colocation简介
Colocation (同分布):将存在关联关系的数据或可能要进行关联操作的数据存储在相同的存储节点上。
文件级同分布实现文件的快速访问,避免了因数据搬迁带来的大量网络开销。
Hive数据存储模型 - 分区和桶
分区:数据表可以按照某个字段的值划分分区。
每个分区是一个目录。
分区数量不固定。
分区下可再有分区或者桶。
桶:数据可以根据桶的方式将不同数据放入不同的桶中。
每个桶是一个文件。
建表时指定桶个数,桶内可排序。
数据按照某个字段的值Hash后放入某个桶中
Hive数据存储模型 - 托管表和外部表
Hive可以创建托管表和外部表:
默认创建托管表,Hive会将数据移动到数据仓库目录。
创建外部表,这时Hive会到仓库目录以外的位置访问数据。
如果所有处理都由Hive完成,建议使用托管表。
如果要用Hive和其它工具来处理同一个数据集,建议使用外部表
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
Hive增强特性 – 指定行分割符
Hive增强特性 – 流控特性
Hive增强特性 – HBase记录批量删除
Hive增强特性 – 列加密
导入数据到Hive表时,不会检查数据合法性,只会在读取数据时候检查。
需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema。 读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。 写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。
MetaStore : 存储表、列和Partition等元数据。
Driver : 管理HiveQL执行的生命周期,并贯穿Hive任务整个执行期间。
Compiler : 编译HiveQL并将其转化为一系列相互依赖的Map/Reduce任务。
Optimizer: 优化器,分为逻辑优化器和物理优化器,分别对HiveQL生成的执行计划和MapReduce任务进行优化。
Executor : 按照任务的依赖关系分别执行Map/Reduce任务。
ThriftServer : 提供thrift接口,作为JDBC
++++++
C和ODBC的服务端,并将Hive和其他应用程序集成起来。
Clients : 包含命令行接口(CLI/Beeline) 和JDBC/ODBC 接口,为用户访问提供接口。
XMind: ZEN - Trial Version