我的输入由大量小的ORC文件组成,我想在每天结束时合并它们,并将数据分割成100MB块。
我的输入和输出都是S3,环境使用EMR,
我设置的Hive参数如下:
set hive.msck.path.validation=ignore;
set hive.exec.reducers.bytes.per.reducer=256000000;
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.mapred.mode = nonstrict;
set hive.merge.mapredfiles=true;
set hive.merge.mapfile=true ;
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number = 8;
SET hive.exec.stagingdir=/tmp/hive/ ;
SET hive.exec.scratchdir=/tmp/hive/ ;
set mapred.max.split.size=68157440;
set mapred.min.split.size=68157440;
set hive.merge.smallfiles.avgsize=104857600;
set hive.merge.size.per.task=104857600;
set mapred.reduce.tasks=10;
我的插入语句:
insert into table dev.orc_convert_zzz_18 partition(event_type) select * from dev.events_part_input_18 where event_type = 'ScreenLoad' distribute by event_type;
现在问题是,我有大约80个输入文件,总大小为500MB,在执行这个插入语句之后,我期望在S3中会有4个文件,但所有这些文件都被合并成了一个单独的文件,这不是我想要的输出结果。
能否有人告诉我出了什么问题?
mapred
属性已经全部被弃用。 - OneCricketeercoalesce
或repartition
来解决你的小文件问题。 - OneCricketeer