一文了解Hive是什么

 更新时间:2022年05月19日 11:37:21   作者:Philosophy7  
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能,对Hive是什么及优缺点感兴趣的朋友跟随小编一起看看吧

一、Hive介绍

hive: 由 Facebook 开源用于解决海量结构化日志的数据统计工具。

Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能。

Hive的优缺点

优点:

  • 类似于SQL语句,简单学习易上手
  • 避免了去写 MapReduce,减少开发人员的学习成本
  • Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合
  • Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高
  • Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数

缺点:

  • Hive 的 HQL 表达能力有限
  • Hive 的效率比较低
  • Hive本质是一个MR

Hive架构

Hive用户接口

  • Hive CLI(Hive Command Line) Hive的命令行
  • HWI(Hive Web Interface) HiveWeb接口
  • Hive提供了Thrift服务,也就是Hiveserver。

Hive元数据的三种存储模式

  • 单用户模式 : Hive安装时,默认使用的是Derby数据库存储元数据,这样不能并发调用Hive。
  • 多用户模式 : MySQL服务器存储元数据
  • 远程服务器模式 : 启动MetaStoreServer

Hive数据存储

Hive数据可区分为表数据元数据,表数据我们都知道是表中的数据,而元数据是用来存储表的名字表分区以及属性

Hive是基于Hadoop分布式文件存储的,它的数据存储在HDFS中。现在我们介绍Hive中常见的数据导入方式

  • 本地文件系统中导入数据到Hive
  • 从HDFS上导入数据到Hive表
  • 从其他表中查询出相应的数据并导入Hive表中
  • 在创建表的时候通过从其他表中查询出相应的记录并插入到所创建的表中
#1.演示从本地装载数据到hive
#1.1创建表
create table student(id string, name string) 
row format delimited fields terminated by '\t';
#1.2加载本地的文件到hive
 load data local inpath 
'/root/student.txt' into table default.student; #default.test 数据库.表名 也可直接表名
#2.演示加载HDFS文件到hive中
#2.1 将文件上传到HDFS根目录
dfs -put /root/student.txt /;
#2.2加载HDFS上的数据
load data inpath '/student.txt' into table test.student;
#3.加载数据覆盖表中原有的数据
#3.1上传文件到HDFS中
dfs -put /root/student.txt /;  #将文件装载到表下 文件就相当于Windows中的剪切操作
#3.2加载数据覆盖表中原有数据
load data inpath '/student.txt' overwrite into table test.student;
#4.查询表
select * from student;
#通过查询语句向表中插入数据(insert)
#1.1创建表
create table student_par(id int,name String)
row format delimited fields terminated by '\t';
#1.2通过insert插入数据
insert into table student_par values(1,'zhangsan'),(2,'lisi');

架构原理

用户接口

CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问 hive)

元数据

元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等

Hadoop

使用 HDFS 进行存储,使用 MapReduce 进行计算。

驱动器:Driver

(1)解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是 MR/Spark。

在这里插入图片描述

Hive文件格式

  • TextFile

这是默认的文件格式。数据不会压缩处理,磁盘开销大,数据解析开销也大。
SequenceFile
这是HadooAPI提供的一种二进制文件支持,以二进制的形式序列化到文件中。

  • RCFile

这种格式是行列存储结构的存储方式。

  • ORC

Optimized Row Columnar ORC文件格式是一种Hadoop生态圈中的列式存储格式。

ORC的优势:

  • 列示存储,有多种文件压缩方式
  • 文件是可分割的。
  • 提供了多种索引
  • 可以支持复杂的数据结构 比如Map

ORC文件格式是以二进制方式存储的,所以是不可直接读取的。

Hive本质

将HQL转换成MapReduce程序。

  • Hive处理的数据存储在HDFS上
  • Hive分析数据底层的实现是MapReduce
  • 执行程序运行在Yarn上

Hive工作原理

简单来说Hive就是一个查询引擎。当Hive接受到一条SQL语句会执行如下操作:

  • 词法分析和语法分析。使用antlr将SQL语句解析成抽象语法树
  • 语义分析。从MetaStore中获取元数据信息,解释SQL语句中的表名、列名、数据类型
  • 逻辑计划生成。生成逻辑计划得到算子树
  • 逻辑计划优化。对算子树进行优化
  • 物理计划生成。将逻辑计划生成出的MapReduce任务组成的DAG的物理计划
  • 物理计划执行。将DAG发送到Hadoop集群进行执行
  • 将查询结果返回。

Hive展现的MapReduce任务设计到组件有:

  • 元存储 : 该组件存储了Hive中表的信息,其中包括了表、表的分区、模式、列及其类型、表映射关系等
  • 驱动 : 控制HiveQL生命周期的组件
  • 查询编辑器
  • 执行引擎
  • Hive服务器
  • 客户端组件 提供命令行接口Hive CLI、Web UI、JDBC驱动等

在这里插入图片描述

Hive数据类型

Hive支持两种数据类型,一种原子数据类型、还有一种叫复杂数据类型。

 基本数据类型 
类型描述示例
TINYINT1字节有符合整数1
SMALLINT2字节有符号整数1
INT4字节有符号整数1
BIGINT8字节有符号整数1
FLOAT4字节单精度浮点数1.0
DOUBLE8字节双精度浮点数1.0
BOOLEANtrue/falsetrue
STRING字符串“hive”,‘hive’

Hive类型中的String数据类型类似于MySQL中的VARCHAR。该类型是一个可变的字符串。

Hive支持数据类型转换,Hive是用Java编写的,所以数据类型转换规则遵循Java :

隐式转换 --> 小转大

强制转换 --> 大传小

类型描述示例
ARRAY有序的字段。字符类型必须相同ARRAY(1,2)
MAP无序的键值对。建的类型必须是原子的,值可以是任何类型。Map(‘a’,1,‘b’,2)
STRUCT一组命名的字段。字段类型可以不同STRUCT(‘a’,1,1,0)

到此这篇关于一文了解Hive是什么的文章就介绍到这了,更多相关Hive是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • git add -A 和 git add . 的区别详解

    git add -A 和 git add . 的区别详解

    这篇文章主要介绍了git add -A 和 git add . 的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • net-snmp静态编译链接的获取程序及生成执行程序详解

    net-snmp静态编译链接的获取程序及生成执行程序详解

    这篇文章主要介绍了net-snmp静态编译链接的获取程序及生成执行程序详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 完全卸载VSCode--解决卸载重新安装后还有原来配置的问题(图解)

    完全卸载VSCode--解决卸载重新安装后还有原来配置的问题(图解)

    这篇文章主要介绍了完全卸载VSCode--解决卸载重新安装后还有原来配置的问题,本文给大家分享VSCode卸载不彻底的问题,需要的朋友可以参考下
    2020-04-04
  • git设置用户名密码的示例代码

    git设置用户名密码的示例代码

    这篇文章主要介绍了git设置用户名密码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Cookie 的 SameSite 属性小结

    Cookie 的 SameSite 属性小结

    Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪,下面在通过本文给大家详细介绍下SameSite 属性的相关知识,感兴趣的朋友一起看看吧
    2021-10-10
  • 详解https 加密完整过程

    详解https 加密完整过程

    这篇文章主要介绍了详解https 加密完整过程的相关资料,这里主要说名https加密及通信的方法,需要的朋友可以参考下
    2017-07-07
  • 程序员趣味读物 谈谈Unicode编码

    程序员趣味读物 谈谈Unicode编码

    这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题
    2012-08-08
  • 使用sublime Text3过程中的各种问题的解决

    使用sublime Text3过程中的各种问题的解决

    本文主要介绍了使用sublime Text3过程中的各种问题的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 关于图片存储格式的整理(BMP格式介绍)

    关于图片存储格式的整理(BMP格式介绍)

    BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式
    2016-01-01
  • Visual Studio和Visual Studio Code之间有什么区别

    Visual Studio和Visual Studio Code之间有什么区别

    本文给大家介绍的是Visual Studio和Visual Studio Code之间有什么区别,希望对大家的学习能够有所帮助
    2020-02-02

最新评论