hive on spark 合并小文件

最近在做用户画像相关的数据开发,在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之后,发现重新打散之后,块文件大小很均匀

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 关于hive on spark的distribute by和group by使用: distribute by是在map端对数据进行分区,可以将数据按照指定的列进行分区,使得相同的key值被分到同一个分区中,从而提高reduce端的并行度。而group by是在reduce端对数据进行分组,将相同key值的数据聚合在一起,进行统计计算。 小文件合并问题: 在hive on spark中,由于spark是基于Hadoop的,因此也存在小文件合并的问题。小文件会导致HDFS的NameNode负载过重,影响系统性能。可以通过设置合适的HDFS块大小、使用Hadoop的SequenceFile格式、使用Hive合并文件机制等方式来解决小文件合并问题。 ### 回答2: Hive on Spark是将HiveSpark引擎结合使用的一种解决方案,可以利用Spark的高性能计算能力加速大规模数据处理。在Hive on Spark中,分布式查询是实现高效计算的关键,而其中distribute by和group by语句的使用是非常重要的。 distribute by和group by的区别在于:distribute by指定了分区的方式,将数据按照指定的字段进行分区,而group by则是根据指定的字段对数据进行分组。因此,distribute by语句的执行是在Map阶段完成的,而group by语句的执行是在Reduce阶段完成的。 在使用distribute by和group by时,需要根据数据量和计算需求来选择合适的字段作为分区和分组的标准。一般来说,选择具有高可靠性的字段作为分区和分组的标准,可以避免数据倾斜和计算异常的情况。 另外,在使用Hive on Spark时,小文件合并问题也需要注意。由于Hadoop文件系统的存储管理机制,大量小文件会占用大量的存储空间,影响数据的查询和计算性能。因此,需要对小文件进行合并处理,合并成较大的文件,以提高数据访问效率。 在Hive on Spark中,可以使用Hadoop的工具对小文件进行合并,例如可以使用Hadoop的SequenceFile格式将多个小文件合并成一个大文件,或者使用Hive提供的Merge语句对具有相似表结构的小文件进行合并。另外,也可以通过调整Hadoop的Block Size参数和SequenceFile中的Record Size参数来控制文件大小和数据压缩比,进一步提高数据存储和访问的效率。 总之,distribute by和group by语句的使用和小文件合并问题在Hive on Spark中都是非常重要的,合理选择分区和分组的标准和对小文件进行合并处理,可以有效提高查询和计算性能,从而实现大规模数据处理的高效率和高可靠性。 ### 回答3: Hive on Spark是一种在Spark上运行的Hive查询引擎,它使用了Spark的分布式计算能力,实现了高性能的数据处理和分析。在使用Hive on Spark时,distribute by和group by是两个常用的关键词,用于实现数据的分组聚合和排序等操作。 Distribute by和Group by的使用 一般情况下,在使用distribute by和group by时,都需要指定一个列名作为排序的关键字。其中,distribute by用于将数据按照指定列进行分发,以便进行并行处理;group by则用于将相同的键值聚合在一起,计算聚合函数的结果。 在使用distribute by时,需要注意数据分发的均衡性,避免数据倾斜导致某些节点的处理压力过大。可以通过调整数据分区的大小或者使用多个distribute by键值来解决这个问题。 在使用group by时,需要注意聚合函数的选择和性能优化。一般建议尽量选择简单的聚合函数,避免复杂的计算逻辑导致性能下降。同时,可以根据数据的分布情况和聚合结果的大小,选择合适的分组数和数据分区大小,以提高查询效率。 小文件合并问题 在使用Hive on Spark时,小文件合并是一个比较常见的性能优化问题。由于HadoopSpark都是针对大文件而设计的分布式计算框架,当遇到大量小文件时,会造成系统的性能下降和资源浪费。 一般来说,可以采用两种方式来解决小文件合并问题。一种是使用Hadoop的SequenceFile和CombineFileInputFormat等机制来优化小文件的读写性能,把多个小文件合并成一个大文件进行处理。另一种是使用Hive on Spark中提供的压缩和归档工具来实现小文件合并和压缩,减少存储空间和读写延迟。 总的来说,Hive on Spark作为一种高性能的数据处理引擎,可以通过合理使用distribute by和group by等功能,以及解决小文件合并问题,提高数据分析和处理的效率和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值