最近在做用户画像相关的数据开发,在hive中做行转列的过程中,每个标签即tag在写入hive表时,有大量的小文件生成,通过增加参数解决了小文件过多的问题,但是在完成特殊要求–(因后续需要同步ck,ck也有个为解决的问题,超过200M可能会丢失数据,故需要将hive在行转列的时候,合并的小文件在200M一下,方便后续ck数据同步)时,又产生了新的问题,通过hive合并小文件的参数,总是有些tag的数据生成的文件在200M以上;最终使用hive sql

 repartition的方式 ,重新打散数据最终实现了数据文件200M一下的目标;

1.hive on spark 中,开始以为是通过spark合并小文件的参数,结果spark的相关参数不熟悉,也不生效,还是一堆小文件产生

2.增加hive合并小文件的相关参数

SET hive.exec.dynamic.partition=true;            
set hive.stats.column.autogather=false;
set hive.exec.dynamic.partition.mode=nonstrict;
SET hive.merge.mapfiles=true;
SET hive.merge.sparkfiles=true;
SET hive.merge.size.per.task=180000000;
SET hive.merge.smallfiles.avgsize=180000000;
SET hive.exec.max.dynamic.partitions=3000;
SET hive.exec.max.dynamic.partitions.pernode=100;
set spark.executor.instances=8;
set spark.executor.memory=2g;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

特别需要指出的是,hive.merge.sparkfiles=true; 增加此参数,才会在hive on spark模式中进行小文件合并。

3.增加小文件后,解决个别tag数据扔不满足200M以下的情况

了解相关 hive sql repartition 的使用,在语句中增加 cluster by ,即重新打散数据

(distribute by 个别tag报错,原因待定)

关于hive on spark 合并小文件参考

关于较大规模hadoop集群的小文件问题-腾讯云开发者社区-腾讯云
【Hive任务优化】—— 小文件合并相关参数_hive.merge.sparkfiles-CSDN博客

关于 hive sql repartition 参考

Hive SORT BY vs ORDER BY vs DISTRIBUTE BY vs CLUSTER BY-腾讯云开发者社区-腾讯云

加cluster by之前

加cluster by之后,发现重新打散之后,块文件大小很均匀

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。