Hive概论、架构和基本操作

 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.kler.cn/a/9855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据库】面试题合集

1. 什么是索引?mysql 索引类型&#xff1f;索引是一种数据结构,可以帮助我们快速的进行数据的查找.1.普通索引2.唯一索引3.主键索引4.组合索引5.全文索引参考链接&#xff1a;https://www.cnblogs.com/luyucheng/p/6289714.html2. 索引是个什么样的数据结构呢?索引的数据结构…

【JS运算】分组求和/平均值(reduce函数)

对于数组求和的问题&#xff0c;使用reduce函数能够最快的解决 如果你还不会reduce函数&#xff0c;可以看这一篇&#xff1a; reduce函数的使用 思路 reduce函数对相同group的值进行迭代求和 将分组的总和除以组里的个数得到平均值&#xff0c;然后存储起来 Sum函数&#x…

2023 年 MQTT 协议的 7 个技术趋势|描绘物联网的未来

MQTT 是物联网消息传输标准协议&#xff0c;其采用极其轻量级的发布订阅消息模型&#xff0c;以可扩展、可靠且高效的方式连接物联网设备。 自 1999 年 IBM 发布 MQTT 以来已经过去了二十多年&#xff0c;而自 2012 年 EMQ 在 GitHub 上发布开源 MQTT 消息服务器 EMQX&#xf…

Python 小型项目大全 46~50

# 四十六、百万骰子投掷统计模拟器 原文&#xff1a;http://inventwithpython.com/bigbookpython/project46.html 当你掷出两个六面骰子时&#xff0c;有 17%的机会掷出 7。这比掷出 2 的几率好得多&#xff1a;只有 3%。这是因为只有一种掷骰子的组合给你 2&#xff08;当两个…

文件:IO流

1. 什么是IO /O 即输入Input/ 输出Output的缩写&#xff0c;其实就是计算机调度把各个存储中&#xff08;包括内存和外部存储&#xff09;的数据写入写出的过程&#xff1b;java中用“流&#xff08;stream&#xff09;”来抽象表示这么一个写入写出的功能&#xff0c;封装成一…

黑马2023JavaScript笔记

一、js知识点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

鸿鹄工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换 安全问题:有风险的SQL查询&#xff1a;MyBatis解决 若依框架的数据隔离是通过 ${params.dataScope} 实现的 但是在代码安全扫描的时候$ 符会提示有风险的SQL查询&#xff1a;MyBatis 所以我们这里需要进行优化参考: M…

医院不良事件上报系统源码,全套源代码

不良事件上报系统源码&#xff0c;医院安全不良事件管理系统源码&#xff0c;医院不良事件上报源码 技术架构&#xff1a;前后端分离&#xff0c;仓储模式&#xff0c;BS架构&#xff0c;有演示&#xff0c;已在多家医院完美运营。 相关技术&#xff1a;PHPvscodevue2elementl…

QML控件--Container

文章目录一、控件基本信息二、控件说明三、属性成员四、成员函数一、控件基本信息 Import Statement: import QtQuick.Controls 2.14 Since: Qt 5.7 Inherits: Control Inherited By: DialogButtonBox, MenuBar, SwipeView, and TabBar 二、控件说明 Container&#xff08;容…

每日一问-ChapGPT-20230414-中医基础-四诊之问诊

文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230414-中医基础-四诊之问诊中医中的望闻问切介绍&#xff0c;以及对应的名家问诊的具体细节问诊拓展1. 一问寒热二问汗2. 三问头身四问便3. 五问饮食六问胸4. 七聋八渴俱当辨5. 九问旧病十问因6. 再问服药参机辨当日总结每…

vue3 history模式配置及nginx服务器配置

vue的路由方式有hash模式和history模式&#xff0c;history模式路由看起来有好些&#xff0c;路由路径里没有#号&#xff0c;而hash模式默认是有#号的。 vue3开始默认新建的项目都是history模式&#xff0c;不过history模式打包后想要使用正常访问的话&#xff0c;需要后端服务…

gRPC源码解读 传输层数据处理流程

本篇文章主要介绍gRPC Client传输层的处理流程&#xff0c;如有疑问&#xff0c;欢迎指教。 gRPC版本&#xff1a; 1.54.0-dev gRPC基于http2传输&#xff0c;传输层主要处理http2相关的内容。RFC7540制定了http2协议规范&#xff0c;因此&#xff0c;这部分代码的逻辑绝大部分…

【spring】通过抽象类与ApplicationContext编写扩展性强的业务逻辑

通过抽象类与ApplicationContext编写扩展性强的业务逻辑 一、场景分析 我们以支付业务为例&#xff0c;用户每一次支付都会经历永远不变的几个过程&#xff0c;例如&#xff1a;对于库存和金额的前置校验、支付后扣减库存&#xff0c;修改订单状态等等。整个流程变的是什么呢…

使用国密SSL证书,实现SSL/TLS传输层国密改造

密码是保障网络空间安全可信的核心技术和基础支撑&#xff0c;通过自主可控的国产密码技术保护重要数据的安全&#xff0c;是有效提升我国信息安全保障水平的重要举措。因此&#xff0c;我国高度重视商用密码算法的应用并出台相关政策法规&#xff0c;大力推动国产商用密码算法…

【你听说了吗】GPT-5据说已经学完了世界上现存所有的视频

文章目录前言一、GPT-5会带来什么&#xff1f;二、我们该怎么办&#xff1f;总结前言 最近半年要说最火的产品&#xff0c;无疑是ChatGPT &#xff0c;很多同学都在用 GPT 帮助自己工作&#xff0c;学习&#xff0c;提高效率&#xff01;尤其是 GPT4&#xff0c;性能强 GPT3.5…

电脑自动录屏软件哪个好用 电脑自动录屏怎么设置

录屏是很多工作都需要进行的操作&#xff0c;很多会议、培训课程、PPT等都可能需要通过屏幕录制的方式来进行分享。但是目前市面上的录屏软件很多&#xff0c;想找到使用便捷且高效的软件并不容易。今天就来分享一下电脑自动录屏软件哪个好用&#xff0c;电脑自动录屏怎么设置。…

【计算机组成原理 - 第二章】系统总线(完结)

本章参考王道考研相关课程&#xff1a; 【2019版】6.1.1 总线的概念与分类_哔哩哔哩_bilibili 【2019版】6.1.2 总线的性能指标_哔哩哔哩_bilibili 【2019版】6.2 总线仲裁_哔哩哔哩_bilibili 【2019版】6.3 总线操作和定时_哔哩哔哩_bilibili 【2019版】6.4 总线标准_哔哩哔哩…

css 导航栏效果

目录一、前言二、导航栏实现三、多级导航实现一、前言 在网站上面我们经常能看到一些导航栏&#xff0c;当我们点击对应的导航栏菜单时就会跳转到相应的网页&#xff0c;那么导航栏是如何实现的呢&#xff0c;实现它并不难&#xff0c;主要需要使用到ul标签和其它css样式美化它…

ICPC SWERC 2020 K - Unique Activities(SAM记录子串第一次结束位置 or SAM + hash)

两种做法的效率差异 做法一&#xff1a;SAM记录子串第一次结束位置 做法二&#xff1a;SAM hash 题意&#xff1a; 给定一个字符串&#xff0c;让你找到只出现过一次&#xff0c;且长度最短的子串并输出&#xff0c;如果有多个则输出最先出现的那个。 思路&#xff1a…
最新文章