Hive概论、架构和基本操作

news2024/12/26 11:03:19

 Hive是一个构建在Hadoop上的数据仓库框架,最初,Hive是由Facebook开发,后台移交由Apache软件基金会开发,并做为一个Apache开源项目。

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

Hive它能够存储很大的数据集,可以直接访问存储在Apache HDFS或其他数据存储系统(如Apache HBase)中的文件。

Hive支持MapReduce、Spark、Tez这三种分布式计算引擎。

Hive架构

Hive是建立在Hadoop上的数据仓库基础架构,它提供了一系列的工具,可以存储、查询、分析存储在分布式存储系统中的大规模数据集。Hive定义了简单的类SQL查询语言,通过底层的计算引擎,将SQL转为具体的计算任务进行执行。

 客户端:写类SQL语句

Hive驱动器:解析、优化SQL

计算引擎:通过计算引擎来执行SQL

数据存储:存储源数据和结果数据

MapReduce

它将计算分为两个阶段,分别为Map和Reduce。对于应用来说,需要想办法将应用拆分为多个map、reduce,以完成一个完整的算法。

MapReduce整个计算过程会不断重复的往磁盘里读写中间结果。导致计算速度比较慢,效率比较低。

Tez

把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大DAG任务,减少了Map/Reduce之间的文件存储。 

Spark

Apache Spark是一个快速的,多用途的集群计算系统,相对于Hadoop MapReduce将中间结果保存在磁盘中,Spark使用了内存保存中间结果,能在数据尚未写入硬盘时在内存中进行计算,同时Spark提供SQL支持。 Spark 实现了一种叫RDDs的DAG执行引擎,其数据缓存在内存中可以进行迭代处理。

使用的是Hive+Spark计算引擎

 Hive安全和启动

1、启动集群中所有的组件

cd /export/onekey

./start-all.sh

2、使用终端链接Hive 

1)、进入到/export/server/spark-2.3.0-bin-hadoop2.7/bin目录中

2)、执行以下命令:./beeline

3)、输入:!connect jdbc:hive2://node1:10000,回车

4)、输入用户名:root

5)、直接回车,即可使用命令行连接到Hive,然后就可以执行HQL了。

[root@node1 onekey]# cd /export/server/spark-2.3.0-bin-hadoop2.7/bin
[root@node1 bin]# ./beeline
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://node1:10000
Connecting to jdbc:hive2://node1.itcast.cn:10000
Enter username for jdbc:hive2://node1.itcast.cn:10000: root
Enter password for jdbc:hive2://node1.itcast.cn:10000: 直接回车
2021-01-08 14:34:24 INFO  Utils:310 - Supplied authorities: node1.itcast.cn:10000
2021-01-08 14:34:24 INFO  Utils:397 - Resolved authority: node1.itcast.cn:10000
2021-01-08 14:34:24 INFO  HiveConnection:203 - Will try to open client transport with JDBC Uri: jdbc:hive2://node1.itcast.cn:10000
Connected to: Spark SQL (version 2.3.0)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node1.itcast.cn:10000> 。

连接成功的标志。

Hive的数据库和表

Hive数仓和传统关系型数据库类似,管理数仓数据也有数据库和表

Hive数据库操作

1)、创建数据库-默认方式

create database if not exists myhive;

show databases; #查看所有数据库

说明:

1、if not exists:该参数可选,表示如果数据存在则不创建(不加该参数则报错),不存在则创建

2、hive的数据库默认存放在/user/hive/warehouse目录

2)、创建数据库-指定存储路径

create database myhive2 location '/myhive2';

show databases; #查看所有数据库

说明:

1、location:用来指定数据库的存放路径。

3)、查看数据库详情信息

desc database myhive;

4)、删除数据库

删除一个空数据库,如果数据库下面有数据表,就会报错

drop database myhive;

强制删除数据库,包含数据库下面的表一起删除

drop database myhive2 cascade;

5)、创建数据库表语法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[LOCATION hdfs_path]

6)、表字段数据类型

 7)、表字段数据类型-复杂类型

8)、 内部表操作-创建表

未被external修饰的内部表(managed table),内部表又称管理表,内部表不适合用于共享数据。

create database  mytest;  #创建数据库

user mytest; #选择数据库

create table stu(id int, name string);

