赞
踩
Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hive将HQL语句转换成MR任务进行执行。
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反应历史变化(Time Variant)的数据集合,用于支持管理决策。
数据仓库体系结构通常含四个层次:数据源、数据存储和管理、数据服务、数据应用。
Hive是建立在Hadoop之上的数据仓库,由Facebook开发,在某种程度上可以看成是用户编程接口,本身并不存储和处理数据,依赖于HDFS存储数据,依赖MR处理数据。有类SQL语言HiveQL,不完全支持SQL标准,如,不支持更新操作、索引和事务,其子查询和连接操作也存在很多限制。
Hive把HQL语句转换成MR任务后,采用批处理的方式对海量数据进行处理。数据仓库存储的是静态数据,很适合采用MR进行批处理。Hive还提供了一系列对数据进行提取、转换、加载的工具,可以存储、查询和分析存储在HDFS上的数据。
对比项 | Hive | 传统数据库 |
---|---|---|
数据插入 | 支持批量导入,不可单条导入 | 支持单挑和批量导入 |
数据更新 | 不支持 | 支持 |
索引 | 有限索引功能,不像RDBMS有键的概念, 可在某些列上建索引,加速一些查询操作。 创建的索引数据,会被保存在另外的表中 | 支持 |
分区 | 支持,Hive表示分区形式进行组织的,根据 “分区列”的值对表进行粗略划分,加快数 据的查询速度 | 支持,提供分区功能来改善大型表以及具有各 种访问模式的表的可伸缩性、可管理性,以及 提高数据库效率 |
执行延迟 | 高,构建在HDFS和MR之上,比传统数据库 延迟要高 | 低,传统SQL语句的延迟一般少于1秒,而HQL 语句延迟可达分钟级。 |
扩展性 | 好,基于Hadoop集群,有很好的横向扩展性 | 有限,RDBMS非分布式,横向扩展(分布式添 加节点)难实现,纵向扩展(扩展内存,CPU 等)也很有限 |
当前企业中部署的大数据分析平台,除Hadoop的基本组件HDFS和MR外,还结合使用Hive、Pig、Hbase、Mahout,从而满足不同业务场景需求。
上图是企业中一种常见的大数据分析平台部署框架 ,在这种部署架构中:
下图显示Hive的主要组成模块、Hive如何与Hadoop交互工作、以及从外部访问Hive的几种典型方式。
喜欢图形界面的用户,可采用几种典型的外部访问工具:Karmasphere、Hue、Qubole等。
假设连接(join)的两个表分别是用户表User(uid,name)和订单表Order(uid,orderid),具体的SQL命令:
SELECT name, orderid FROM User u JOIN Order o ON u.uid=o.uid;
上图描述了连接操作转换为MapReduce操作任务的具体执行过程。
假设分数表Score(rank, level),具有rank(排名)和level(级别)两个属性,需要进行一个分组(Group By)操作,功能是把表Score的不同片段按照rank和level的组合值进行合并,并计算不同的组合值有几条记录。SQL语句命令如下:
SELECT rank,level,count(*) as value FROM score GROUP BY rank,level;
上图描述分组操作转化为MapReduce任务的具体执行过程。
当Hive接收到一条HQL语句后,需要与Hadoop交互工作来完成该操作。HQL首先进入驱动模块,由驱动模块中的编译器解析编译,并由优化器对该操作进行优化计算,然后交给执行器去执行。执行器通常启动一个或多个MR任务,有时也不启动(如SELECT * FROM tb1
,全表扫描,不存在投影和选择操作)
上图是Hive把HQL语句转化成MR任务进行执行的详细过程。
Hive驱动模块中的执行器执行最终的MR任务时,Hive本身不会生成MR算法程序。它通过一个表示“Job执行计划”的XML文件,来驱动内置的、原生的Mapper和Reducer模块。Hive通过和JobTracker通信来初始化MR任务,而不需直接部署在JobTracker所在管理节点上执行。通常在大型集群中,会有专门的网关机来部署Hive工具,这些网关机的作用主要是远程操作和管理节点上的JobTracker通信来执行任务。Hive要处理的数据文件常存储在HDFS上,HDFS由名称节点(NameNode)来管理。
JobTracker/TaskTracker
NameNode/DataNode
在实际应用中,Hive也暴露出不稳定的问题,在极少数情况下,会出现端口不响应或进程丢失问题。Hive HA(High Availablity)可以解决这类问题。
在Hive HA中,在Hadoop集群上构建的数据仓库是由多个Hive实例进行管理的,这些Hive实例被纳入到一个资源池中,由HAProxy提供统一的对外接口。客户端的查询请求,首先访问HAProxy,由HAProxy对访问请求进行转发。HAProxy收到请求后,会轮询资源池中可用的Hive实例,执行逻辑可用性测试。
由于HAProxy提供统一的对外访问接口,因此,对于程序开发人员来说,可把它看成一台超强“Hive”。
Impala由Cloudera公司开发,提供SQL语义,可查询存储在Hadoop和HBase上的PB级海量数据。Hive也提供SQL语义,但底层执行任务仍借助于MR,实时性不好,查询延迟较高。
Impala作为新一代开源大数据分析引擎,最初参照Dremel(由Google开发的交互式数据分析系统),支持实时计算,提供与Hive类似的功能,在性能上高出Hive3~30倍。Impala可能会超过Hive的使用率能成为Hadoop上最流行的实时计算平台。Impala采用与商用并行关系数据库类似的分布式查询引擎,可直接从HDFS、HBase中用SQL语句查询数据,不需把SQL语句转换成MR任务,降低延迟,可很好地满足实时查询需求。
Impala不能替换Hive,可提供一个统一的平台用于实时查询。Impala的运行依赖于Hive的元数据(Metastore)。Impala和Hive采用相同的SQL语法、ODBC驱动程序和用户接口,可统一部署Hive和Impala等分析工具,同时支持批处理和实时查询。
上图是Impala系统结构图,虚线模块数据Impala组件。Impala和Hive、HDFS、HBase统一部署在Hadoop平台上。Impala由Impalad、State Store和CLI三部分组成。
不同点:
相同点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。