Hive数据库的分区与分桶

5 篇文章 0 订阅
4 篇文章 0 订阅
本文详细介绍了如何在虚拟机上进行网页数据库的操作,包括配置Hadoop、启动服务、连接数据库、数据分区(单分区、多分区)以及表的分桶原理和使用场景。
摘要由CSDN通过智能技术生成

目录

一、网页数据库的展示与操作

1、开启三台虚拟机并对其主机进行连接操作

2、启动hadoop

3、检查mysql服务是否可以使用

4、启动metastore服务

5、实际开发中让服务后台运行(显示进程号):

6、查看Java运行的程序

7、使用客户端连接

8、指定JDBC连接的地址

9、网页使用虚拟机IP地址访问

10、主页显示页面如下:

11、若药直接访问主机名,可以如下尝试:

12、连接数据库

数据分区

二、表的分区

1、数据分区的目的

2、单个分区

3、多个分区

4、分区的增删改查

数据分桶

三、表的分桶

1 、分桶创建

2、分桶原理说明

3、 分桶主要使用场景


一、网页数据库的展示与操作

1、开启三台虚拟机并对其主机进行连接操作

2、启动hadoop

        虚拟机执行代码:start-all.sh

3、检查mysql服务是否可以使用

        systemctl status mysqld

4、启动metastore服务

        hive --service metastore

5、实际开发中让服务后台运行(显示进程号):

        nohup hive --service metastore &(本地)
        nohup hive --service hiveserver2 &(远程)

6、查看Java运行的程序

        jps(本地:有RunJar即可)
        lsof -i:10000(远程:有端口号服务即可)

7、使用客户端连接

        hive(一代)
        beeline(二代)

8、指定JDBC连接的地址

        !connect jdbc:hive2://node1:10000
        用户名:root

9、网页使用虚拟机IP地址访问

10、主页显示页面如下:

11、若药直接访问主机名,可以如下尝试:

        在指定位置查询hosts文件,一般路径为(C:\Windows\System32\drivers\etc\hosts),记事本打开后,在下方输入ip地址和主机名,示例:(以本机地址和主机名为主)

之后用主机名搜索即可:

12、连接数据库

        建立表名itcast,于/user/hive/warehouse/itcast.db,该路径为之后建表的默认路径。

数据分区

二、表的分区

1、数据分区的目的

大数据开发数据量较大,在进行数据查询计算时,需要对数据进行拆分,提升的查询速度。

2、单个分区

单个分区是创建单个目录

-- 创建表指定分区,对原始数据进行分区保存
create table new_tb_user(
    id int,
    name string,
    age  int,
    gender int,
    create_time date
)partitioned by (gender_p int)
row format delimited fields terminated by ',';
​
select * from new_tb_user;
​
-- 将原始数据表的数据写入新的分区表中
-- 静态写入分区数据 需要手动自己指定分区数值
-- insert into new_tb_user partition(gender_p=0) select * from tb_user where gender=0
-- 动态写入分区数据
-- 可以指定一个字段数据,根据字段数据内容进行分区
set hive.exec.dynamic.partition.mode=nonstrict;
​
insert into new_tb_user partition(gender_p) select id,name,age,gender,create_time,gender from tb_user;
​
desc new_tb_user;
desc tb_user;

3、多个分区

多个分区可以将数据拆分多个目录存储

create table new2_tb_user(
    id int,
    name string,
    age  int,
    gender int,
    create_time date
)partitioned by (y string,m string,d string)
row format delimited fields terminated by ',';
​
select * from new2_tb_user;
insert into new2_tb_user partition(y,m,d) select id,name,age,gender,create_time,year(create_time),month(create_time),day(create_time) from tb_user  limit 10;

注意点

1-分组字段不能和表中字段重名

2-动态分区数据写入时,select中字段顺序要和分区表中字段顺序一致

3-分区字段是在最后,所以select中的分区数据指定也放在最后

4、分区的增删改查

-- 创建一个分区表
create table tb_student(
    id int,
    name string,
    gender string,
    age int,
    cls string
)partitioned by (cls_p string)
row format delimited fields terminated by ',';
​
-- show查看分区表的分区信息
show partitions tb_student;
​
-- 生成分区数据信息
-- 方式1 通过insert数据导入,生成对应的分区数据
-- 方式2 通过add方法直接指定分区,指定后会在对应表目录下生成分区目录
alter table tb_student add partition(cls_p='CS');
show partitions tb_student;
select * from tb_student;
​
-- 修改分区名
ALTER TABLE tb_student PARTITION(cls_p='CS') RENAME TO PARTITION(cls_p='CS2');
​
-- 删除分区
alter table tb_student drop partition(cls_p='CS')

分区按照性别创建两个目录,示例如下:
​

数据分桶

三、表的分桶

分区 将数据拆分不同目录下存储

分桶 将数据拆分成不同文件进行存储

无论是分区,还是分桶,本质都是对数据的拆分存储,作用是为了提升查询的效率

1 、分桶创建

使用分桶时,一般都是已经存在了一个原始数据表,为了提升原始数据速度,将原始数据在重新写入一个分桶表

create table tb_user_buckets(
      id int,
    name string,
    age  int,
    gender int,
    create_time date
)   -- clustered by 指定按照哪个字段的数据进行数据的拆分  into 2 buckets  指定拆分的数量
    clustered by(gender) into 2 buckets
row format delimited fields terminated by ',';
​
-- 将原始数据表的数据写入到分桶表
insert into tb_user_buckets select * from tb_user limit 100;
​
​
create table tb_user_buckets_new(
      id int,
    name string,
    age  int,
    gender int,
    create_time date
)   -- clustered by 指定按照哪个字段的数据进行数据的拆分  into 2 buckets  指定拆分的数量
    clustered by(gender) into 3 buckets
row format delimited fields terminated by ',';
​
insert into tb_user_buckets_new select * from tb_user limit 100;

2、分桶原理说明

数据按照hash取余的方式进行拆分,写入到不同的文件中

hash(分桶字段)%分桶数=余数

3、 分桶主要使用场景

多表关联,为了提升多表关联的查询效率,可以将关联的表数据按照相同的关联字段,进行分桶,保持分桶个数一致,或是倍数关系,可以将系统数据放在同一个余数文件中,提升了关联效率


分桶还可以进行随机采样

可以通过随机采样减少计算量

分桶按照性别创建两个文件,示例如下:

  • 34
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值