Hive概述与基本操作

news2025/3/14 22:53:43

一、Hive基本概念

1.什么是hive?

(1)hive是数据仓库建模的工具之一
(2)可以向hive传入一条交互式的sql,在海量数据中查询分析得到结果的平台

2.Hive简介

Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更近一步说hive就是一个MapReduce客户端

3.Hive的优缺点:

优点:

1、操作接口采用类sql语法,提供快速开发的能力(简单、容易上手)

2、避免了去写MapReduce,减少开发人员的学习成本

3、Hive的延迟性比较高,因此Hive常用于数据分析,适用于对实时性要求不高的场合

4、Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较高。(不断地开关JVM虚拟机)

5、Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

6、集群可自由扩展并且具有良好的容错性,节点出现问题SQL仍可以完成执行

缺点:

1、Hive的HQL表达能力有限

(1)迭代式算法无法表达 (反复调用,mr之间独立,只有一个map一个reduce,反复开关)

(2)数据挖掘方面不擅长

2、Hive 的效率比较低

(1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化

(2)Hive 调优比较困难,粒度较粗 (hql根据模板转成mapreduce,不能像自己编写mapreduce一样精细,无法控制在map处理数据还是在reduce处理数据)

4.Hive和传统数据库对比

hive和mysql什么区别?

首先,hive不是数据库,它只是一个数据仓库建模的工具,是可以在海量数据中查询分析得到结果的平台,数据存储位置在HDFS上。

mysql是数据库,数据存储位置在本地磁盘上

5.Hive应用场景

(1)日志分析:大部分互联网公司使用hive进行日志分析,如百度、淘宝等。

(2)统计一个网站一个时间段内的pv,uv,SKU,SPU,SKC

(3)多维度数据分析(数据仓库

(4)海量结构化数据离线分析

(5)构建数据仓库

二、Hive架构

1.图解:

元数据Metastore

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

一般需要借助于其他的数据载体(数据库)

主要用于存放数据库的建表语句等信息

推荐使用Mysql数据库存放数据

Driver(sql语句是如何转化成MR任务的?)

元数据存储在数据库中,默认存在自带的derby数据库(单用户局限性)中,推荐使用Mysql进行存储。

1) 解析器(SQL Parser):将SQL字符串转换成抽象语法树AST(从3.x版本之后,转换成一些的stage),这一步一般都用第三方工具库完 成,比如ANTLR;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

2) 编译器(Physical Plan):将AST编译(从3.x版本之后,转换成一些的stage)生成逻辑执行计划。

3) 优化器(Query Optimizer):对逻辑执行计划进行优化。

4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是 MR/Spark/flink。

数据处理

Hive的数据存储在HDFS中,计算由MapReduce完成。HDFS和MapReduce是源码级别上的整合,两者结合最佳。解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。

hive cli和beeline cli的区别

在客户端启动(beeline cli)的hiveserver2服务会将任务传给服务端,服务端通过元数据映射HDFS中的数据,进行处理

数据库中Hive元数据表

1、存储Hive版本的元数据表(VERSION),该表比较简单,但很重要,如果这个表出现问题,根本进不来Hive-Cli。比如该表不存在,当启动Hive-Cli的时候,就会报错“Table 'hive.version' doesn't exist”

2、Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)

DBS:该表存储Hive中所有数据库的基本信息。

DATABASE_PARAMS:该表存储数据库的相关参数。

3、Hive表和视图相关的元数据表

主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。

​ TBLS:该表中存储Hive表,视图,索引表的基本信息。

​ TABLE_PARAMS:该表存储表/视图的属性信息。

​ TBL_PRIVS:该表存储表/视图的授权信息。

4、Hive文件存储信息相关的元数据表

主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS,由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。

​ SDS:该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。

TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。

​ SD_PARAMS: 该表存储Hive存储的属性信息。 ​ SERDES:该表存储序列化使用的类信息。

​ SERDE_PARAMS:该表存储序列化的一些属性、格式信息,比如:行、列分隔符。

5、Hive表字段相关的元数据表

主要涉及COLUMNS_V2:该表存储表对应的字段信息。

(加粗的部分的表比较重要)

三、Hive的基本操作

hive中的数据来源是HDFS,hive中的数据库,数据表对应HDFS上的文件夹,数据表中的数据对应HDFS上的文件,通常数据库会默认创建在HDFS中的/user/hive/warehouse目录下

