赞
踩
小文件太多会有什么影响
(1)存储层面
1个文件块,占用namenode多大内存150字节 128G能存储多少文件块? 128 g1024m1024kb*1024byte/150字节 = 9.1亿文件块
(2)计算层面
每个小文件都会起到一个MapTask,1个MapTask默认内存1G。浪费资源。
合并小文件两种方式:
1、hive使用mr引擎
ALTER TABLE 表 PARTITION(分区) CONCATENATE;
只支持 RCFILE 和 ORC 文件类型
可多次执行
2、hive使用spark引擎
-- 开启shuffle并行度为x,结果会合并为3个文件
set spark.sql.shuffle.partitions=3;
insert overwrite table 表A partition(分区dt)
select *
from 表A
where 分区dt
-- 直接insert overwrite select可能不会走shuffle流程,此处重新分区,肯定会shuffle,才会起到合并小文件的作用
distribute by 某字段,rand()*10
;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。