美文网首页
Hive map内存溢出

Hive map内存溢出

作者: 一个神经质的工程师 | 来源:发表于2019-12-27 11:29 被阅读0次

    报错现象:

    map阶段内存溢出

    解决:增加map个数,设置参数set mapreduce.input.fileinputformat.split.maxsize=50000000;

    优化目标:每个map和reduce需要处理适量的数据

    从HDFS读取数据,第一步需要决定产品多少map,即并行度

    影响map的因素:输入的文件的大小

    对于map,默认的hive.input.format是org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

    相关的参数控制mapred.min.split.size.per.node,mapred.min.split.size.per.rack,mapred.max.split.size

    a、根据输入目录下的每个文件,根据mapred.max.split.size分成多个split(一个split是一个map的输入),此文件剩下的长度如果大于mapred.min.split.size.per.node, 则生成一个split, 否则先暂时保留.

    b、现在剩下的都是一些长度效短的碎片,把每个rack下碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 最后如果剩下的碎片比mapred.min.split.size.per.rack大, 就合并成一个split, 否则暂时保留.

    c、把不同rack下的碎片合并, 只要长度超过mapred.max.split.size就合并成一个split, 剩下的碎片无论长度, 合并成一个split.

    减少map,则只需要调大mapred.max.split.size

    或者

    Hadoop中的参数:可以通过控制文件的数量控制mapper数量

        mapreduce.input.fileinputformat.split.minsize(default:0),小于这个值会合并

        mapreduce.input.fileinputformat.split.maxsize 大于这个值会切分

    案例中通过减少mapreduce.input.fileinputformat.split.maxsize来增加文件数,从而增加map数量

    reduce阶段

    reduce数量由以下三个参数决定,

    mapred.reduce.tasks(强制指定reduce的任务数量)

    hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)

    hive.exec.reducers.max(每个任务最大的reduce数,默认为999)

    转载:

    https://www.2cto.com/net/201803/731907.html

    https://www.cnblogs.com/felixzh/p/8604188.html

    相关文章

      网友评论

          本文标题:Hive map内存溢出

          本文链接:https://www.haomeiwen.com/subject/kvhloctx.html