3.1 Hive库操作

3.1.1 创建数据库

1)创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.db

create database testdb;

2)避免要创建的数据库已经存在错误,增加if not exists判断。(标准写法)

create database if not exists testdb;

3)创建数据库并指定位置

create database if not exist 数据库名 location 指定路径;

3.1.2 修改数据库

alter database dept set dbproperties('createtime'='20220531');

数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。

3.1.3数据库详细信息

1)显示数据库(show)

show databases;

2)可以通过like进行过滤

show databases like 't*';

3)查看详情(desc)

desc database testdb;

4)切换数据库(use)

use testdb;

3.1.4删除数据库(将删除的目录移动到回收站中)

1)最简写法

drop database testdb;

2)如果删除的数据库不存在,最好使用if exists判断数据库是否存在。否则会报错:FAILED: SemanticException [Error 10072]: Database does not exist: db_hive

drop database if exists testdb;

3)如果数据库不为空,使用cascade命令进行强制删除。报错信息如下FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)

drop database if exists testdb cascade;

 

3.2 Hive数据类型

3.2.1 基础数据类型:

3.2.2复杂的数据类型

3.3 Hive表操作

Hive没有专门的数据文件格式,常见的有以下几种:

TEXTFILE ​ SEQUENCEFILE ​ AVRO ​ RCFILE ORCFILEPARQUET

TextFile:
       TEXTFILE 即正常的文本格式,是Hive默认文件存储格式,此种格式的表文件在HDFS上是明文,可用hadoop fs -cat命令查看,从HDFS上get下来后也可以直接读取。

      

RCFile:
是Hadoop中第一个列文件格式。能够很好的压缩和快速的查询性能。通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。

ORCFile:
Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是可切分(Split)的。因此,在Hive中使用ORC作为表的文件存储格式,不仅可以很大程度的节省HDFS存储资源,而且对数据的查询和处理性能有着非常大的提升。

Parquet:
Parquet仅仅是一种存储格式,它是语言、平台无关的,并且不需要和任何一种数据处理框架绑定。这也是parquet相较于orc的仅有优势:支持嵌套结构。

SEQUENCEFILE:
SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。

AVRO:
Avro是一种用于支持数据密集型的二进制文件格式。它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以它不需要开发者在API 级别实现自己的Writable对象。Avro提供的机制使动态语言可以方便地处理Avro数据。最近多个Hadoop 子项目都支持Avro 数据格式,如Pig 、Hive、Flume、Sqoop和Hcatalog。

3.3.1 创建表

[ ]内的内容属于可选内容

建表1:全部使用默认建表方式

create table IF NOT EXISTS students
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';    // 必选,指定列分隔符 

建表2:指定location(这种方式比较常用)

create table IF NOT EXISTS students2
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/bigdata27/input1';   

// 指定Hive表的数据的存储位置,一般在数据已经上传到HDFS,想要直接使用,会指定Location,通常Locaion会跟外部表一起使用,内部表一般使用默认的location

建表3:指定存储格式

