赞
踩
Hive的特点:
采用批处理方式处理海量数据
Hive需要把HiveQL语句转换成MapReduce任务进行运行;
数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化。提供适合数据仓库操作的工具
Hive本身提供了一系列对数据进行提取转化加载的工具,可以存储、查询和分析存储在Hadoop中的大规模数据;
非常适合数据仓库应用程序维护海量数据、对数据进行挖掘、形成意见和报告等。
Hive在很多方面和传统的关系数据库类似,但是它的底层依赖的是HDFS和MapReduce,所以在很多方面又有别于传统数据库。
Hive与传统数据库的区别主要体现在以下几个方面:
1)数据插入:在传统数据库中同时支持导入单条数据和批量数据,而Hive中仅支持批量导入数据,因为Hive主要用来支持大规模数据集上的数据仓库应用程序的运行,常见操作是全表扫描,所以单条插入功能对Hive并不实用
2)数据更新:更新是传统数据库中很重要的特性,Hive不支持数据更新。Hive是一个数据仓库工具,而数据仓库中存放的是静态数据,所以Hive不支持对数据进行更新。
3)索引:索引也是传统数据库中很重要的特性,Hive在hive 0.7版本后已经可以支持索引了。但Hive不像传统的关系型数据库那样有键的概念,它只提供有限的索引功能,使用户可以在某些列上创建索引来加速一些查询操作,Hive中给一个表创建的索引数据被保存在另外的表中。
4)分区:传统的数据库提供分区功能来改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。Hive也支持分区功能,Hive表组织成分区的形式,根据分区列的值对表进行粗略的划分,使用分区可以加快数据的查询速度。
5)执行延迟:因为Hive构建于HDFS与MapReduce上,所以对比传统数据库来说Hive的延迟比较高,传统的SQL语句的延迟少于一秒,而HiveQL语句的延迟会达到分钟级。
6)扩展性:传统关系数据库很难横向扩展,纵向扩展的空间也很有限。相反Hive的开发环境是基于集群的,所以具有较好的可扩展性。
join转化为MapReduce任务的具体过程:
group by转化为MapReduce任务的具体过程:
第1步:用户通过命令行CLI或其他Hive访问工具,向Hive输入一段命令或查询。
第2步:由Hive驱动模块中的编译器——Antlr语言识别工具,对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树(AST Tree)的形式。
第3步:对该抽象语法树进行遍历,进一步转化成QueryBlock查询单元。QueryBlock是一条最基本的SQL语法组成单元,包括输入源、计算过程和输出三部分。
第4步:再对QueryBlock进行遍历,生成执行操作树(OperatorTree)。
第5步:通过Hive驱动模块中的逻辑优化器对OperatorTree进行优化。
第6步:对优化后的OperatorTree进行遍历,根据OperatorTree中的逻辑操作符生成需要执行的MapReduce任务。
第7步:启动Hive驱动模块中的物理优化器,对生成MapReduce任务进行优化,生成最终的MapReduce任务执行计划。
第8步:最后,由Hive驱动模块中的执行器,对最终的MapReduce任务进行执行。
注:
- 当启动MapReduce程序时,Hive本身是不会生成MapReduce算法程序的。
- Hive通过和JobTracker通信来初始化MapReduce任务,不必直接部署在JobTracker所在的管理节点上执行。
除了用CLI和HWI工具来访问Hive外,还可以采用以下几种典型外部访问工具:
1.Karmasphere是由Karmasphere公司发布的一个商业产品。
可以直接访问Hadoop里面结构化和非结构化的数据,可以运用SQL及其他语言,可以用于Ad Hoc查询和进一步的分析;
还为开发人员提供了一种图形化环境,可以在里面开发自定义算法,为应用程序和可重复的生产流程创建实用的数据集。
2.Hue是由Cloudera公司提供的一个开源项目
是运营和开发Hadoop应用的图形化用户界面;
Hue程序被整合到一个类似桌面的环境,以web程序的形式发布,对于单独的用户来说不需要额外的安装。
3.Qubole公司提供了**“Hive即服务”**的方式
托管在AWS平台,这样用户在分析存储在亚马逊S3云中的数据集时,就无需了解Hadoop系统管理;
提供的Hadoop服务能够根据用户的工作负载动态调整服务器资源配置,实现随需计算。
构建于Hadoop上的数据仓库,除了依赖于Hadoop的基本组件HDFS和MapReduce外,还结合使用了Hive、Pig、HBase与Mahout。
Impala是由Cloudera公司开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase上的PB级大数据。
Impala最开始是参照 Dremel系统进行设计的,Impala的目的不在于替换现有的MapReduce工具,而是提供一个统一的平台用于实时查询。
与Hive类似,Impala也可以直接与HDFS和HBase进行交互。
Hive底层执行使用的是MapReduce,所以主要用于处理长时间运行的批处理任务,例如批量提取、转化、加载类型的任务。
Impala通过与商用并行关系数据库中类似的分布式查询引擎,可以直接从HDFS或者HBase中用SQL语句查询数据,从而大大降低了延迟,主要用于实时查询。
Impala和Hive采用相同的SQL语法、ODBC 驱动程序和用户接口。
Impala主要由Impalad,State Store和CLI三部分组成。
1)Impalad是Impala的一个进程
负责协调客户端提交的查询的执行,给其他impalad分配任务以及收集其他impalad的执行结果进行汇总
执行其他impalad给其分配的任务,主要就是对本地HDFS和HBase里的部分数据进行操作
2)State Store会创建一个statestored进程
跟踪集群中的Impalad的健康状态及位置信息,用于查询的调度
创建多个线程来处理Impalad的注册订阅和与各类Impalad保持心跳连接
注:当State Store离线后,Impalad一旦发现State Store处于离线时,就会进入recovery模式,并进行反复注册;当State Store重新加入集群后,自动恢复正常,更新缓存数据。
3)CLI给用户提供查询使用的命令行工具
提供了Hue、JDBC及ODBC的使用接口
Impala采用与Hive相同的元数据、SQL语法、ODBC驱动程序和用户接口,这样做的主要原因是在使用同一公司Hadoop产品时,批处理和实时查询的平台是统一的
Hive和Impala的不同点总结如下:
Hive与Impala的相同点总结如下:
1.Hive安装
安装Hive之前需要安装jdk1.6以上版本以及启动Hadoop。
2.Hive配置
Hive有三种运行模式,单机模式、伪分布式模式、分布式模式。
1.Hive的基本数据类型
2.Hive的集合数据类型
1.create:创建数据库、表、视图
2.drop:删除数据库、表、视图
3.alter:修改数据库、表、视图
4. show:查看数据库、表、视图
5. describe:描述数据库、表、视图
6. load:向表中装载数据
7. insert:向表中插入数据或从表中导出数据
在MapReduce的实现中,需要进行编译生成jar文件来执行算法,而在Hive中不需要。
HiveSQL语句的最终实现需要转化成MapReduce任务来执行,这都是由Hive框架自动完成的,用户不需要了解具体实现细节。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。