3分钟了解Hadoop和Hive的关系:用大白话理解Hive和Hadoop的关系
3分钟了解Hadoop和Hive的关系:用大白话理解Hive和Hadoop的关系
Hadoop和Hive是大数据处理领域中两个非常重要的组件。虽然它们都是Apache基金会的开源项目,但很多人可能并不清楚它们之间的关系。本文将用通俗易懂的语言,帮助你快速理解Hive和Hadoop的关系。
一、Hive是什么?
接下来我们通过几个问题来了解Hive:
1. Hive是什么?
Apache Hive是一款建立在Hadoop之上的开源数据仓库系统。数据仓库(DW)是一个集中存储大量数据的系统,这些数据经过数据集成、清洗、转换并存储,以便查询和分析。
由于Hive是建立在Hadoop之上的,我们可以推断出Hive和Hadoop之间存在一定的关系。那么,它们之间具体是什么关系呢?
2. Hive和Hadoop有什么关系?
其实,Hive可以将存储在Hadoop文件中的结构化、半结构化数据文件(即HDFS的文件)转换成表,然后进行类SQL(类SQL是HQL)查询,再将类SQL转换成MapReduce程序,将程序提交到Hadoop集群中执行。
通过上面的解释,我们可以清楚地看到:Hive实际上是一个壳子,它利用HDFS存储数据,利用MapReduce查询分析数据。
那么,为什么我们不直接使用HDFS和MapReduce,而是需要使用Hive呢?
3. 为什么要使用Hive?
- 因为MapReduce是使用Java开发的,如果采用Java计算,人员的学习成本高,而且MapReduce实现查询逻辑开发难度大。
- Hive采用HQL语法,容易上手,减少开发人员学习成本;并且支持自定义函数,功能扩展很方便。
- Hive依靠Hadoop,即满足存储,又满足计算,可以处理海量的数据
总结来说,Hive的最大优点就是能够让用户编写HQL,简单、方便。
二、Hive是怎么工作的?
从上面的介绍,我们已经了解了Hive的基本概念,接下来让我们深入了解Hive的工作原理。
我们先来看一张Hive的架构图:
让我们逐个解析这张图:
① 用户接口
这里列举了三个接口:CLI(命令行接口)、Thrift、Web。这些接口都是为了让用户能够连接到Hive,简单来说,就是让用户能够写HQL来连接到Hive,让Hive进行工作。
② Hive Driver 驱动程序
这是Hive的核心部分,主要负责对用户所写的HQL进行语法解析、计划编译、优化和执行。最终会生成一个查询计划,这些查询计划存储在HDFS中,之后执行引擎会调用执行。
Hive的核心功能就是将HQL转换成MapReduce进行计算。
③ 元数据存储
很多人可能会问,什么是元数据?元数据其实很好理解,Hive写的HQL是针对表的操作,但是表里的数据是HDFS的文件,那这两个是怎么联系起来的呢?
- 其实这就是元数据的功劳,元数据存放的是Hive里的表和HDFS文件的映射关系。比如Hive中哪个表对应哪个文件,这个表的哪个字段对应HDFS的哪些数据,HDFS的数据分割符是什么。
应该大家都明白了元数据是什么,元数据存储存放的是表的名字、表的列和分区及其属性、表的属性、表的数据所在目录等。(注:通常是存储在关系数据库如mysql/derby中)
④ 执行引擎
执行引擎负责进行数据计算。这里列举了三种:MapReduce、Spark、Tez。Hive可以对接很多引擎进行计算,因为MapReduce虽然很早就使用了,但它的计算速度其实很慢,而Spark这些内存计算引擎就会比较快。
根据上面的解释,我们可以总结一下Hive的工作流程:Hive允许用户编写HQL,然后通过Hive驱动程序将HQL转换成MR(MapReduce)语言,再使用元数据进行数据映射找到HDFS文件,最后进行数据分析。
需要注意的是,Hive只需要安装到一台机器上,因为它只是做SQL的转换,执行这些任务还是在MapReduce里面,所以只需要安装在一台机器上即可。
三、元数据
在上面的介绍中,我们已经解释过元数据是什么,但元数据是一个非常重要的概念,值得我们进一步理解。
- 元数据(Metadata):又称中介数据,是描述数据的数据,主要描述数据属性的信息。
- Hive Metadata:就是Hive的元数据,包含Hive创建的database、table、表的位置、类型、属性,字段顺序等元信息。
这里需要注意的是,Hive计算的数据来自HDFS,但元数据是存储在关系型数据库中。如存储在Hive内置的Derby、或者第三方Mysql等。
有了元数据之后,肯定需要进行元数据的管理,并且也要保证元数据的安全,所以接下来我们要了解一个概念:Hive Metastore。
Hive Metastore:
元数据服务,作用是管理metadata元数据,对外暴露服务地址,让客户端通过连接metastore服务,再由metastore去连接MySQL数据库来存取元数据。
- 有了metastore服务,就可以多个客户端同时连接,而且客户端也不需要知道MySQL的用户名和密码,保证了Hive元数据的安全。
从上图可以看出,metastore和metadata的关系。
metastore有三种配置方式,可以根据所需选择自己的方式。在企业中,我们经常使用的是远程模式,使用这个模式,其他依赖Hive的软件都可以通过Metastore访问Hive,更安全更好地管理Hive元数据。
下面是远程模式的架构图,可以看出Hive有两个客户端:
- 第一代客户端(Hive old Client):$HIVE_HOME/bin/hive,是一个shellUtil。主要功能是用于交互或批处理模式运行Hive查询和Hive相关服务的启动。
- 第二代客户端(Hive new Client):$HIVE_HOME/bin/beeline,是一个JDBC客户端,官方推荐使用的Hive命令行工具,比第一代更强更安全。
注意,第二代客户端需要启动Metastore和HiveServer2两个服务才可以。
以上就是Hive和Hadoop的关系。希望这篇文章能帮助你更好地理解这两个重要组件之间的关系。如果还有什么不懂的地方,欢迎随时提问!