FAQ - which exceeds 100000. Killing the job

问题描述/异常栈

[Fatal Error] total number of created files now is 100576, which exceeds 100000. Killing the job

发现版本

HIVE 2.1.1

解决方案

1、使用 distributed by 分区字段,可以使用 DISTRIBUTE BY rand()将数据随机分配给Reduce(使用示例见下文截图)
2、如果Reduce数量太多,则减少reduce的数量
3、进行一些参数设置
设置 mapper输入参数:
set mapred.max.split.size=256000000; #每个Map最大输入大小
set mapred.min.split.size.per.node=100000000;
设置 mapreduce输出参数
hive.merge.mapfiles= true #设置 map输出和reduce输出进行合并的相关参数
hive.merge.mapredfiles= true 设置reduce端输出进行合并,默认为false
hive.merge.size.per.task= 256 *1000 * 1000 设置合并文件的大小
hive.merge.smallfiles.avgsize=16000000 输出文件的平均大小小于该值时,启动一个独立的MapReduce任务进行文件merge

FAQ - which exceeds 100000. Killing the job - 图1

问题原因

Hive对文件创建的总数是有限制的,这个限制取决于参数:hive.exec.max.created.files,默认值是100000
这里有情况,就是如果你是往分区表里面插入数据。如果现在你的表有60个分区,然后你总共有2000map或者reduce,在运行的时候,每一个mapper或者reduce都会创建60个文件,对应着每一个分区,所以60*2000> 120000,就会报错:exceeds 100000.Killing the job

FAQ - which exceeds 100000. Killing the job - 图2


作者:xxx