hive是建立在什么之上的数据仓库。

hive是建立在Hadoop架构之上的数据仓库。hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。

hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。

hive的体系架构及部署架构

1、hive的体系架构

1.png-600

1)、我们看上图,首先左边是command-line shell的一个命令行,右边有个thrift/jdbc,这是什么意思呢?就是说我们可以通过什么方式来访问hive,可以理解成command-line shell和thrift/jdbc是两个客户端来操作数据,你可以通过hive脚本的方式来操作,也可以通过服务器,通过thrift协议按照编译jdbc的方式就能够完成对hive里面的数据进行相应的操作。

2)、不管是通过哪一个客户端,肯定要写sql语句,sql语句拿到以后通过Driver,首先会解析你的sql,因为刚开始的时候sql仅仅是一段很普通的字符串,如果想把这段sql转换成物理性的执行计划,那其中是有很多的过程的,所以第一步就是解析sql,首先把语句解析成抽象语法树之后才能转换成逻辑性执行计划,所以上图中有一个SQL Parser目的就是把我们的sql语句翻译成抽象语法树,到这一步之后会生成逻辑性执行计划,然后再使用一个查询优化的工具Query Optimizer对我们逻辑性执行计划进行优化,最终再生成物理性执行计划,在物理性执行计划中还包括序列化和反序列化(SerDes),我们自己开发的UDF函数等等,把最终的物理执行计划生成执行引擎(Execution)提交到mapreduce上去执行。

3)、那么对于mapreduce的执行肯定有输入和输出,那么这个输入输出可以是hadoop文件系统上的(Hadoop Storage)比如hdfs,hbase包括本地的文件也都是可以的。

总结:

从上到下的这个过程,从客户端传递sql至driver来解析sql语句到最后生成物理执行计划交给mapreduce执行这些都是由hive内核完成的,我们输入仅仅只有一条sql语句,那么输出就是相应的作业的输出了,那么左边还剩下两个框Metastore和RDBMS(MySQL)是什么意思呢,我们说了在hive里面有一个统一的元数据管理,也就是叫Metastore,那么这个Metastore的数据我们是可以存放在关系型数据库中的,比如mysql中,当然默认是存放在本机的db文件中,不过这个用的是极少的,建议使用的时候部署在mysql就可以了。我们刚刚说的表,列,列的类型,分隔符等等这些全部是存放在mysql数据库里面一整套元数据的表里面的,这个表个数是有很多很多的。以上就是hive整个的一个体系架构。

2、hive的部署架构

1)、测试环境

2.png-600

首先从测试环境来看,把hive当成一个引擎,这个hive的底层的元数据可以存放在mysql里面也可以存放在Derby里面,但是derby数据库是单会话的,一次只能有一个连接,所以不建议用derby,直接使用mysql,把所有的元数据管理都放倒mysql里面去。

那么客户端使用的时候,不管你是通过shell还是jdbc的方式,你连到hive就能进行相应的操作了,这是我们测试环境。那么在生产环境如何部署?这还是有一点差别的!

2)部署环境

3.png-600

上图右边是hadoop的一个集群,因为hive是构建在hadoop上的一个数据仓库,他使用hdfs进行数据的存储,使用mapreduce进行作业的计算,所以hive是跑在hadoop之上的,在这个hadoop集群之上我们有ResourceManager和NameNode还有DataNode以及NodeManager,

那么你的作业提交上来其实就生成了一个mapreduce作业,他先到ResourceManager上申请资源,然后才能进行运行,我们看图的左边,客户端client还是一样要么是shell要么是你的jdbc,你把你的sql提交给hive就行了。

那么在生产环境我们的元数据是存放在MySQL上面的,那么除了一台机器还不够,还要一台备用机器standby来防止主机出故障,并且备用机要和主机定时进行同步更新!

那么这里面hadoop上面ResourceManager和NameNode都有备用包括DN和NM这些节点都会配很多个,那么hive配几个?其实hive只要在集群上找一台机器配置一个就可以了,为什么呢?因为hive只是一个客户端,你只要把sql提交给hive,然后hive最终是把作业提交到yarn上去执行的,所以你任意找一个机器作为客户端或者找两个机器作为客户端提交sql就可以了!

你不需要所有的节点上都部署hive,这是完全没有必要的!

以上所有就是hive的部署架构,从测试环境到生产环境,生产环境要注意mysql是主机加备用机的。

更多web开发知识,请查阅 HTML中文网 !!

以上就是hive是建立在什么之上的数据仓库。的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他答疑