2.4 文本接口文件的壓縮問題
壓縮對文件存儲來說是十分有好處的,尤其對BI行業數據來說,數據文件存在著大量的空格、空值或像編碼那樣高度類同的值,已經流行多年的壓縮算法都可以大大的縮小文件的體積,下面的例子就是對接口M05027進行壓縮后的情況,可以看到即使在使用了gzip的—fast選項的情況下,壓縮率也可以達到接近90%。
etl@smdw:/backup/etl_data/data_input/data_097> gzip -l M05027*
compressed uncompressed ratio uncompressed_name
145826986 1415320527 89.7% M0502720120401010001.AVL
145535887 1418224895 89.7% M0502720120401010002.AVL
144824738 1417017114 89.8% M0502720120401010003.AVL
144975622 1417011013 89.8% M0502720120401010004.AVL
93578173 911604460 89.7% M0502720120401010005.AVL
153934971 1421769063 89.2% M0502720120401020001.AVL
154698176 1423946348 89.1% M0502720120401020002.AVL
154830925 1424391491 89.1% M0502720120401020003.AVL
68355961 627877947 89.1% M0502720120401020004.AVL
153204386 1423785446 89.2% M0502720120401030001.AVL
153521463 1425381522 89.2% M0502720120401030002.AVL
107293560 995988428 89.2% M0502720120401030003.AVL
152169932 1422314883 89.3% M0502720120401040001.AVL
152432192 1423927651 89.3% M0502720120401040002.AVL
135588314 1269189574 89.3% M0502720120401040003.AVL
2060771286 19437750362 89.4% (totals)
etl@smdw:/backup/etl_data/data_input/data_097>
M05027這個接口文件是BSS側經過先分包后傳輸給我們的(壓縮是我們自己做的):
etl@smdw:/backup/etl_data/data_input/data_097 > ls -l M05027.gz
-rw-r--r-- 1 etl gpadmin 145826986 2012-05-28 22:12 M0502720120401010001.AVL.gz
-rw-r--r-- 1 etl gpadmin 145535887 2012-05-28 22:12 M0502720120401010002.AVL.gz
-rw-r--r-- 1 etl gpadmin 144824738 2012-05-28 22:13 M0502720120401010003.AVL.gz
-rw-r--r-- 1 etl gpadmin 144975622 2012-05-28 22:13 M0502720120401010004.AVL.gz
-rw-r--r-- 1 etl gpadmin 93578173 2012-05-28 22:13 M0502720120401010005.AVL.gz
-rw-r--r-- 1 etl gpadmin 153934971 2012-05-28 22:40 M0502720120401020001.AVL.gz
-rw-r--r-- 1 etl gpadmin 154698176 2012-05-28 22:41 M0502720120401020002.AVL.gz
-rw-r--r-- 1 etl gpadmin 154830925 2012-05-28 22:41 M0502720120401020003.AVL.gz
-rw-r--r-- 1 etl gpadmin 68355961 2012-05-28 22:41 M0502720120401020004.AVL.gz
-rw-r--r-- 1 etl gpadmin 153204386 2012-05-28 23:05 M0502720120401030001.AVL.gz
-rw-r--r-- 1 etl gpadmin 153521463 2012-05-28 23:05 M0502720120401030002.AVL.gz
-rw-r--r-- 1 etl gpadmin 107293560 2012-05-28 23:05 M0502720120401030003.AVL.gz
-rw-r--r-- 1 etl gpadmin 152169932 2012-05-28 23:29 M0502720120401040001.AVL.gz
-rw-r--r-- 1 etl gpadmin 152432192 2012-05-28 23:30 M0502720120401040002.AVL.gz
-rw-r--r-- 1 etl gpadmin 135588314 2012-05-28 23:30 M0502720120401040003.AVL.gz
etl@smdw:/backup/etl_data/data_input/data_097 >
對于gz文件GP是可以直接讀取的,
例如使用可讀外部表的時候指定LOCATION為:
LOCATION ('gpfdist://smdw-1:9091/ M05027.AVL.gz')
Gpfdist內部有專門的算法來讀取gz壓縮文件,速度只是略低于未壓縮的情況;同時gpfdist也能讀取bz2類型的壓縮文件,但速度要比gz的要更慢一些;但是bz2壓縮比率更高,更加利于網路傳輸以及磁盤上的大量存儲。
要注意的是:不論是gzip還是bzip2,它們在壓縮的過程中都要消耗令人心痛的硬件資源和最寶貴的時間資源。所以無數人常常哀嘆:文件是否要壓縮這個問題確實是一個問題啊。
如果有足夠強大的主機或集群,壓縮問題也可能不是個問題?,F在的云計算就很流行把文件壓縮到云里。
現在有一種壓縮叫LZO,根據一些使用過的人介紹,它的壓縮比沒有gzip和bzip2那么高,但它的壓縮速度非??欤且环N壓縮速度快得讓人流淚的東西!目前HADOOP里面是可以直接應用的,不知道GP會不會在新的版本中加入這個應用,哎,它快得讓人流淚啊……