SQL不规范引起数据超出Hadoop最大数据块问题

一、问题描述

  客户现场报错数据块已经到达hadoop设置的最大限制:File has reached the limit on maximum number of blocks (dfs.namenode.fs-limits.max-blocks-per-file): 10000 >= 10000。

进到CDH集群,在hdfs的配置中看看dfs.namenode.fs-limits.max-blocks-per-file   为10000;以为这个参数可以设置,最后进到hadoop的源码中,发现hadoop2.x以后把这个参数写死了,也是为了防止单个文件分块过多引起内部通信问题。

二、问题原因

  这个参数其实是hadoop经过早期优化得出来的一个比较合理的参数,如果是数据块超出了这个值,那可能是要看下自己sql写的有没有问题了。经过排查发现,确实是一个sql写的有问题,引起了“笛卡尔积”。具体sql如下

 三、解决方式

既然发现了是sql的原因,问题就好解决,需要重写sql,加上限制条件。

原文地址:https://www.cnblogs.com/chhyan-dream/p/15743907.html