目录
一、网页数据库的展示与操作
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、 分桶主要使用场景
多表关联,为了提升多表关联的查询效率,可以将关联的表数据按照相同的关联字段,进行分桶,保持分桶个数一致,或是倍数关系,可以将系统数据放在同一个余数文件中,提升了关联效率
分桶还可以进行随机采样
可以通过随机采样减少计算量
分桶按照性别创建两个文件,示例如下: