spark写出常见压缩格式设置
1.Hadoop之常見壓縮格式以及性能對比
1.壓縮的好處和壞處
好處
減少存儲磁盤空間
降低IO(網絡的IO和磁盤的IO)
加快數據在磁盤和網絡中的傳輸速度,從而提高系統的處理速度
壞處
由于使用數據時,需要先將數據解壓,加重CPU負荷。而且壓縮的越狠,耗費的時間越多。
2.壓縮格式
| 壓縮格式 | 工具 | 算法 | 擴展名 | 是否支持分割 | Hadoop編碼/解碼器 | hadoop自帶 |
| DEFLATE | N/A | DEFLATE | .deflate | No | org.apache.hadoop.io.compress.DefalutCodec | 是 |
| gzip | gzip | DEFLATE | .gz | No | org.apache.hadoop.io.compress.GzipCodec | 是 |
| bzip2 | bzip2 | bzip2 | .bz2 | yes | org.apache.hadoop.io.compress.Bzip2Codec | 是 |
| LZO | Lzop | LZO | .lzo | yes(建索引) | com.hadoop.compression.lzo.LzoCodec | 是 |
| LZ4 | N/A | LZ4 | .lz4 | No | org.apache.hadoop.io.compress.Lz4Codec | 否 |
| Snappy | N/A | Snappy | .snappy | No | org.apache.hadoop.io.compress.SnappyCodec | 否 |
壓縮比:Snappy<LZ4<LZO<GZIP<BZIP2
3.優缺點
a. gzip
優點:壓縮比在四種壓縮方式中較高;hadoop本身支持,在應用中處理gzip格式的文件就和直接處理文本一樣;有hadoop native庫;大部分linux系統都自帶gzip命令,使用方便
缺點:不支持split
b. lzo
優點:壓縮/解壓速度也比較快,合理的壓縮率;支持split,是hadoop中最流行的壓縮格式;支持hadoop native庫;需要在linux系統下自行安裝lzop命令,使用方便
缺點:壓縮率比gzip要低;hadoop本身不支持,需要安裝;lzo雖然支持split,但需要對lzo文件建索引,否則hadoop也是會把lzo文件看成一個普通文件(為了支持split需要建索引,需要指定inputformat為lzo格式)
c. snappy
優點:壓縮速度快;支持hadoop native庫
缺點:不支持split;壓縮比低;hadoop本身不支持,需要安裝;linux系統下沒有對應的命令
d. bzip2
優點:支持split;具有很高的壓縮率,比gzip壓縮率都高;hadoop本身支持,但不支持native;在linux系統下自帶bzip2命令,使用方便
缺點:壓縮/解壓速度慢;不支持native
4.spark輸出壓縮文件
1)RDD輸出壓縮文件
import org.apache.hadoop.io.compress.BZip2Codec
// bzip2 壓縮率最高,壓縮解壓速度較慢,支持split。
rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])
import org.apache.hadoop.io.compress.SnappyCodec
//snappy json文本壓縮率 38.2%,壓縮和解壓縮時間短。
rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])
import org.apache.hadoop.io.compress.GzipCodec
//gzip 壓縮率高,壓縮和解壓速度較快,不支持split,如果不對文件大小進行控制,下次分析可能可能會造成效率低下的問題。
rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])
2)spark sql 輸出壓縮文件
parquet文件壓縮
parquet為文件提供了列式存儲,查詢時只會取出需要的字段和分區,對IO性能的提升非常大,同時占用空間較小,即使是parquet的uncompressed存儲方式也比普通的文本要小的多。
sparkConf.set("spark.sql.parquet.compression.codec","gzip")
dataset.write().parquet("path");
parquet存儲提供了:lzo gzip snappy uncompressed 四種方式。
3) spark sql 的csv文件壓縮設置
df.write.mode(SaveMode.Overwrite).option("compression", "gzip").csv(s"${path}")
總結
以上是生活随笔為你收集整理的spark写出常见压缩格式设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: secureCRT自动断开的解决方法
- 下一篇: HTML转义字符大全