小工具知识网

当前位置: 首页 > 行业知识 > (13)Hive调优——动态分区导致的小文件问题

行业知识

(13)Hive调优——动态分区导致的小文件问题

2026-11-05 10:46:26 来源:互联网转载

前言

�� 动态分区指的是:分区的字段值是基于查询结果自动推断出来的,核心语法就是insert+select。 具体内容指路文章:

https://blog.csdn.net/SHWAITME/article/details/136111924?spm=1001.2014.3001.5501文章浏览阅读483次,点赞15次,收藏8次。Hive的相关概念——分区表、分桶表https://blog.csdn.net/SHWAITME/article/details/136111924?spm=1001.2014.3001.5501

0 问题现象

现象:报错errorr如下:

[Error 20004]: Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. Maximum was setto: 100

原因: Hive对其创建的动态分区数量实施限制,总结而言:每个执行MR的节点能创建动态分区的个数上限为100个(默认),所有执行MR的节点能创建动态分区的个数上限为1000个动态分区(默认),相关参数如下:

#在每个执行MR的节点上,最大可以创建多少个动态分区,默认值为100hive.exec.max.dynamic.partitions.pernode=100; #在所有执行MR的节点上,最大一共可以创建多少个动态分区,默认1000hive.exec.max.dynamic.partitions=1000; #整个MR Job中,最大可以创建多少个HDFS 文件,默认100000hive.exec.max.created.files=100000;

  实际生产环境中,上述参数可以调整。

1 问题解决

解决方案一:调整动态分区数

set hive.exec.dynamic.partition=true;在每个执行MR的节点上,最大可以创建256个动态分区(默认值为100)set hive.exec.max.dynamic.partitions.pernode=256;#在所有执行MR的节点上,最大一共可以创建2048个动态分区(默认值为1000)set hive.exec.max.dynamic.partitions=2048;

    虽然配置了上述参数,但是不能保证小文件的问题彻底解决,有时候还需要设置reduce数。 mapred.reduce.tasks的计算公式可以为:

dynamic.partitions(总) / dynamic.partitions.pernode (分节点)

上一篇:服务器滑轨机柜怎么安装?

下一篇:轻松下载残梦攻略揭秘,一站式解决方案!