show tables; #查询数据

 创建表之后,Hive会在对应的数据库文件夹下创建对应的表目录。

9)、内部表操作-查看表结构/删除表

查看表结构

desc stu;#查看表结构基本信息

desc formatted stu;查看表结构详细信息

删除表 

drop table stu;

Hive内部表操作-数据添加

1)、方式1-直接插入数据

对于Hive中的表,可以通过insert into 指令向表中插入数据

user mytest; #选择数据库
create table stu(id int, name string); # 创建表
# 向表中插入数据
insert into stu values(1, 'test1');
insert into stu values(2, 'test2');

select * from stu; #查询数据

2)、方式2-load数据加载

Load 命令用于将外部数据加载到Hive表中

语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1,partcol2=val2 ...)]

说明:
  LOCAL 表示从本地文件系统加载,否则是从HDFS加载

应用1-本地加载

#创建表,同时指定文件的分隔符
create table if not exists stu2(id int ,name string) 
row format delimited fields terminated by '\t’ ;

#向表加载数据

load data local inpath '/export/data/hivedatas/stu.txt' into table stu2;

应用2-HDFS加载

#创建表,同时指定文件的分隔符
create table if not exists stu3(id int ,name string) 
row format delimited fields terminated by '\t’ ;

#向表加载数据
hadoop fs -mkdir -p /hivedatas 
cd /export/data/hivedatas 
hadoop fs –put stu.txt /hivedatas/ 
load data inpath '/hivedatas/stu.txt' into table stu3; 

Hive内部表特点

1)、元数据

Hive是建立在Hadoop之上的数据仓库,存在hive里的数据实际上就是存在HDFS上,都是以文件的形式存在

Hive元数据用来记录数据库和表的特征信息,比如数据库的名字、存储路径、表的名字、字段信息、表文件存储路径等等

Hive的元数据保存在Mysql数据库中

2)、内部表特点

hive内部表信息存储默认的文件路径是在/user/hive/warehouse/databasename.db/tablename目录

hive 内部表在进行drop操作时,其表中的数据以及表的元数据信息均会被删除

内部表一般可以用来做中间表或者临时表

Hive外部表操作

1)、创建表

创建表时,使用external关键字修饰则为外部表,外部表数据可用于共享

#创建学生表
create external table student (sid string,sname string,sbirth string , ss       ex string) row format delimited fields terminated by ‘\t’ location ‘/hive_table/student‘;

#创建老师表
create external table teacher (tid string,tname string) row format delimited fields terminated by '\t’ location ‘/hive_table/teacher‘;

创建表之后,Hive会在Location指定目录下创建对应的表目录。

2)、加载数据

外部表加载数据也是通过load命令来完成

#给学生表添加数据 
load data local inpath '/export/data/hivedatas/student.txt' into table student; 

#给老师表添加数据,并覆盖已有数据 
load data local inpath '/export/data/hivedatas/teacher.txt' overwrite into table teacher;


#查询数据
select * from student; 
select * from teacher;

3)、外部表特点

外部表在进行drop操作的时候,仅会删除元数据,而不删除HDFS上的文件

外部表一般用于数据共享表,比较安全

4)、安装Visual Studio Code

开发Hive的时候,经常要编写类SQL,

Hive表操作-分区表

1)、介绍

在大数据中,最常用的一种思想是分治,分区表实际就是对应hdfs文件系统上的独立的文件的文件夹,该文件夹下是该分区所有数据文件。

分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。

Hive中可以创建一级分区表,也可以创建多级分区表

2)、创建一级分区表

create table score(sid string,cid string, sscore int) partitioned by (month string) row format delimited fields terminated by '\t';

3)、数据加载

load data local inpath '/export/data/hivedatas/score.txt' into table score partition (month='202006');

4)、创建多级分区表

create table score2(sid string,cid string, sscore int) partitioned by (year string,month string, day string) 
row format delimited fields terminated by '\t'; 

5)、数据加载

load data local inpath '/export/data/hivedatas/score.txt' into table score2 partition(year='2020',month='06',day='01');

加载数据之后,多级分区表会创建多级分区目录。

6)、查看分区

show partitions score;

7)、添加分区

alter table score add partition(month='202008’); 
alter table score add partition(month='202009') partition(month = '202010');

8)、删除分区

alter table score drop partition(month = '202010');

