当前位置: 首页 > news >正文

hive动态分区导致xceivercount超限,hdfs无法创建新连接

目录

一、事件复盘:

二、解决方案:

三、讨论


一、事件复盘:

hdfs无法创建新的文件,xceivercount超过最大设置,平时每个datanode只有100个左右的连接,突然达到8000以上。

事故原因,跨多天的动态分区导致: sql如下

set hive.exec.reducers.max=1000;
INSERT INTO TABLE table1 PARTITION (dt)  
selectuid,times,memo,idfa,dtfrom table2 where dt>=20230101 and dt<=20231231 distribute by rand()

使用动态分区虽然非常方便,但会带来很多小文件,像上面这个sql,动态分区是365天,reduce是1000个,如果计算比较复杂,资源充足,就会同时创建365*1000个文件。 因为是动态分区,每个reduce都要写365个文件到各自的分区中,因为数据by rand()把数据打散了。

二、解决方案:

1、降低同时正在运行的reduce数

配置如下:

mapreduce.job.running.reduce.limit=200;

这样同时运行的reduce只能到200,就是有一年的分区,也最多创建 365*200个文件。

2、如果想限制动态分区的跨天范围,也可以做如下限制

hive.exec.max.dynamic.partitions=100;

也就是动态分区只能一次创建100个,超过会报错。

3、其实动态分区不适合跨天的情况,跨天数据重跑完全可以按天一天一天的补,通过提高重跑天的次数来完成并发。

三、讨论

有人会觉得我可以增大xceivercount的数目,来避免这个问题,但是这个首先要重启datanode,另外,这个方案始终(目前已经达到了8000个连接一台机器)还是会导致大量的连接数存在,对整个集群不是很友好,还是尽量减少小文件的生成为最佳

http://www.lryc.cn/news/402791.html

相关文章:

  • 如何识别Android init 中的缓慢操作
  • JVM:常用工具总结
  • 二染色,CF 1594D - The Number of Imposters
  • Go语言并发编程-Channel通信_2
  • Richteck立锜科技电源管理芯片简介及器件选择指南
  • Socket 简介与 Java Socket 编程示例
  • 跟着操作,解决iPhone怎么清理内存难题
  • React、Vue的password输入框组件,如何关闭自动填充?
  • HTML+JS+CSS计算练习
  • 设计模式使用场景实现示例及优缺点(行为型模式——责任链模式)
  • CSS-1_0 CSS和文档流
  • 小程序图片下载保存方法,图片源文件保存!
  • 新书速览|深入理解Hive:从基础到高阶:视频教学版
  • 钡铼Profinet、EtherCAT、Modbus、MQTT、Ethernet/IP、OPC UA分布式IO系统BL20X系列耦合器
  • Git分支合并以及分支部分合并 提交记录合并
  • IDEA关联数据库
  • 【Leetcode】14. 最长公共前缀
  • 【BUG】已解决:zipfile.BadZipFile: File is not a zip file
  • 小白新手搭建个人网盘
  • NineData全面支持PostgreSQL可视化表结构设计
  • 从系统层面认识Linux及mysql中的多表查询
  • PCB(印制电路板)制造涉及的常规设备
  • 《Windows API每日一练》10.3 公用对话框
  • C++中的引用
  • 【自学安全防御】三、企业双机热备和带宽管理的综合实验
  • 无极与有极电容的区别
  • 入坑树莓派(2)——树莓派4B与手机蓝牙通信
  • RocketMQ单结点安装/Dashboard安装
  • 【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十四章 进程基础
  • 使用LVS+NGinx+Netty实现数据接入