在实际项目中,数仓的脚本基本上都是有分区字段的。在很多日志项目中,按照时间字段(天)分区比较常见。所以在脚本开发的过程中就会涉及到一些参数的设置,动态分区参数和合并小文件参数设置也是用的最多的。
动态分区参数设置
set hive.exec.dynamic.partition = true # 是否打开动态分区,默认false
set hive.exec.dynamic.partition.mode = nonstrict # 动态分区的模式,默认strict,即必须有静态分区。在数仓业务中,数据都是增量新增的,所以一般分区全都是动态分区字段
set hive.exec.max.dynamic.partitions.pernode = 10000 #单个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错
set hive.exec.max.dynamic.partitions =10000 # 所允许的最大的动态分区的个数,可以手动增加分区。默认1000
set hive.exec.max.created.files = 50000 # 所有hive运行的map与reduce任务可以产生的文件的和,默认10000
set hive.merge.mapfiles = true # 合并小文件设置,在Map-only的任务结束时合并小文件,默认值true
set hive.merge.mapredfiles = true # 在Map-Reduce的任务结束时合并小文件,默认值false
set hive.merge.size.per.task = 256*1000*1000# reduce合并文件的大小,默认 256 M。通过这个job map阶段输出文件的totalsize,除以这个参数值,就可以得出job的reduce数量。所以该参数可以控制reduce的大小和数量
set hive.merge.smallfiles.avgsize = 128*1000*1000 # 当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge,默认16*1000*1000即16M
set hive.groupby.skewindata = true # group by 操作是否支持倾斜的数据,默认false
set hive.map.aggr = true # 决定是否可以在 Map 端进行聚合操作 默认为true
set mapreduce.input.fileinputformat.split.minsize.per.node = 256000000