大家好,我是摇光~
最近在学习Hadoop的时候,学习了Hadoop、HDFS、MapReduce是什么,也懂得了Hadoop大概能为我们做什么,还有小伙伴不懂Hadoop的可以看这篇文章:
大白话理解Hadoop是什么?
众所周知,Hadoop是使用 Java 开发的,但是我们在工作的时候,经常不会直接写java程序去进行数据存储和数据计算,通常是使用Hive、HBase等软件;那Hive、HBase和Hadoop是什么关系呢,接下来我们来讲下为什么~
一、Hive是什么?
接下来我们也是用几个问题来了解到 Hive
1、Hive是什么?
Apache Hive 是一款建立在 Hadoop 之上的
开源数据仓库
系统。
- 数据仓库(DW):是一个集中存储大量数据的系统,这些数据经过数据集成、清洗、转换并存储,以便查询和分析。
上面解释了Hive是建立在Hadoop之上的,我们就知道Hadoop和Hive肯定是有一定关系的。那他们有什么关系呢?
2、Hive和Hadoop有什么关系?
其实Hive可以将存储在 Hadoop 文件中的结构化、半结构化数据文件(其实就是 HDFS 的文件)转成表,然后进行类SQL(类SQL是 HQL)查询,再将类SQL转成MapReduce程序,将程序提交到 Hadoop集群中执行。
通过上面的解释,是不是就很清楚了,其实Hive就是一个壳子罢了,Hive利用HDFS存储数据,利用MapReduce查询分析数据。
那我们肯定就会问,为什么不直接使用 HDFS和MapReduce,还需要去使用Hive?
3、为什么要使用Hive?
- 1、因为MapReduce是使用Java开发,如果采用 Java 计算,人员的学习成本高,而且MapReduce实现查询逻辑开发难度大。
- 2、Hive采用HQL语法,容易上手,减少开发人员学习成本;并且支持自定义函数,功能扩展很方便。
- 3、Hive依靠Hadoop,即满足存储,又满足计算,可以处理海量的数据
其实总结下来,Hive的最大优点就是能够让用户编写 HQL,简单、方便。
二、Hive是怎么工作的?
从刚刚的几个问题,我们应该都了解到 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文件,再数据进行数据分析。
三、元数据
在上面其实我们已经解释过 元数据 是什么,但是元数据是很重要的一部分,我们再来理解一下元数据。
- 元数据(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的关系,如果大家还有什么不懂的,可以评论告诉我哦~
最近我都会写一些关于大数据相关的文章,都是一些简单易理解的大白话文,希望大家喜欢~