如何在百度里做推广网站,延边州住房城乡建设局网站,新城疫最快解决的办法,网站主页设计要点目录
一、事件复盘#xff1a;
二、解决方案#xff1a;
三、讨论 一、事件复盘#xff1a;
hdfs无法创建新的文件#xff0c;xceivercount超过最大设置#xff0c;平时每个datanode只有100个左右的连接#xff0c;突然达到8000以上。
事故原因#xff0c;跨多天的…目录
一、事件复盘
二、解决方案
三、讨论 一、事件复盘
hdfs无法创建新的文件xceivercount超过最大设置平时每个datanode只有100个左右的连接突然达到8000以上。
事故原因跨多天的动态分区导致 sql如下
set hive.exec.reducers.max1000;
INSERT INTO TABLE table1 PARTITION (dt)
selectuid,times,memo,idfa,dtfrom table2 where dt20230101 and dt20231231 distribute by rand()
使用动态分区虽然非常方便但会带来很多小文件像上面这个sql动态分区是365天reduce是1000个如果计算比较复杂资源充足就会同时创建365*1000个文件。 因为是动态分区每个reduce都要写365个文件到各自的分区中因为数据by rand(把数据打散了。
二、解决方案
1、降低同时正在运行的reduce数
配置如下
mapreduce.job.running.reduce.limit200;
这样同时运行的reduce只能到200就是有一年的分区也最多创建 365*200个文件。
2、如果想限制动态分区的跨天范围也可以做如下限制
hive.exec.max.dynamic.partitions100;
也就是动态分区只能一次创建100个超过会报错。
3、其实动态分区不适合跨天的情况跨天数据重跑完全可以按天一天一天的补通过提高重跑天的次数来完成并发。
三、讨论
有人会觉得我可以增大xceivercount的数目来避免这个问题但是这个首先要重启datanode另外这个方案始终目前已经达到了8000个连接一台机器还是会导致大量的连接数存在对整个集群不是很友好还是尽量减少小文件的生成为最佳