Hive性能调优(一)----文件存储格式及压缩方式选择

  • 合理使用文件存储格式

    建表时,尽量使用 orc、parquet 这些列式存储格式,因为列式存储的表,每一列的数据在物理上是存储在一起的,Hive查询时会只遍历需要列数据,大大减少处理的数据量。

  • 采用合适的文件压缩

    Hive最终是转为 MapReduce 程序来执行的,而 MapReduce 的性能瓶颈在于网络 IO 和 磁盘 IO,要解决性能瓶颈,最主要的是减少数据量,对数据进行压缩是个好的方式。压缩虽然是减少了数据量,但是压缩过程要消耗CPU的,但是在Hadoop中, 往往性能瓶颈不在于CPU,CPU压力并不大,所以压缩充分利用了比较空闲的CPU。

    常见文件压缩格式:

压缩格式 是否可拆分 是否自带 压缩率 速度 是否hadoop自带
gzip 很高 比较快
lzo 比较高 很快 否,需要安装
snappy 比较高 很快 否,需要安装
bzip2 最高

    各个压缩方式对应的类:

压缩格式
gzip org.apache.hadoop.io.compress.GzipCodec
lzo org.apache.hadoop.io.compress.lzo.LzoCodec
snappy org.apache.hadoop.io.compress.SnappyCodec
bzip2 org.apache.hadoop.io.compress.BZip2Codec
zlib org.apache.hadoop.io.compress.DefaultCodec
lz4 org.apache.hadoop.io.compress.Lz4Codec

    压缩方式的选择:

      压缩比率

      压缩解压缩速度

      是否支持Split

    压缩使用:

      Job 输出文件按照 block 以 GZip 的方式进行压缩:

    set mapreduce.output.fileoutputformat.compress=true // 默认值是 false

    set mapreduce.output.fileoutputformat.compress.type=BLOCK // 默认值是 Record

    set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec // 默认值是 org.apache.hadoop.io.compress.DefaultCodec

       Map 输出结果也以 Gzip 进行压缩:

    set mapred.map.output.compress=true

    set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec // 默认值是 org.apache.hadoop.io.compress.DefaultCodec 

       对 Hive 输出结果和中间都进行压缩:

    set hive.exec.compress.output=true // 默认值是 false,不压缩

    set hive.exec.compress.intermediate=true // 默认值是 false,为 true 时 MR 设置的压缩才启用