9)、Array类型

Array是数组类型,Aarray中存放相同类型的数据

源数据:

zhangsan	  beijing,shanghai,tianjin,hangzhou
wangwu   	changchun,chengdu,wuhan,beijin

建表数据:

create external table hive_array(name string, work_locations array<string>) row format delimited fields terminated by '\t’ 
collection items terminated by ','; 

建表语句:

load data local inpath '/export/data/hivedatas/array_data.txt' overwrite into table hive_array;

查询语句:

-- 查询所有数据 
select * from hive_array; 

-- 查询loction数组中第一个元素 
select name, work_locations[0] location from hive_array; 

-- 查询location数组中元素的个数 
select name, size(work_locations) location from hive_array; 

-- 查询location数组中包含tianjin的信息 
select * from hive_array where array_contains(work_locations,'tianjin'); 

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

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

相关文章

【Maven 入门】第三章、Maven POM

一、什么是 Maven POM&#xff1f; POM 是 Maven 中最重要的概念之一&#xff0c;它描述了一个 Maven 项目的基本信息和依赖关系。简单来说&#xff0c;POM 就是一个 XML 文件&#xff0c;其中包含了以下内容&#xff1a; 项目的基本信息&#xff0c;如名称、版本号、描述等。…

超详细Redis入门教程——Redis 的安装与配置

前言 本文小新为大家带来 超详细Redis入门教程——Redis 的安装与配置 相关知识&#xff0c;具体内容包括Redis 的安装&#xff0c;连接前的配置&#xff0c;Redis 客户端分类&#xff08;包括&#xff1a;命令行客户端&#xff0c;图形界面客户端&#xff0c;Java 代码客户端&…

政策和技术引导企业布局光伏组件回收市场 积极应对光伏组件“退役潮”

一、发展光伏组件回收是实现我国碳中和的战略需求 光伏组件回收主要是通过对其各组件部分进行物理或化学方法处理&#xff0c;进而得到拥有经济价值的材料&#xff0c;进而减少环境污染&#xff0c;实现对废弃光伏组件资源的回收再利用。 我国是光伏组件制造及应用大国&#…

远程仓库的克隆和上传

要创建项目文件夹下打开Git Bush Here --> git clone 远程仓库地址 ! 没有权限访问 原因: 之前登过别人邮箱号,导致克隆失败 解决: 第一步. C盘->用户->电脑用户名->.gitconfig->用vscode打开删除信息,然后保存即可 . 第二步.电脑搜索找到 凭据管理器->wi…

【Python_Scrapy学习笔记(十一)】基于Scrapy框架的下载器中间件添加Cookie参数

基于Scrapy框架的下载器中间件添加Cookie参数 前言 本文中介绍 如何基于 Scrapy 框架的下载器中间件添加 Cookie 参数。 正文 1、添加中间件的流程 在 middlewares.py 中新建 Cookie参数 中间件类在 settings.py 中添加此下载器中间件&#xff0c;设置优先级并开启 2、基…

【C++初阶】命名空间 namespace

一.前言 在正式进入C前&#xff0c;我们需要先了解了解C。顾名思义&#xff0c;C是基于C的一种编程语言&#xff0c;相较于C&#xff0c;C写出来的代码更简洁&#xff0c;有时候C需要几百行代码&#xff0c;而C只需要几十行就可以解决&#xff0c;C也很好的解决了C中存在的一些…

【夜莺监控搭建】

夜莺监控搭建V6版本 v6版本系统架构安装部署安装时序数据库安装mysql、redis和n9e&#xff08;夜莺主程序&#xff09;安装categraf 登录平台如何修改密码添加数据源 官网&#xff1a; https://flashcat.cloud/ GitHub项目地址&#xff1a; https://github.com/ccfos/nightin…

Mongo集群化部署+高可用架构

数据库开发系列 文章目录 数据库开发系列前言一、MongoDB存储引擎二、MongoDB 复制&#xff08;副本集&#xff09;三、为什么需要分片集群架构四、高可用分片集群架构&#xff08;复制集&#xff09;总结 前言 数据库的演进 随着计算机的发展&#xff0c;越来越多的数据需要被…

python+vue 服装穿搭信息管理系统

