美文网首页
hive map数的控制

hive map数的控制

作者: 安申 | 来源:发表于2022-07-03 17:03 被阅读0次

    背景:最近执行一个 select count(*),发现mapreduce计算分片数很慢,且分片数的大小对不上

    1. 确定 hive 默认开启 map 任务前进行合并小文件的设置:hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
    2. 确认 hdfs 的 block 大小为: set dfs.blocksize=128M
    3. 确认建表存储格式指定为 textfile
    SET hive.exec.compress.output=true; 
    SET mapred.output.compress=true; 
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec; 
    

    再往里插入数据,hdfs上生成单文件500M的.gz文件

    1. 数据的最小分割单元,单位(B):set mapred.min.split.size=1
    2. 数据的最大分割单元,单位(B):set mapred.max.split.size=256000000
    3. 未开启 map 端合并小文件且为使用压缩表,分片规则:
    minSize=mapred.min.split.size;
    maxSize=mapred.max.split.size;
    blockSize=dfs.blocksize;
    splitSize=Math.max(minSize,Math.min(maxSize, blockSize))
    
    1. 开启 map 端合并小文件后splitSize=maxSize
    2. 涉及到压缩后,情况又有变;gzip压缩文件不支持分片
    • 如果一张表开启 map 前合并小文件,且为gzip压缩
    • 现其 hdfs 上存在10个文件,每个文件大小 500M
    • mapred.max.split.size=256000000
    • 最终 number of splits:10,因为gzip压缩不支持分片,所以一个文件不可以切分

    相关文章

      网友评论

          本文标题:hive map数的控制

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