hive map数的控制

2022-07-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压缩文件不支持分片
上一篇 下一篇

猜你喜欢

热点阅读