本系统采用自上往下的方法开发&#xff0c;基本定位如下功能&#xff1a; 本课题要求实现一套服装信息管理系统的设计与实现&#xff0c;系统主要包括管理员模块和用户模块功能模块。 由于本系统需要在不同设备上都能运行&#xff0c;而且电脑配置要求也要越低越好&#xff0c…

SpringMVC框架详解(学习总结)

目录 什么是MVC SpringMVC概述 SpringMVC常见开发方式 SpringMVC执行流程 SpringMVC核心组件介绍 快速构建Spring MVC程序 SpringMVC参数绑定 SpringMVC跳转方式 SpringMVC处理json请求和响应 SpringMVC静态资源处理 SpringMVC操作session和cookie SpringMVC拦截器 …

基于nuxt3的语雀文档批量导出

语雀文档批量导出 快速访问 Github Blog 项目由来 语雀是一个不错的笔记与文档知识库&#xff0c;但是最近发现他开始割韭菜了&#xff0c; 知识库的公开开始收费&#xff0c;就想着把内容都导出自己来部署&#xff0c;发现并没有批量操作&#xff0c;amazing&#xff0c;…

美国运营商PTCRB认证PTCRB认证怎么做PTCRB认证是什么?

大家好&#xff0c;今天我想和大家分享一下什么是PTCRB认证&#xff01; PTCRB是指个人通信服务型号认证评估委员会&#xff0c;由北美移动运营商于1997年成立。目前的运营商已经不仅限于北美&#xff0c;而是涵括全球范围内的移动运营商成员。其目的是为包括Cellular GERAN&a…

Session使用和原理分析图与实现原理-- 代码演示说明 Session 的生命周期和读取的机制代码分析

目录 Web 开发会话技术 -Session —session 技术 session 基本原理 Session 可以做什么 如何理解 Session Session 的基本使用 session 底层实现机制 原理分析图 代码演示 CreateSession.java 测试 Session 创的机制&#xff0c; 注意抓包分析​编辑 ReadSession.j…

C盘文件删除怎么做?3个方法教你清理C盘!

案例&#xff1a;C盘文件怎么删除&#xff1f; 【我的电脑使用了一年多了&#xff0c;现在C盘已经快满了&#xff0c;想知道C盘里的文件哪些可以进行删除&#xff1f;感谢&#xff01;】 C盘是计算机系统盘&#xff0c;存储了操作系统和应用程序等重要文件&#xff0c;因此&a…

机器视觉助力锂电行业升级转型—章鱼博士视控一体化解决方案

摘要&#xff1a; 机器视觉在工业领域中充当了模拟人眼的作用&#xff0c;通过其高效的感知能力、精确的检测准确性、可定制性和较低的人工成本等特点&#xff0c;已逐渐成为工业智能化转型的核心功能。在锂电池领域&#xff0c;机器视觉扮演着许多重要的角色&#xff0c;包括生…

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…

【unity实战】随机地下城生成4——小地图的制作(2d,3d通用)(含源码)

原理: 新建一个摄像机,用来查看小地图,我们分个图层只能新建的摄像机才可以拍摄到 如果对摄像机和渲染纹理还不理解的,强烈推荐先看完我的另一篇文章 【Unity游戏开发教程】零基础带你从小白到超神14——灯光、摄像机、天空盒、镜子的制作 新建一个摄像机,记得删除Audio …

关于使用el-input-number设置不让删除为空,让强制为最小值1,以及从1删除,但是发现输入框还是没有最小值的问题

哈喽&#xff0c;大家好啊&#xff0c;最近用到了element的el-input-number 计数器 但是有个问题一直困扰我&#xff0c;就是我发现竟然可以删除输入的值&#xff0c;也不会强制改成最小值 但是因为业务这里不允许数量为空的情况&#xff0c;所以我找了很久&#xff0c;终于实…

JavaSE学习进阶day07_01 Stream流

第二章 Stream流 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream概念&#xff0c;用于解决已有集合类库既有的弊端。 2.1 引言 传统集合的多步遍历代码 几乎所有的集合&#xff08;如Collection接口或Map接口等&#xff09;都支…

SpringBoot学习

什么是springBoot 使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。简而言之&#xff0c;Spring Boot通过提供默认配置的方式整合了所有的框架&#xff0c;让我们可以更加简单、快速、方便地构建应用程序。 并不是对spring的功能增强&#xf…