Hadoop基础(二)
Hadoop基础(二)
你我皆温柔Hadoop基础
回顾
元数据 – MySQL – metastore元数据存储
Hive原理:本质 【SQL–>mapreduce】–元数据管理、解析SQL 【txt】
字段、类型、存储路径、权限:【映射】 创建MySQL表 【建表、新建字段、类型=>结构化语言】
分别:
a. 真实数据 -.txt文件
b. 表字段、类型等信息-元数据
关系:文字描述
(1)Hadoop:大数据开发框架
核心组件(架构):HDFS、MapReduce、YARN
(2)HDFS:分布式文件系统 -存储数据
核心思想:在Hadoop框架中,存储数据使用HDFS
(3)Hive:类SQL库【数据仓库】,必须建立在Hadoop的开发框架下
(4)MySQL:关系型数据库
核心思想:存储元数据【存储表信息、表字段等】
启动Hadoop、hive
1 | 启动Hadoop |
分区表
分区表介绍(分而治之)
1
2
3
41、单分区表:如单独按月分区
2、多分区表:如按年月日进行3级分区
# 设定分区表时,用partition by关键字修饰分区表使用
创建分区表
1
2
3
4
5
6
7
8
9create [external] table 表名(
id int,
name string
)
partitioned by (分区列 数据类型, 分区列) -- 分区列为虚拟列
row format delimited fields terminated by ",";
# partition表示分区,但字段后面可以有多个分区列
# partition 的位置要放在分隔符之前查看分区表
1
2hdfs 页面查看
show partitions 表名;使用分区表
1
2
3
4
5
6
7
8
9
10
11
12
13# 从本地Linux导入数据到表中
load data local inpath 'linux本地文件路径' into table 表名;
# 从hdfs导入数据到表中
load data inpath 'hdfs文件路径名' [overwrite] into table 表名;
# 导入数据
# 上传数据文件 Linux:/test_score hdfs: /input
# 加载数据Linux
load data local inpath '/root/day08_hive/test_score/score1.txt' into table db_part partition (year="2003");
# 加载hdfs数据
load data inpath '/input/score2.txt' into table db_part partition (year="2003");
# 查看效果
select * from db_part;修改分区表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 添加分区
alter table 表名 add partition (分区字段='分区值');
# 删除分区
alter table 表名 drop partition(分区字段='分区值');
# 修改分区值
alter table 表名 partition(分区字段='旧分区值') rename to parttion(分区字段='新分区值');
show partitions db_part;
# 新增分区
alter table db_part add partition (year="4444");
alter table db_part add partition (year="5000");
# 删除4444、默认
alter table db_part drop partition (year="4444");
alter table db_part drop partition (year="2023");
# 修改5000 - 6666
alter table db_part partition(year="5000") rename to partition (year="6666");手动添加的分区无法显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/*未同步元数据: Hive中的表和分区的元数据通常存储在Metastore中。手动添加分区时,需要确保及时更新Metastore中的元数据。可以使用MSCK REPAIR TABLE命令来解决此问题。这将扫描表目录并添加任何缺失的分区。()修复分区表*/
msck repair table 表名; -- 刷新分区
--查看分区数据
show partitions db_part;
select * from db_part;
-- 修复分区
msck repair table db_part;
-- 查看
show partitions db_part;
/*
权限问题: 确保有足够的权限来查看和编辑表和分区。可以检查你的角色/用户是否具有适当的权限来访问所需的数据库、表和分区。
文件系统配额限制: 手动添加分区时,Hive会根据元数据中定义的位置(例如HDFS路径)来检索数据。请确保文件系统具有足够的空间来存储新分区的数据。如果文件系统空间不足,可能会导致分区无法显示。
缓存问题: 如果已经查询过该表,并且启用了某种缓存机制(例如Hive的查询结果缓存或文件系统级别的缓存),则可能需要清除缓存才能看到新添加的分区。可以尝试重启Hive服务或手动清除相关缓存来解决此问题。
*/查询数据结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20-- 查询数据结果
-- 2023全年数据,每个商品对应的销售额
select name,(price*quantity) cost from db_shop where year="2023";
-- 2023年总销售额,
select sum(price*quantity) cost from db_shop where year="2023";
-- 23年5月的所有商品的销售情况
select * from db_shop where year="2023" and month="05";
-- 23年5月1号所有商品信息
select * from db_shop where year="2023" and month="05" and day="01";
-- 23年5月1号商品总销量
select sum(quantity) from db_shop where year="2023" and month="05" and day="01";
-- 23年4月和5月销量前两名的商品信息
select * from
(select *, (row_number() over (partition by year,month order by quantity desc)) rn_rk from db_shop where year="2023" and (month="04" or month="05")) tmp_q
where tmp_q.rn_rk in (1,2);
select * from
(select *, (row_number() over (partition by year,month order by quantity desc)) rn_rk from db_shop where year="2023" and (month="04" or month="05")) tmp_q
where tmp_q.rn_rk = 1 or tmp_q.rn_rk=2;
分桶表
分桶表介绍
1
2
3
4将数据分解为若干(固定数量)部分,易于管理的文件,进行存储
根据一定的算法找到对应文件
分桶规则:hash算法
clustered by (字段名) into 桶数 buacket创建分桶表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 可以先分区后分桶,不能先分桶后分区;因为分区是拆分成文件夹,分桶是拆分成文件;而文件里面不能创建文件夹,故可以先分区后分桶
-- 建表,分桶
drop table tb_user;
create table tb_user(
id int,
subject string,
name string
)
-- partitioned by (year string) -- 分区
clustered by (id) into 3 buckets -- 分桶
row format delimited fields terminated by "\t";
-- 查看表信息
desc tb_user;
-- 查看表数据
select * from tb_user;
-- 导入数据
load data local inpath '/root/day08_hive/bucket/course01.txt' into table tb_user;
-- 页面查看,分析
select * from tb_user;hash建模
1
2
3hash算法:
特征:同样的值被Hash算法加密后结果是一致的
结果值相同的分在同一个桶分桶表的优势和作用
- 优势
- 提升过滤性能
- 基于分桶字段的where过滤查询时,可减少全表扫描
- 提升join多表查询
- join时可以提高mapreduce程序效率,减少笛卡尔积
- 提升分组效率
- 以某列为分组时,可减少全表扫描
- 提升抽样处理
- 当对分桶表数据据进行抽样可减少数据的抽样处理
- 提升过滤性能
- 优势