一文了解Hive是什么
作者:Philosophy7 发布时间:2023-09-27 09:28:47
一、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支持两种数据类型,一种原子数据类型、还有一种叫复杂数据类型。
基本数据类型 | ||
---|---|---|
类型 | 描述 | 示例 |
TINYINT | 1字节有符合整数 | 1 |
SMALLINT | 2字节有符号整数 | 1 |
INT | 4字节有符号整数 | 1 |
BIGINT | 8字节有符号整数 | 1 |
FLOAT | 4字节单精度浮点数 | 1.0 |
DOUBLE | 8字节双精度浮点数 | 1.0 |
BOOLEAN | true/false | true |
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) |
来源:https://blog.csdn.net/ChengXuTeng/article/details/124842026
猜你喜欢
- 读取mat文件生成h5文件1. Matlab生成 .mat 文件p = rand(1,10);q = ones(10);save('
- 闭包在我们使用返回函数的时候,由于我们在一个函数中需要返回另一个函数,因此,我们在这个函数中就需要重新定义一个函数。而这样,就造成了我们的函
- 1.whl包whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件。使得可以在不具备编译环境的情况下,选择适合自己的py
- UTC与DSTUTC可以视为一个世界统一的时间,以原子时为基础,其他时区的时间都是在这个基础上增加或减少的,比如中国的时区就为UTC+8。D
- 如下所示:import pandas as pd from pandas import * import numpy as np data
- 如下所示:from ctypes import *import osimport win32con,win32clipboardaStrin
- 本文实例讲述了kNN算法python实现和简单数字识别的方法。分享给大家供大家参考。具体如下:kNN算法算法优缺点:优点:精度高、对异常值不
- function createHashDir($sign) { $md5 = md5($sign); if(!is_dir(MB_CACHE
- 前言说到二手房信息,不知道你们心里最先跳出来的公司(网站)是什么,反正我心里第一个跳出来的是网站是 58 同城。哎呦,我这暴脾气,想到就赶紧
- 前言GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护
- 今天写了一个放迅雷焦点广告的效果,还请大家多多指正,先附上效果图一张:相关文章:迅雷首页新闻图片轮播效果js源码首先是JS代码部分,之前一定
- 如下所示:In [1]: import pandas as pd ...: df=pd.DataFrame({"a":[
- 用python读取excel表中的数据假如说有如下一张存储了数据的excel表,其中x1-x6是特征,y_label是特征对应的类别标签。我
- 前言1992年扫雷被加入到windows3.1,成为早期windows的经典游戏。近来接触python的GUI(图形化)编程,于是通过编写扫
- 上次版本如果在没有找到轮廓或轮廓的点集数很小无法拟合椭圆或在RANSAC中寻找最优解时会死循环中,优化后的代码import cv2impor
- Python 中文编码Python 文件中如果未指定编码,在执行过程会出现报错:Python中默认的编码格式是 ASCII 格式,在没修改编
- 本文实例讲述了Python面向对象类的继承。分享给大家供大家参考,具体如下:一、概述面向对象编程 (OOP) 语言的一个主要功能就是“继承”
- 这篇文章主要介绍了Python文本处理简单易懂方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- python可以简单优美,也很有趣,下面是收集的例子:1.一句话开始一个http的文件服务器:$ python -m SimpleHTTPS
- 本文实例讲述了python 实现的发送邮件模板。分享给大家供大家参考,具体如下:##发送普通txt文件(与发送html邮件不同的是邮件内容设