hadoop之數據壓縮與數據格式

* 注:本文原創,轉載請註明出處,本人保留對未註明出處行爲的責任追究。html

a.數據壓縮數據庫

優勢: 1.節省本地空間 2.節省帶寬apache

缺點: 花時間app

1.MR中容許進行數據壓縮的地方有三個:oop

1)input起點  2)map處理以後  3)reduce處理以後進行存儲性能

2.壓縮格式spa

常見的壓縮計數有bzip二、gzip、lzo、snappy.它們之間的性能比較以下:.net

壓縮比 : bzip2>gzip>lzo = snappy ,bzip2最節省空間3d

解壓速度 :lzo = snappy > gzip > bzip2 , lzo解壓速度是最快的code

另外Google研發的snappy的壓縮格式,嵌入在hadoop中,由於其可靠性和性能的均衡性,很是受到你們歡迎。

snappy壓縮格式的性能與lzo差很少,都是屬於壓縮解壓塊,可是壓縮比高的類型。如下是它們的一些詳細參數:

  壓縮比 壓縮速率 解壓速率
gzip/deflate 13.4% 21MB/s 118MB/s
bzip2  13.2% 2.4MB/s 9.5MB/s
lzo 20.5% 135MB/s 410MB/s
snappy 22.2% 172MB/s 409MB/s

 

 

 

 

(本表數據來源於博客: https://blog.csdn.net/zhouyan8603/article/details/82954459 , 感謝玉羽凌風!)

 

3.mr中如何使用數據壓縮?

剛纔談到了三個能夠進行壓縮的地方,這裏分別說明:

1)輸入時,hadoop依據文件格式進行自動識別並解壓,這個是自動的,不須要關心太多

2)在map以後有一個能夠壓縮的點,須要配置如下兩個參數進行壓縮:

mapreduce.map.output.compress  - false/true  - 在 map處理後是否啓用壓縮

mapreduce.map.output.compress.codec – 選擇編解碼器

3)在reduce以後有一個能夠壓縮的點,須要配置如下三個參數進行壓縮:

mapreduce.output.fileoutputformat.compress – false/true – 在 reduce後是否壓縮

mapreduce.output.fileoutputformat.compress.codc – 選擇編解碼器

mapreduce.output.fileoutputformat.compress.type – RECORD/BLOCK/NONE  其中RECORD是針對記錄的壓縮,BLOCK是針對塊的壓縮

其中使用RECORD壓縮率比較低,所以通常使用BLOCK。

 

**注:hadoop支持的編解碼器 - 配置中須要用到:

Zlib → org.apache.hadoop.io.compress.Default.Codec

    其中Zlib是MR使用的默認壓縮格式,當指定上面的bool值爲true且沒有指定codec的狀況下,默認使用這個Codec

Gzip → org.apache.hadoop.io.compress.GzipCodec

Bzip2 → org.apache.hadoop.io.compress.BZip2Codec

Lzo → com.hadoop.compression.lzo.LzoCodec

Lz4 → org.apache.hadoop.io.coompress.Lz4Codec

Snappy → org.apache.hadoop.io.compress.SnappyCodec

其餘關於壓縮問題的補充: https://www.cnblogs.com/ggjucheng/archive/2012/04/22/2465580.html 

4.hive中如何使用數據壓縮?

(注:本圖引自北風網)

1)Input處的數據壓縮,須要在建立表的時候指定 

2)map以後的數據壓縮須要設置三個參數:

hive.exec.compress.intermediate - true 

mapred.map.output.compress.codec – 選擇編解碼器

mapred.map.output.compress.codec - RECORD/BLOCK

3)reduce以後的數據壓縮須要設置三個參數:

hive.exec.compress.output - true

mapred.output.compression.codec - 編解壓器

mapred.output.compression.type - RECORD/BLOCK

 

b.數據存儲格式

在建立Hive表的時候,咱們能夠用STORED AS關鍵字來指定數據存儲格式。

Hadoop支持的常見的存儲格式有如下幾種:

1.hadoop支持的文件存儲格式,比較典型的有(須要記住):

  * 按行存儲

    SEQUENCEFILE TEXTFILE

  * 按列存儲

    RCFILE ORC PARQUET

2.行式存儲與列式存儲的比較

1)列式存儲每一列單獨摘出來存放,行式存儲按行存放。

這就致使行式存儲進行查詢時,須要把每一行完整的讀進去。而列式存儲只須要找到指定的幾行,讀這幾行就能夠。

2)所以列式存儲不適用於更新多,整表查詢的場景,適用於只查詢不更新,而且查詢主要集中於某幾列的場景。所以其經常使用於OLAP業務。

行式存儲在只查詢幾列數據的時候,性能不如列式 存儲。可是它靈活能夠變更,適用於修改、實時交互的場景。所以經常使用於OLTP業務。

* 注意:HBase 的「列式數據庫」是指數據的邏輯模型是支持列可擴展的,而實際的存儲模型是JSON實現的行式存儲。

 

企業裏用的比較多的列式壓縮式ORC以及Apache的Parquet.

(來源:https://hortonworks.com/blog/orcfile-in-hdp-2-better-compression-better-performance/)

在上圖中,咱們能夠看到不一樣存儲格式,佔用的存儲空間不一樣。

 

3.ORCFile的存儲格式

感謝 https://www.cnblogs.com/ITtangtang/p/7677912.html !

4.Parquet存儲格式

TODO

相關文章
相關標籤/搜索