没设置之前的结果为22个
先测试运行一下,看结果表中一条记录是多大
751*500万=3755000000 kb
即生成的结果文件一个应为1655000000 kb
set hive.merge.mapfiles=true;
--对mr进行设置
set hive.merge.mapfiles=true;
--only-map进行设置
set hive.merge.smallfiles.avgsize=1024000000;
--1g
set hive.merge.size.per.task=3755000000;
--3755m
create table if not exists ads.ads_distinct_zhibiao_nian_diqu
(
top string,
years string,
zheng_shi_indicator string,
zheng_shi_indicator_old string,
di_qu_dai_ma string,
di_qu_deng_ji string,
di_yu_lei_xing_dai_ma string,
reportgrouper string,
reportgrouper_old string,
zheng_shi_value string,
zheng_shi_unit string,
zheng_shi_value_old string,
zheng_shi_unit_old string,
wen_ben_wen_jian_ming string,
nian_jian_zhong_wen_ming string,
nian_jian_nian_fen string,
tiao_mu_ti_ming string,
bian_hao string,
ru_ku_biao_shi string,
yin_shua_ye_ma string,
fu_qin_jie_dian string,
guo_biao_di_yu_dai_ma string
)
row format delimited
fields terminated by "n"
;
insert overwrite table ads.ads_distinct_zhibiao_nian_diqu
select
"" as top,
concat("<年份>=",years) years ,
concat("<正式指标>=",zheng_shi_indicator) zheng_shi_indicator,
concat("<正式指标_OLD>=",zheng_shi_indicator_old) zheng_shi_indicator_old,
concat("<地区代码>=",di_qu_dai_ma) di_qu_dai_ma,
concat("<地区等级>=",di_qu_deng_ji) di_qu_deng_ji,
concat("<地域类型代码>=",di_yu_lei_xing_dai_ma) di_yu_lei_xing_dai_ma,
concat("=",reportgrouper) reportgrouper,
concat("=",reportgrouper_old) reportgrouper_old,
concat("<显示数值>=",zheng_shi_value) zheng_shi_value,
concat("<显示单位>=",zheng_shi_unit) zheng_shi_unit,
concat("<显示数值_OLD>=",zheng_shi_value_old) zheng_shi_value_old,
concat("<显示单位_OLD>=",zheng_shi_unit_old) zheng_shi_unit_old,
concat("<文件名X>=",wen_ben_wen_jian_ming) wen_ben_wen_jian_ming,
concat("<年鉴中文名X>=",nian_jian_zhong_wen_ming) nian_jian_zhong_wen_ming,
concat("<年鉴年份X>=",nian_jian_nian_fen) nian_jian_nian_fen,
concat("<条目题名X>=",tiao_mu_ti_ming) tiao_mu_ti_ming,
concat("<编号X>=",bian_hao) bian_hao,
concat("<入库标识X>=", ru_ku_biao_shi) ru_ku_biao_shi,
concat("<印刷页码X>=",yin_shua_ye_ma) yin_shua_ye_ma,
concat("<父亲节点X>=",fu_qin_jie_dian) fu_qin_jie_dian,
concat("<国标地域代码>=",guo_biao_di_yu_dai_ma) guo_biao_di_yu_dai_ma
from
dws.dws_distinct_zhibiao_nian_diqu
;
结果
因为是用一条记录的大小计算500条记录的总大小,如果其中有些记录的大小<我门查看的那条记录的大小,则跑出的结果会大于500万。建议是取多条记录,计算他们的平均值。
二.知识点查询官网
Configuration Properties - Apache Hive - Apache Software Foundation
1.有三个对reduce task设定的参数mapred.reduce.tasks 强制指定reduce个数 默认值:-1 添加于:Hive 0.1.0 通过将此属性设置为 -1,Hive 将自动计算出reduce task的数量。 hive.exec.reducers.bytes.per.reducer 每个reduce task处理的最大数据量 Hive 0.14.0 及更高版本中为256,000,000 即256 MB 也就是说,如果输入大小为 1 GB,则将使用 4 个 reducer。 hive.exec.reducers.max 每个job最大的reduce task个数 默认值:1009 在 Hive 0.14.0 及更高版本中 每个job 的最大reducer 数量。
对上述3个参数进行设定
set mapred.reduce.tasks=1; set hive.exec.reducers.max=1 set hive.exec.reducers.bytes.per.reducer=10240000000(10g) drop table test.a create table test.a as select * from test.test_distinct;
无效。
无效原因:insert t1 select * from t2
create table t1 as select * from t2
这两种方式都不走mr,所以没用
2.使用合并小文件参数1.hive.merge.smallfiles.avgsize 默认值:16000000(16m) 添加于:Hive 0.5.0 当作业的平均输出文件大小小于此数字时,Hive 将启动额外的 map-reduce 作业以将输出文件合并为更大的文件。 2.hive.merge.mapfiles 为 true,则[1.]对 map-only 作业执行此操作; 3.hive.merge.mapredfiles 为 true,则对 map-reduce 作业执行此操作。 4.hive.merge.size.per.task 默认值:256000000(256m) 添加于:Hive 0.4.0 合并后文件的大小。1.仅设置合并后的文件大小
set hive.merge.mapfiles=true; set hive.merge.size.per.task=2048000000; --2g drop table test.b; create table test.b as select * from test.a;
无效!
2.设置合并多大的文件和合并后文件大小set hive.merge.mapfiles=true; set hive.merge.smallfiles.avgsize=2048000000; --2g set hive.merge.size.per.task=2048000000; --2g drop table test.b; create table test.b as select * from test.a;
有效!


![[hive]hive结果表中每500万条记录生成一个文件 [hive]hive结果表中每500万条记录生成一个文件](http://www.mshxw.com/aiimages/31/774244.png)
