Hive sql执行文件合并配置参数

HIVE自动合并输出的小文件的主要优化手段为:HIVE将会启动一个独立的map-reduce任务进行输出文件的merge。
set hive.merge.mapfiles = true:
在只有map的作业结束时合并小文件,
set hive.merge.mapredfiles = true:
在Map-Reduce的任务结束时合并小文件,默认为False;
set hive.merge.size.per.task = 256000000;
合并后每个文件的大小,默认256M
set hive.merge.smallfiles.avgsize=16000000;
当输出文件的平均大小小于16M时合并。
set hive.merge.orcfile.stripe.level=false;
当设置为true,orc文件进行stripe Level级别的合并,当设置为false,orc文件进行文件级别的合并。

Hive中,为了有效合并文件,可以通过调整一系列参数来优化MapReduce任务的输出。这些参数主要控制在Map-only或Map-Reduce任务结束后是否执行文件合并,并且可以指定合并后的文件大小以及触发合并的阈值。 ### 参数设置 #### 输入合并 如果希望在输入阶段就进行文件合并操作,可以启用`CombineHiveInputFormat`以减少Map任务的数量。通过以下参数控制不同层级上的文件合并: - `mapred.max.split.size`:决定单个节点上合并文件的最大大小,较大的值会减少Map任务数量。 - `mapred.min.split.size.per.node`:控制同一DataNode上多个小文件是否需要合并。 - `mapred.min.split.size.per.rack`:控制跨机架(Rack)的文件是否需要合并 [^2]。 #### 输出合并 Hive允许在任务结束后自动合并输出的小文件,这可以通过如下参数配置: - `hive.merge.mapfiles`:当设置为`true`时,在Map-only任务结束后合并输出文件,默认为`true`。 - `hive.merge.mapredfiles`:当设置为`true`时,在Map-Reduce任务结束后合并输出文件,默认为`false` [^3]。 - `hive.merge.size.per.task`:定义每个合并文件的目标大小,默认是`256*1000*1000`字节(约256MB),可以根据实际需求调整 [^2]。 - `hive.merge.smallfiles.avgsize`:当输出文件的平均大小小于该值时,Hive将启动一个额外的Map-Reduce任务来进行文件合并,默认是`16*1000*1000`字节(约16MB) [^3]。 例如,可以在HiveQL脚本开头添加以下语句来配置这些参数: ```sql SET hive.merge.mapfiles=true; SET hive.merge.mapredfiles=true; SET hive.merge.size.per.task=256000000; -- 256MB SET hive.merge.smallfiles.avgsize=100000000; -- 100MB ``` 这样配置意味着: - 在Map-only和Map-Reduce任务结束后都会尝试合并文件; - 每个最终生成的文件大小目标为256MB; - 如果输出文件的平均大小小于100MB,则触发一次额外的合并任务。 ### 注意事项 - 这些参数可能会影响性能,因此建议根据集群的具体情况和数据量进行适当调整。 - 可以结合`CombineHiveInputFormat`与上述输出合并参数一起使用,以获得更佳的小文件处理效果 。 - 实际应用中,还应考虑存储空间、查询效率等因素,合理规划文件大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值