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 的方式进行压缩:
1 2 3 4 5 | 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 进行压缩:
1 2 3 | 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 输出结果和中间都进行压缩:
1 2 3 | set hive. exec .compress. output = true // 默认值是 false ,不压缩 set hive. exec .compress.intermediate= true // 默认值是 false ,为 true 时 MR 设置的压缩才启用 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步