欢迎投稿

今日深度:

hive:框架理解,

hive:框架理解,


1. 什么是hive  •Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 •本质是将HQL转换为MapReduce程序  2. 为什么使用hive    •操作接口采用类SQL语法,提供快速开发的能力 •避免了去写MapReduce,减少开发人员的学习成本 •扩展功能很方便   3. hive 特点   •可扩展 Hive可以自由的扩展集群的规模,一般情况下不需要重启服务 •延展性 Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数 •容错 良好的容错性,节点出现问题SQL仍可完成执行   4. hive 与hadoop 关系   发出HQL —> hive 转换成mapreduce —> mapreduce —> 对hdfs进行操作     5. hive 与传统数据对比  

 

Hive RDBMS
查询语言 HQL SQL
数据存储 HDFS Raw Device or Local FS
执行 MapReduce Excutor
执行延迟
处理数据规模
索引 0.8版本后加入位图索引 有复杂的索引
6. hive 的未来   •增加更多类似传统数据库的功能,如存储过程 •提高转换成的MapReduce性能 •拥有真正的数据仓库的能力 •UI部分加强    

 

  Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL。有了Hive,如果使用过SQL语言,并且不理解Hadoop MapReduce运行原理,也就无法通过编程来实现MR,但是你仍然可以很容易地编写出特定查询分析的HQL语句,通过使用类似SQL的语法,将HQL查询语句提交Hive系统执行查询分析,最终Hive会帮你转换成底层Hadoop能够理解的MR Job。
  对于最基本的HQL查询我们不再累述,这里主要说明Hive中进行统计分析时使用到的JOIN操作。在说明Hive JOIN之前,我们先简单说明一下,Hadoop执行MR Job的基本过程(运行机制),能更好的帮助我们理解HQL转换到底层的MR Job后是如何执行的。我们重点说明MapReduce执行过程中,从Map端到Reduce端这个过程(Shuffle)的执行情况,如图所示(来自《Hadoop: The Definitive Guide》)

  

 

基本执行过程,描述如下:

  通过上面的描述我们看到,在MR执行过程中,存在Shuffle过程的MR需要在网络中的节点之间(Mapper节点和Reducer节点)拷贝数据,如果传输的数据量很大会造成一定的网络开销。而且,Map端和Reduce端都会通过一个特定的buffer来在内存中临时缓存数据,如果无法根据实际应用场景中数据的规模来使用Hive,尤其是执行表的JOIN操作,有可能很浪费资源,降低了系统处理任务的效率,还可能因为内存不足造成OOME问题,导致计算任务失败。
下面,我们说明Hive中的JOIN操作,针对不同的JOIN方式,应该如何来实现和优化:

生成一个MR Job

  多表连接,如果多个表中每个表都使用同一个列进行连接(出现在JOIN子句中),则只会生成一个MR Job,例如:

1 SELECT a.val, b.val, c.val FROM JOIN ON (a.key = b.key1) JOIN ON (c.key = b.key1)

三个表a、b、c都分别使用了同一个字段进行连接,亦即同一个字段同时出现在两个JOIN子句中,从而只生成一个MR Job。

生成多个MR Job

多表连接,如果多表中,其中存在一个表使用了至少2个字段进行连接(同一个表的至少2个列出现在JOIN子句中),则会至少生成2个MR Job,例如:

1 SELECT a.val, b.val, c.val FROM JOIN ON (a.key = b.key1) JOIN ON (c.key = b.key2)

三个表基于2个字段进行连接,这两个字段b.key1和b.key2同时出现在b表中。连接的过程是这样的:首先a和b表基于a.key和b.key1进行连接,对应着第一个MR Job;表a和b连接的结果,再和c进行连接,对应着第二个MR Job。

www.htsjk.Com true http://www.htsjk.com/hive/41543.html NewsArticle hive:框架理解, 1. 什么是hive •Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。•本质是将HQL转换为MapReduce程序 2. 为什么...
相关文章
    暂无相关文章
评论暂时关闭