数据仓库学习之Hive和Impala

数据仓库的概念:一个面向主题的、集成的、相对稳定的、可反映历史变化的数据集合,用于支持管理决策。

Hive可以理解为是一种用户编程接口,它本身并不直接存储数据也不处理数据,而是通过接口的封装和调用,通过Hadoop的组件进行相关操作的。通过Hive可以很方便的将构建在关系数据库上的数据仓库称赞到Hadoop上,并且通过HiveSQL运行MapReduce进行分布式查询计算。

Hive的特点适合于建立数据仓库:

1.采用批处理方式处理海量数据;

2.提供适合数据仓库操作的工具(ETL操作等);

在建设数据仓库时,可以使用pig进行ETL操作,将数据加载到数据仓库中,而使用Hive进行海量的数据批处理和分析工作。

Hive在进行数据插入时,只支持批量导入,不支持数据更新,支持索引和分区,执行延迟比较高(一般是分钟级的呼应),扩展性好。

Hive在架构层面分为三个模块:

用户接口模块:包括CLI、HWI(Web接口)、JDBC、ODBC、Thift Server(RPC调用)。通过用户接口由用户对Hive进行访问;

驱动模块:编译器、优化器、执行器等,负责把HiveSQL转换成MapReduce作业;

元数据存储模块:独立的关系数据库,存储元数据(Derby或MySQL)。

Hive将SQL转换为MR作业的过程:

1. Parser-由Hive驱动模块的编译器将SQL语句进行词法和语法解析,转换为语法树;

2. Semantic Analyzer-把语法树转化为查询块;

3. Logical Plan Generator-把查询块转换为逻辑查询计划,包含逻辑操作符;

4. Logical Optimizer-重写逻辑查询计划,并优化,合并多余操作,减少MR任务;

5. Physical Plan Generator-将逻辑操作符转换为具体的MR任务;

6. Physical Optimizer-对MR任务进行优化,生成MR任务执行计划;

7. Execute由Hive驱动模块中的执行器输出“Job执行计划”XML文件,调用Hadoop的MR执行具体操作。

Hive只要能够和JobTracker进行通信,即可初始化MR任务,而不需要和JobTracker部署在同一台服务器上,所以一般大型系统会独立部署Hive服务器。

Hive HA,解决进程丢失或接口无响应等Hive的不稳定问题。

原理是通过HAPorxy去管理一个由多个Hive实例形成的资源池,再由多个Hive实例组成的相对稳定的Hive集群去执行相应的操作。因此外部人员是与HA Proxy进行交互的。HA Proxy与Hive实例进行逻辑可用性测试,通过后使用此Hive执行,不可用则进入黑名单,后续对黑名单中的Hive进行处理(如重启),处理后再进行可用性测试,通过后,排除出黑名单。

Impala

Cloudera开发的实时交互查询分析工具,功能与Hive类似,但延时性低,性能高出Hive3到30倍,可查询HDFS和HBase上PB级的数据。

运行过程需要依赖Hive的元数据(说明Impala是非独立运行的);

Impala在查询过程中,并未进行MR转换,而是采用与商用并行关系数据库类似的分布式查询引擎,直接与HDFS和HBase进行交互查询,大大提高了查询性能,以做到实时交互查询;

Impala和Hive的SQL语法、ODBC鸡翅和用户接口相同。

 

Impala的运行和应用,是依赖与Hive、HDFS或HBase,需要在同一集群上部署。Impala有三具主要组件:Impalad、State Store和CLI

Impalad运行在各节点上的进程,负责协调执行客户端提交的查询,包含Query Planner、Query Coordinator和Query Exec Engine三个模块。与DN运行在同一节点上(可对就近的数据进行查询操作),Impalad之间会相互分配任务,所以Impalad也会分配任务以及收回执行结果并汇总;

State Store,会创建一个State Stored进程,负责收集分布在集群中各Impalad进程的资源信息和查询进度监控等。

 

Impala的执行过程:

1.提交查询前,Impala先创建Impalad进程,并由该进程向State Store提交注册订阅信息,State Store创建statestored进程,statestored创建多线程以处理Impalad的注册订阅信息;

2.用户通过CLI提交查询给impalad的Query Planner对SQL进行解析,生成解析树,Planner将解析树分解为PlanFragment,发送给Coordinator, 由Coordinator进行协调。

3. Coordinator通过元数据库中获取元数据,从HDFS的NN节点获取数据地址;

4. Coordinator初始化相应impalad上的执行任务,即把查询任务分配到有查询数据的DN节点上;

5.Executor通过洗衣工交换中间输出,由Coordinator汇总结果;

6. Coordinator把汇总结果输出给CLI客户端。

Impala在查询时,如果内存放不下查询数据时,也不会像Hive一样使用外存,所以Impala在处理查询时会受到一定内存的限制。

Hive与Impala配合使用效果最好,可以使用Hive进行数据转换处理,而使用Impala进行快速的数据查询和分析。

猜你喜欢

转载自blog.csdn.net/junweishiwo/article/details/82853184