hdfs中存储的文件一般都是多副本存储,对文件进行压缩,不仅可以节约大量空间,适当的存储格式还能对读取性能有非常大的提升。
文本文件压缩
bzip2
压缩率最高,压缩解压速度较慢,支持split。
import org.apache.hadoop.io.compress.BZip2Codec
rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])
snappy
json文本压缩率 38.2%,压缩和解压缩时间短。
import org.apache.hadoop.io.compress.SnappyCodec
rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])
gzip
压缩率高,压缩和解压速度较快,不支持split,如果不对文件大小进行控制,下次分析可能可能会造成效率低下的问题。
json文本压缩率23.5%,适合使用率低,长期存储的文件。
import org.apache.hadoop.io.compress.GzipCodec
rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])
parquet文件压缩
parquet为文件提供了列式存储,查询时只会取出需要的字段和分区,对IO性能的提升非常大,同时占用空间较小,即使是parquet的uncompressed存储方式也比普通的文本要小的多。
spark中通过sqlContext.write.parquet("path")
对parquet文件进行存储,默认使用的gzip压缩方式。
可以通过spark.sql.parquet.compression.codec
参数或是在代码中进行修改。
parquet存储提供了lzo,gzip,snappy,uncompressed四种方式。
来源:CSDN
作者:breeze_lsw
链接:https://blog.csdn.net/lsshlsw/article/details/51992569