当前位置: 代码网 > it编程>数据库>大数据 > 数据库之Hive概论和架构和基本操作

数据库之Hive概论和架构和基本操作

2024年05月18日 大数据 我要评论
hive概论hive是一个构建在hadoop上的数据仓库框架,最初,hive是由facebook开发,后台移交由apache软件基金会开发,并做为一个apache开源项目。hive是基于hadoop的

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,hangzhouwangwu 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'); 

以上就是数据库之hive概论和架构和基本操作的详细内容,更多关于hive概论和架构和基本操作的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com