数据仓库Hive
一、Hive简介
数据仓库:面向主题、集成的、相对稳定的、反应历史变化的数据集合,用于支持管理决策。
传统数据仓库面临挑战:无法满足海量数据存储需求;无法有效处理不同类型数据;计算可处理能力不足。
Hive满足上述挑战,且Hive架构在底层的Hadoop核心组件基础之上。借助HDFS和MapReduce两个Hadoop核心组件。借助SQL语言的新的查询语言HiveQL。
Hive两大特性:批处理海量数据(数据仓库存储为静态,数据本身不会频繁变化。);Hive提供了一系列的ETL的工具。
其中Pig完成ETL过程。处理过程交给Hive。HBase作为实时交互式查询工具,弥补hdfs缺陷。
Hive对外访问接口
CLI:命令行工具。
HWI:Hive的web接口。
JDBC和ODBC:开放数据库接口。
Thrift Server:实现对Hive的RPC调用。
Driver:包含编译器、优化器、执行器,将HiveQL语句转化为MapReduce作业。
元数据存储模块:元数据存储模块,一般元数据存储在关系型数据库或者mysql。
HiveHA:高可靠Hive,因为Hive不够稳定。设置多个Hive实例,使用HiveProxy与外界交互。黑名单Hive实例会被重启。
二、SQL转化为MapReduce作业
Hive本身不做数据处理和存储,Hive将SQL转化为MapReduce作业。
1.SQL转换为MapReduce作业基本原理
数据库连接操作的MapReduce实现:
其中value中的1,2分别为User表,Order表的标记位。
2.Hive中将SQL转化为MapReduce作业的过程
三、Impala
1.Impala简介
- Impala允许通过sql语句交互式实时查询PB级底层数据,
- 可以存储在hdfs或HBase中,
- Impala运行依赖于Hive的元数据,设计参考Dremel系统,
- 直接通过分布式查询引擎交互查询,
- Impala和Hive都是采用相同SQL语法的ODBC驱动和用户接口。
2.Impala系统架构
其中虚线框出为Impala的组件
impala包含三个组件:
- impalad负责具体相关查询任务,包含查询计划器、查询协调器、查询执行器三个模块。与hdfs数据节点运行在同一节点上,就近处理数据。给其他impalad分配和收集其他impalad的执行的结果进行汇总。
- state store负责元数据管理和状态信息维护,创建一个state store进程,负责收集分布在集群中各个impalad进程的资源信息用于查询调度。
- CLI用户访问接口。给用户提供查询使用的命令行工具。同时提供Hue、JDBC及ODBC使用接口。
Impala特性:
- 1.impala元数据直接存储在Hive中;
- 2.采用与Hive相同的元数据、相同的SQL语法、相同的ODBC驱动程序和接口;
- 3.在一个hadoop平台上统一部署Hive和Impala等分析工具,实现在同一平台上可同时满足批处理和实时查询。
3.Impala查询执行过程
4.Impala和Hive的比较
Impala和Hive的不同点:
Impala和Hive的相同点:
- impala的目的不在于替换MapReduce工具;
- impala和hive配合使用效果最佳;
- 可以先使用hive进行数据转化处理,之后再使用impala在hive处理后的数据集上进行快速分析。
四、Hive的编程实践
Hive的安装配置过程省略。
Hive的数据类型省略
1.create创建数据库、表、视图:
2.show查看数据库、表、视图:
3.load向表中装载数据
4.向表中插入数据或者导出数据
五、Hive应用实例WordCount
1.创建待分析文件
2.HiveQL词频统计语句
其中explode为将行转化为列。Hive实现词频统计的语句比MapReduce要少很多,其中MapReduce的词频统计Java代码需要63行,Hive只需要7行即可。