绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Hive介绍和原理分析
2020-07-01 17:00:26

什么是Hive?

Hive是一个基于Hadoop的开源 数据仓库工具,用于存储(HDFS)处理(MapReduce)海量 结构化数据。使用mapreduce计算,HDFS储存。

为什么要用它?

利用其灵活的SQL语法可以帮我我们进行复杂统计分析之类的活,不需要传统的数据人员了解mapreduce分布式计算的编写,通过传统的sql解决大数据的计算问题,降低难度。

与关系型数据库有什么区别?

1.使用的文件系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统;

2.hive使用mapreduce做运算,比传统数据库相比运算数据规模要大得多;

3.关系数据库都是为实时查询的业务进行设计的,而hive则是为海量数据做数据挖掘设计的,实时性很差;实时性差导致hive的应用场景和关系数据库有很大的区别;

4.Hive很容易扩展自己的存储能力和计算能力,这个是继承hadoop的,而关系数据库在这个方面要比Hive差很多。

hive与传统数据库比较图

hive的 优缺点

优点:

1)Hive 使用类SQL 查询语法, 大限度的实现了和SQL标准的兼容,大大降低了传统数据分析人员处理大数据的难度

2)使用JDBC 接口/ODBC接口,开发人员更易开发应用;

3)以MR 作为计算引擎、HDFS 作为存储系统,为超大数据集设计的计算/ 扩展能力;

4)统一的元数据管理(Derby、MySql等)表存在哪 数据库在哪 和SQL相关的对象都保存在哪 保存在哪 谁创建的 啥时候修改,并可与Pig 、spark等共享;

弱点:

1)Hive 的 HQL 表达的能力有限,比如不支持UPDATE、非等值连接、DELETE、INSERT单条等;

2)由于Hive自动生成MapReduce 作业, HQL 调优困难;

3)粒度较粗,可控性差,是因为数据是读的时候进行类型的转换,mysql关系型数据是在写入的时候就检查了数据的类型。

4)hive生成MapReduce(shuffle失误)作业,高延迟,不适合实时查询。hive 害怕的就是数据倾斜问题 --> OOM

hive的组成

hive组件有服务端和客户端:

服务端组件:

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

Metastore组件:元数据服务组件,这个组件存取Hive的元数据,Hive的元数据存储在关系数据库里,Hive支持的关系数据库有Derby和Mysql。

作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

元数据:hive表所对应的字段、属性还有表所对应存储的HDFS目录。

客户端组件:

CLI:Command Line Interface,命令行接口。

JDBC/ODBC:Hive架构的JDBC和ODBC接口是建立在Thrift客户端之上。

WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的HWI组件(Hive Web Interface),使用前要启动HWI服务。

Thrift [θrɪft] 服务:Thrift是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口。

hive的执行流程

1)Execute Query:hive界面如命令行或Web UI将查询发送到Driver(任何数据库驱动程序如JDBC、ODBC,等等)来执行。

2)Get Plan:Driver根据查询编译器解析query语句,验证query语句的语法,查询计划或者查询条件。

3)Get Metadata:编译器将元数据请求发送给Metastore(数据库)。

4)Send Metadata:Metastore将元数据作为响应发送给编译器。

5)Send Plan:编译器检查要求和重新发送Driver的计划。到这里,查询的解析和编译完成。

6)Execute Plan:Driver将执行计划发送到执行引擎。

6.1)Execute Job:hadoop内部执行的是mapreduce工作过程,任务执行引擎发送一个任务到资源管理节点(resourcemanager),资源管理器分配该任务到任务节点,由任务节点上开始执行mapreduce任务。

6.2)Metadata Ops:在执行引擎发送任务的同时,对hive的元数据进行相应操作。

7)Fetch Result: 执行引擎接收数据节点(data node)的结果。

8)Send Results: 执行引擎发送这些合成值到Driver。

9)Send Results:Driver将结果发送到hive接口。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Hive专区
创建时间:2020-07-01 14:09:32
Hive是一个基于Hadoop的数据仓库平台。通过hive,我们可以方便地进行ETL的工作。hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。 Hive是Facebook 2008年8月刚开源的一个数据仓库框架,其系统目标与 Pig 有相似之处,但它有一些Pig目前还不支持的机制,比如:更丰富的类型系统、更类似SQL的查询语言、Table/Partition元数据的持久化等。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • markriver
    专家
戳我,来吐槽~