Hive学习笔记(1)——Hive原理初探

文章目录

  • 前言
  • 一、hive的特点
  • 二、hive体系架构及基本原理
  • 三、Hive的存储
  • 四、总结


前言

相信大家通过学习MapReduce,已经认识到hadoop利用多台廉价机器集群进行并行计算的优势,了解了HDFS、Yarn、MapReduce的工作原理,也对hadoop生态体系有了一定的了解。

但是问题也随之出现,我们对MapReduce程序并不了解,编写起来语法也比较复杂,这无疑降低了我们的开发效率。这时,我们就要用到Hive。

因此,通俗地讲,Hive本质上就是让我们通过类SQL的语法来编写MapReduce程序。我们写好的sql,Hive会帮我们自动转为顶层的MapReduce程序,并对数据(通常存放在HDFS上)进行操作。

一、hive的特点

1)可扩展

Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。

2)延展性

Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

3)良好的容错性

Hive具有良好的容错性,节点出现问题SQL仍可完成执行。

二、hive体系架构及基本原理

Hive的体系架构以及其处在Hadoop生态体系中的位置如下所示:
Hive学习笔记(1)——Hive原理初探_第1张图片
服务器组件:

  1. Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。

  2. Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。

  3. Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。

客户端组件:

  1. CLI:command line interface,命令行接口。

  2. Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。

下面着重讲讲上述服务器组件中的metastore组件,具体如下:

Hive的metastore组件是hive元数据集中存放地。Metastore组件包括两个部分:metastore服务和后台数据的存储。后台数据存储的介质就是关系数据库,例如hive默认的嵌入式磁盘数据库derby,以及我们在实际开发中运用较多的mysql数据库。

Metastore服务是建立在后台数据存储介质之上,并且可以和hive服务进行交互的服务组件,默认情况下,metastore服务和hive服务是安装在一起的,运行在同一个进程当中。我也可以把metastore服务从hive服务里剥离出来,metastore独立安装在一个集群里,hive远程调用metastore服务,这样我们可以把元数据这一层放到防火墙之后,客户端访问hive服务,就可以连接到元数据这一层,从而提供了更好的管理性和安全保障。使用远程的metastore服务,可以让metastore服务和hive服务运行在不同的进程里,这样也保证了hive的稳定性,提升了hive服务的效率。

三、Hive的存储

由于Hive本质上是再MapReduce程序进行了封装,因此Hive中所有的数据都存储在 HDFS 中,基本单位为HDFS中的HFILE,并没有专门的数据存储格式。

Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

 db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹

table:在hdfs中表现所属db目录下一个文件夹

external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径

注:普通表与外部表(External Table)最大的区别是:普通表被删除了就完全被删除了,而外部表被删除后只是被移除了元数据,其本身存在的数据任然存储在原来的HDFS中,并没有丢失。

partition:在hdfs中表现为table目录下的子目录

bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中

四、总结

本篇文章对Hive的原理进行了简单介绍。接下来的文章中,我将介绍我在安装和使用hive中实用的知识和实用语法,也会更新我最近自己在学习Hive的过程中做的实战项目,让我们在具体实践中感受Hive带来的魅力!

你可能感兴趣的:(Hadoop,hive,hadoop,大数据,mapreduce)