深圳市盐田区住房建设局网站,如何将自己做的网站传到网上,wordpress外贸商城,代写网站hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区
结论
在非严格模式下不开启动态分区的功能的参数#xff08;配置如下#xff09;#xff0c;同样也能进行动态分区数据写入#xff0c;目测原因是不严格检查SQL中是否指定分区或者…hive 动态分区-动态分区数量太多也会导致效率下降只设置非严格模式也能执行动态分区
结论
在非严格模式下不开启动态分区的功能的参数配置如下同样也能进行动态分区数据写入目测原因是不严格检查SQL中是否指定分区或者多分区。动态分区数量太多也会导致效率下降合理设置分区数可以提高任务执行效率。
1开启动态分区功能默认true开启
hive.exec.dynamic.partitionfalse
2设置为非严格模式动态分区的模式默认strict表示必须指定至少一个分区为静态分区nonstrict模式表示允许所有的分区字段都可以使用动态分区。
hive.exec.dynamic.partition.modenonstrict1. 相关参数配置以及解释
1开启动态分区功能默认true开启
hive.exec.dynamic.partitiontrue
2设置为非严格模式动态分区的模式默认strict表示必须指定至少一个分区为静态分区nonstrict模式表示允许所有的分区字段都可以使用动态分区。
hive.exec.dynamic.partition.modenonstrict
3在所有执行MR的节点上最大一共可以创建多少个动态分区。默认1000
hive.exec.max.dynamic.partitions1000
4在每个执行MR的节点上最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如源数据中包含了一年的数据即day字段有365个值那么该参数就需要设置成大于365如果使用默认值100则会报错。
hive.exec.max.dynamic.partitions.pernode100
5整个MR Job中最大可以创建多少个HDFS文件。默认100000
hive.exec.max.created.files100000
6当有空分区生成时是否抛出异常。一般不需要设置。默认false
hive.error.on.empty.partitionfalse2. 生产案例经验
背景
目前所使用的集群规模3000c20TB3PB计算引擎spark代码spark sqlshell提交
数据量规模是TB级别一般表数据量都在百亿上下
实际数据包含近7年的查询数据数据量在去重之前有数百亿现在需要进行性能优化对一张DWS原每天全量计算的表优化为增量计算那么初次就需要考虑全量动态分区日调度增量动态分区。
难点
数据量规模大历史数据周期长多个数据来源
方案
1.按天进行动态分区所有的历史数据和每天的增量直接进入日分区初次直接进行全量计算全部数据进入各个日分区
2.历史按年或者按月进行分区存储每日增量进入日分区
3.历史数据直接合并为一个分区增量进行日分区
方案分析
方案1:经过测试200excutors*2c4Tb耗时巨久不管shuffle.partitions设置多少都没用。进入日志观察发现计算时间很短但是落盘写数据时间巨长经过分析是七年数据大概产生2500左右分区数量 * shuffle.partitions 分区数 * 每个分区产生几千个文件导致落盘写入时间耗时太长。最终放弃方案1
方案2未经过测试直接选择方案3。出方案2的原因是如果直接下游指标需要按月或者按年统计那么比较合适如果直接下游指标计算不涉及时间年月维度可以选方案3。
方案3最终采用方案将初次执行时当前日期-1的所有历史数据写入一个指定分区建议指定的分区数据值和设计的分区数据类型保持一致比如时间年月日方便后续的比较和筛选。增量计算每天数据写入新的分区在增量计算时选择筛选最近两个周期的数据天防止数据上报不及时的一些情况具体可以根据具体业务调整这个筛选的周期。当前日期-1的这天的数据在全量执行后再启动一次增量。
经过测试全量在1个小时内完成执行增量在半个小时内完成执行。