hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区

这篇具有很好参考价值的文章主要介绍了hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区

结论

  1. 在非严格模式下不开启动态分区的功能的参数(配置如下),同样也能进行动态分区数据写入,目测原因是不严格检查SQL中是否指定分区或者多分区。
  2. 动态分区数量太多也会导致效率下降,合理设置分区数,可以提高任务执行效率。
1)开启动态分区功能(默认true,开启)
hive.exec.dynamic.partition=false2)设置为非严格模式(动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict

1. 相关参数配置以及解释

(1)开启动态分区功能(默认true,开启)
hive.exec.dynamic.partition=true
(2)设置为非严格模式(动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。)
hive.exec.dynamic.partition.mode=nonstrict
(3)在所有执行MR的节点上,最大一共可以创建多少个动态分区。默认1000
hive.exec.max.dynamic.partitions=1000
(4)在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。
hive.exec.max.dynamic.partitions.pernode=100
(5)整个MR Job中,最大可以创建多少个HDFS文件。默认100000
hive.exec.max.created.files=100000
(6)当有空分区生成时,是否抛出异常。一般不需要设置。默认false
hive.error.on.empty.partition=false

2. 生产案例经验

背景

目前所使用的集群规模3000c+20TB+3PB,计算引擎spark,代码spark sql,shell提交

数据量规模是TB级别,一般表数据量都在百亿上下

实际数据包含近7年的查询数据,数据量在去重之前有数百亿,现在需要进行性能优化,对一张DWS原每天全量计算的表,优化为增量计算,那么初次就需要考虑全量动态分区+日调度增量动态分区

难点:

  1. 数据量规模大
  2. 历史数据周期长
  3. 多个数据来源

方案:

1.按天进行动态分区:所有的历史数据和每天的增量直接进入日分区,初次直接进行全量计算,全部数据进入各个日分区

2.历史按年或者按月进行分区存储,每日增量进入日分区

3.历史数据直接合并为一个分区,增量进行日分区

方案分析:

方案1:经过测试200excutors*2c+4Tb耗时巨久,不管shuffle.partitions设置多少都没用。进入日志观察发现计算时间很短,但是落盘写数据时间巨长,经过分析是七年数据大概产生2500左右分区数量 * shuffle.partitions 分区数 * 每个分区产生几千个文件,导致落盘写入时间耗时太长。最终放弃方案1

方案2:未经过测试,直接选择方案3。出方案2的原因是,如果直接下游指标需要按月或者按年统计那么比较合适,如果直接下游指标计算不涉及时间年月维度,可以选方案3。

方案3:最终采用方案,将初次执行时当前日期-1的所有历史数据写入一个指定分区(建议指定的分区数据值和设计的分区数据类型保持一致,比如:时间,年月日,方便后续的比较和筛选)。增量计算每天数据写入新的分区,在增量计算时,选择筛选最近两个周期的数据(天),防止数据上报不及时的一些情况,具体可以根据具体业务调整这个筛选的周期。当前日期-1的这天的数据在全量执行后,再启动一次增量。

经过测试全量在1个小时内完成执行,增量在半个小时内完成执行。文章来源地址https://www.toymoban.com/news/detail-670002.html

到了这里,关于hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive的动态分区与静态分区(区别及详解)

    静态分区与动态分区的区别: 1、静态分区 2、动态分区 静态分区与动态分区的区别: 静态分区是先把分区表创好,然后手动把数据导入到对应的分区里面去。 静态分区实在 编译期间指定分区名 。 静态分区支持load、insert两种插入方式。 静态分区是用于分区少,分区名可以

    2023年04月09日
    浏览(42)
  • 一百一十一、Hive——从HDFS到Hive的数据导入(静态分区、动态分区)

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹, Hive 中的分区就是分目录 ,把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 where 子句中的表达式选择查询所需要的指定的分区,这样的查询效率 会提高很多,所以我们需要把常常用在where 语句中

    2024年02月12日
    浏览(58)
  • educoder中Hive -- 索引和动态分区调整

    第1关:Hive -- 索引 第2关:Hive -- 动态分区调整

    2024年02月04日
    浏览(36)
  • Hive 分区表 (Partitioned Tables) 『 创建分区表 | CRUD分区 | 修复分区 | 数据导入(静态分区、动态分区) | 查询数据/表结构』

    条件:假如现有一个角色表 t_all_hero ,该表中有6个清洗干净的互不干扰的数据文件:射手、坦克、战士、法师、刺客、辅助 要求:查找出名字为射手且生命值大于6000的角色人数 惯性解决方法:按照MySQL思维很容易想到 问:如何提高效率?这样虽然能够解决问题,但是由于要

    2024年02月04日
    浏览(79)
  • Hive动态分区和分桶使用场景和使用方法

            按照数据表的某列或某些列分为多个分区,分区从形式上可以理解为文件夹,比如我们要收集某个大型 网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表 的内容巨大,在查询时进行全表扫描耗费的资源非常多。那

    2024年02月04日
    浏览(51)
  • hive插入动态分区数据时,return code 2报错解决

    目录 一、完整报错 二、原因         2.1、动态分区问题         2.2、语句占用内存问题 三、其他 一、完整报错         Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 二、原因         2.1、动态分区问题         大概

    2024年02月08日
    浏览(45)
  • vue数据太多导致页面卡顿解决办法

    需求:查询统计表格页面操作卡顿迟缓 原因:查询一天内某个接口每分钟调用量,由于一次返回几百列数据(60*24),并且不做分页,加载过多数据之后,造成页面卡顿,操作延迟 解决办法: 1.和后端沟通进行页面分页加载(本次需求列数过多,不适用) 2.使用umy-ui库中的表

    2024年02月08日
    浏览(33)
  • 记一次swoole连接数太多导致的错误

    原先就有点担心这个项目正式上线会出现各种问题,所以刚上线就赶紧查看日志 果然,频繁出现错误: WARNING Server::accept_connection(): accept() failed, Error: Too many open files[24] 这个错误通常是由于操作系统限制了进程能够打开的文件句柄数量,导致当前进程无法打开更多的文件,从

    2024年02月02日
    浏览(48)
  • 一百八十六、大数据离线数仓完整流程——步骤五、在Hive的DWS层建动态分区表并动态加载数据

    经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 1、Hive的DWS层建库建表语句 --如果不存在则创建hurys_dc_dws数据库 create database if not exists hurys_dc_dws; --使用hurys_

    2024年02月07日
    浏览(48)
  • 【Hive-Partition】Hive添加分区及修改分区location

    当我们在 Hive 中创建外表时,需要映射 HDFS 路径,数据落入到 HDFS 上时,我们在 Hive 中查询时会发现 HDFS中有数据,Hive 没有数据,那是因为我们在 HDFS 上的数据还没有成功修复至 Hive中,需要进行分区的修复(或者称之为添加分区) 注意 :如果数据量较大,或分区数量较多

    2024年02月13日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包