create table IF NOT EXISTS test_orc_tb
(
    id bigint,
    name string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC
LOCATION '/bigdata29/out6';

// 指定储存格式为orcfile,如果不指定,默认为textfile,注意:除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。

建表4:将查询的结果作为表数据

create table xxxx as select ... from ... (表不存在,会新建一个表)

insert into table 表名 select ... from ... (表以存在,将查询的数据插入表中)

//覆盖插入 把into 换成 overwrite

建表5:建的表与另一张表结构相同

create table 新建表 like 结构相同表

举例:

简单用户信息表创建:

create table t_user(
id int,
uname string,
pwd string,
gender string,
age int
)
row format delimited fields terminated by ','
lines terminated by '\n';

表数据:

1,admin,123456,男,18
2,zhangsan,abc123,男,23
3,lisi,654321,女,16

复杂人员信息表创建:

create table IF NOT EXISTS t_person(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string ,city:string>
)
row format delimited fields terminated by ',' -- 列与列之间的分隔符
collection items terminated by '_' -- 元素与元素之间分隔符
map keys terminated by ':' -- Map数据类型键与值之间的分隔符
lines terminated by '\n';  -- 行与行之间的换行符

表数据:

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,beng bu_anhui
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,he fei_anhui

3.3.2显示表的信息

show tables;
show tables like 'u*';
desc t_person;
desc formatted students; // 更加详细

3.3.3加载数据

1、使用hdfs dfs -put '本地数据' 'hive表对应的HDFS目录下'
2、使用 load data

(1)将HDFS上的/input1目录下面的数据 移动至 students表对应的HDFS目录下
load data inpath '/input1/students.txt' into table students

(2)加上 local 关键字 可以将Linux本地目录下的文件 上传到 hive表对应HDFS 目录下 原文件不会被删除

load data local inpath '/usr/local/soft/data/students.txt' into table students;

(3)// overwrite 覆盖加载
load data local inpath '/usr/local/soft/data/students.txt' overwrite into table students;

3.3.4导出数据

将查询结果存放到本地

1.首先在本地(linux)上创建存放数据的文件夹

2.导出查询结果的数据

举例:

insert overwrite local directory '本地路径' select xxx from xxx;

按照指定的方式将数据输出到本地

1.创建存放数据的目录

2.导出查询结果的数据

举例:

insert overwrite local directory '/usr/local/soft/shujia/person' 
ROW FORMAT DELIMITED fields terminated by ',' 
collection items terminated by '-' 
map keys terminated by ':' 
lines terminated by '\n' 
select * from t_person;

3.3.5清空表数据与删除表

清空表数据

truncate table 表名;

删除表

drop table 表名;

3.3.5修改列

查询表结构

desc 表名;

添加列

举例:alter table students2 add columns (education string);

更新列 

举例:alter table stduents2 change education educationnew string;

四、Hive内部表与外部表

内部表简介:

1.默认建表的类型就是内部表

2.删除表的时候,表在hdfs中对应的文件夹会被删除,同时表数据(hdfs中的文件)也会被删除,

在数据库中存储的元数据信息也会被删除

举例:

// 内部表
create table student3
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

外部表简介:

1.外部表使用EXTERNAL关键字创建

2.外部表因为是指定其他的hdfs路径的数据加载到表中来,所以hive会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然保存在hdfs中不会被删除,但是数据库中的元数据会被删除。

3.设计外部表的初衷就是让表的元数据与表数据(hdfs下的文件数据)解耦

举例:

// 外部表
create external table students_external
(
    id bigint,
    name string,
    age int,
    gender string,
    clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1598559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

经典文献阅读之--A Survey on Generative Diffusion Models(扩散模型最新综述)

0. 简介 本文综述了深度生成模型&#xff0c;特别是扩散模型(Diffusion model)&#xff0c;如何赋予机器类似人类的想象力。扩散模型在生成逼真样本方面显示出巨大潜力&#xff0c;克服了变分自编码器中的后分布对齐障碍&#xff0c;缓解了生成对抗网络中的对抗性目标不稳定性…

深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f525; 转载自热榜文章&#xff1a;探索设计模式的魅力&#xff1a;深度挖掘响应式模式的…

uni-starter的微信登录拿不到登录者的昵称,头像,手机号问题记录

uni-starter的微信登录竟然拿不到登录者的昵称&#xff0c;头像&#xff0c;手机号 获取手机号的方法在另外一篇文章中&#xff0c;需要认证&#xff0c;需要有营业执照 uni.login({"provider": type,"onlyAuthorize": true,// #ifdef APP"univerif…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

Docker Desktop修改镜像存储路径 Docker Desktop Start ... 卡死

1、CMD执行wsl -l -v --all 2、Clean / Purge data 3、导出wsl子系统镜像: wsl --export docker-desktop D:\docker\wsl\distro\docker-desktop.tar wsl --export docker-desktop-data D:\docker\wsl\data\docker-desktop-data.tar4、删除现有的wsl子系统&#xff1a; wsl -…

智游剪辑网页版发布了!

你是否因为软件安装麻烦而不愿意尝试本软件&#xff1f;那么可以试试网页版&#xff01;只需要一个浏览器&#xff0c;就可以直接访问了&#xff0c;网页版免安装&#xff0c;无广告&#xff0c;大部分功能都可以免费使用&#xff01; 网页版地址&#xff1a;app.zyjj.cc 界面…

汇编基础-----通过x64dbg了解什么是堆栈

汇编基础-----通过x64dbg了解什么是堆栈 什么是堆栈 在汇编语言中&#xff0c;堆栈&#xff08;stack&#xff09;是一种用于存储临时数据和执行函数调用的内存结构。堆栈是一种后进先出&#xff08;Last-In-First-Out, LIFO&#xff09;的数据结构&#xff0c;通常用于保存函…

ssm042在线云音乐系统的设计与实现+jsp

在线云音乐系统的设计与实现 摘 要 随着移动互联网时代的发展&#xff0c;网络的使用越来越普及&#xff0c;用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行&#xff0c;人们在日常生活中经…

08_ADC轮询方式读取电压值/DMA方式多通道采集/DAC数模转换

ADC轮询方式读取电压值/DMA方式多通道采集/DAC数模转换 ADC轮询方式读取电压值DMA方式多通道采集DAC数模转换 ADC轮询方式读取电压值 while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc1);//启动ADC装换HAL_ADC_PollForConversion(&hadc…

多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【Matlab实现TCN-LSTM时间卷积长短期记忆神经网络多变量…

【C++ 继承】关于多继承、菱形继承你了解多少?

文章目录 1. 为什么 C 有多继承&#xff0c;Java 没有多继承呢&#xff1f;2. 什么是菱形继承呢&#xff1f;3. 菱形继承产生数据冗余和二义性问题 1. 为什么 C 有多继承&#xff0c;Java 没有多继承呢&#xff1f; C 实现多继承是为了满足某些场景的需要&#xff0c;但是有多继…

leetcode:739.每日温度/496.下一个更大元素

单调栈的应用&#xff1a; 求解当前元素右边比该元素大的第一个元素&#xff08;左右、大小都可以&#xff09;。 单调栈的构成&#xff1a; 单调栈里存储数组的下标&#xff1b; 单调栈里的元素递增&#xff0c;求解当前元素右边比该元素大的第一个元素&#xff1b;元素递…

【附gpt4.0升级秘笈】百度智能云万源全新一代智能计算操作系统发布:引领AI新纪元

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为引领未来发展的关键技术&#xff0c;正逐步渗透到社会的每一个角落。百度&#xff0c;作为中国AI领域的领军企业&#xff0c;始终站在技术创新的前沿&#xff0c;不断推出引领行业的重磅产品。今日&…

【小贴士|Unity】华佗热更版本控制配置

现在越来越多的新项目选择使用HybridCLR&#xff0c;而不是以前的Lua。也不妨有的项目会配置打包机器人以及版本控制&#xff0c;但是这个版本控制的配置还真需要注意一些。&#xff08;因为我就踩坑了&#xff09; 如图所示&#xff0c;当你第一次执行HybridCLR/Generate/All后…

渲染农场怎么收费?渲染100邀请码1a12

随着互联网的发展&#xff0c;越来越多的影视、动画和广告项目涌现出来&#xff0c;为了加快渲染&#xff0c;很多视觉工作者都会使用渲染农场&#xff0c;现在市面上的农场那么多&#xff0c;它们有什么收费模式&#xff1f;性价比如何&#xff1f;这篇文章我们就来看下吧。 1…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法&#xff0c;就是使用迭代法层次遍历&…

《手把手教你》系列基础篇(九十)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-中篇(详解教程)

1.简介 上一篇宏哥介绍是如何使用logback将日志输出到控制台中&#xff0c;但是如果需要发给相关人需要你拷贝出来&#xff0c;有时候由于控制台窗口的限制&#xff0c;有部分日志将会无法查看&#xff0c;因此我们还是需要将日志输出到文件中&#xff0c;因此今天主要介绍和分…

视频号小店被严重低估,私域电商再次崛起,这次真的不一样!

大家好&#xff0c;我是电商笨笨熊 在视频号正式推出电商之后&#xff0c;我听到过很多贬低的话&#xff1b; 有人觉得腾讯没有做电商的基因&#xff0c; 有人觉得这不过是资本打一枪换一个地方罢了&#xff0c;最终都是普通人承担后果&#xff0c; 总之&#xff0c;这样的…

华为海思数字芯片设计笔试第五套

声明 下面的题目作答都是自己认为正确的答案&#xff0c;并非官方答案&#xff0c;如果有不同的意见&#xff0c;可以评论区交流。 这些题目也是笔者从各个地方收集的&#xff0c;感觉有些题目答案并不正确&#xff0c;所以在个别题目会给出自己的见解&#xff0c;欢迎大家讨论…

【Zabbix】zabbix 软件监控

使用zabbix监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态 利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控…