Parquet性能測試調(diào)優(yōu)及其優(yōu)化建議

                  Parquet性能測試調(diào)優(yōu)及其優(yōu)化建議

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的松山網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

  一、我們?yōu)槭裁催x擇parquet

  1、選擇parquet的外部因素

  (1) 我們已經(jīng)在使用spark集群,spark原本就支持parquet,并推薦其存儲格式(默認(rèn)存儲為parquet);

(2)hive支持parquet格式存儲,使用HiveSql查詢也是完全兼容的。

  

2、選擇parquet的本身原因

  (1)parquet由于每一列的成員都是同構(gòu)的,可以針對不同的數(shù)據(jù)類型使用更高效的數(shù)據(jù)壓縮算法,進(jìn)一步減小I/O。CSV格式一般不進(jìn)行壓縮,通過parquet存儲數(shù)據(jù)有效的節(jié)約了空間,不考慮備份情況下,壓縮比將近27倍(parquet有四種壓縮方式lzo、gzip、snappy、uncompressed,其中默認(rèn)gzip的壓縮方式,其壓縮率最高,壓縮解壓的速率最快);

  (2) 查詢的時候不需要掃描全部的數(shù)據(jù),而只需要讀取每次查詢涉及的列,這樣可以將I/O消耗降低N倍,另外可以保存每一列的統(tǒng)計(jì)信息(min、max、sum等);

  (3) 分區(qū)過濾與列修剪中,parquet結(jié)合spark可以實(shí)現(xiàn)分區(qū)過濾(spark sql,rdd的filter和where關(guān)鍵字),列修剪即獲取所需要的列,列數(shù)越少查詢的速率也就也快;

  1. 由于每一列的成員的同構(gòu)性,可以使用更加適合CPU pipeline的編碼方式,減小CPU的緩存失效。

     

  2. parquet的列式存儲格式的解析(僅了解)

       Parquet性能測試調(diào)優(yōu)及其優(yōu)化建議

     

    Parquet文件在磁盤上的分布情況如上圖,所有的數(shù)據(jù)被水平切分成Row group,一個Row group包含這個Row group對應(yīng)的區(qū)間內(nèi)的所有列的column chunk。一個column chunk負(fù)責(zé)存儲某一列的數(shù)據(jù),這些數(shù)據(jù)是這一列的Repetition level,Definition level和Values。一個column chunk是由Page組成的,Page是壓縮和編碼的單元,對數(shù)據(jù)模型來說是透明的。一個Parquet文件最后是Footer,存儲了文件的元數(shù)據(jù)信息和統(tǒng)計(jì)信息。Row group是數(shù)據(jù)讀寫時候的緩存單元,所以推薦設(shè)置較大的Row group從而帶來較大的并行度,當(dāng)然也需要較大的內(nèi)存空間作為代價(jià)。一般情況下推薦配置一個Row group大小1G,一個HDFS塊大小1G,一個HDFS文件只含有一個塊。

     

  3. Parquet性能測試

    (1)測試普通文件和parquet文件讀取列的性能

    ①測試環(huán)境:58.56機(jī)器、spark1.6、sts、hive等

     

    ②測試目的:驗(yàn)證spark在讀取普通文件和parquet文件性能時,在讀取相同的列的速率上面,比普通的文件效率更高,隨著列的增加讀取的效率會降低。

    ③測試原理:

    由于以下特性,使得列式存儲對于一些運(yùn)算速率相對行式存儲運(yùn)行速率更快:

    (1)由于每一列的成員都是同構(gòu)的,可以針對不同的數(shù)據(jù)類型使用更高效的數(shù)據(jù)壓縮算法,進(jìn)一步減小I/O。

    (2)由于每一列的成員的同構(gòu)性,可以使用更加適合CPU pipeline的編碼方式,減小CPU的緩存失效。

    ④測試步驟

    (1)使用C_PORT表建立hive表,同樣建立一個C_PORT_PARQUET,使用stored as parquet將表存儲為parquet格式;

    (2)編寫spark讀取語句,對列數(shù)進(jìn)行查詢讀取操作;

    (3)增加讀取列數(shù),在機(jī)器上spark提交任務(wù)運(yùn)行記錄運(yùn)行時間;

    (4)對比運(yùn)行時間,得出最終結(jié)論。

     

    ⑤測試結(jié)果

    約27005w數(shù)據(jù)   普通hive表      request表    測試結(jié)果:

查詢列數(shù)

普通hive表耗時

Parquet表耗時

1列

 2分53秒

2分42秒

5列

 3分53秒

1分27秒

20列

 5分58秒

3分56秒  

35列

 9分16秒

9分36秒  

50列

13分19秒

8分11秒

 

⑥總結(jié)結(jié)論

  通過以上五組數(shù)據(jù)列的讀取得知,隨著列數(shù)的增加,讀取的時間增加,相對于parquet和普通hive的讀取速率相近,由此在列數(shù)較多時,讀取非全部列數(shù)據(jù),建議使用parquet存儲可以增加讀取效率。

 

 

 

 

(2)測試parquet列式存儲在對多列數(shù)據(jù)進(jìn)行列式計(jì)算的效率

 

①測試環(huán)境:58.56機(jī)器、spark1.6、sts、hive等

 

②測試目的:驗(yàn)證spark在讀取普通文件和parquet文件性能時,針對某些列式運(yùn)算列式存儲的性能更佳,即讀取計(jì)算速率更快。

③測試原理:

由于以下特性,使得列式存儲對于一些運(yùn)算速率相對行式存儲運(yùn)行速率更快:

(1)查詢的時候不需要掃描全部的數(shù)據(jù),而只需要讀取每次查詢涉及的列,這樣可以將I/O消耗降低N倍,另外可以保存每一列的統(tǒng)計(jì)信息(min、max、sum等),實(shí)現(xiàn)部分的謂詞下推。

(2)由于每一列的成員都是同構(gòu)的,可以針對不同的數(shù)據(jù)類型使用更高效的數(shù)據(jù)壓縮算法,進(jìn)一步減小I/O。

(3)由于每一列的成員的同構(gòu)性,可以使用更加適合CPU pipeline的編碼方式,減小CPU的緩存失效。

④測試步驟

(1)使用C_PORT表建立hive表,同樣建立一個C_PORT_PARQUET,使用stored as parquet將表存儲為parquet格式;

(2)編寫spark讀取語句,包含列式計(jì)算的sum,avg以及max,min語句;

(3)在機(jī)器上spark提交任務(wù)運(yùn)行記錄運(yùn)行時間;

(4)對比運(yùn)行時間,得出最終結(jié)論。

 

⑤測試結(jié)果

 

第一組:

約27005w數(shù)據(jù)   普通hive表      request表    (按照每天小時分組,2個求和,3個求平均運(yùn)算)  

測試結(jié)果:

時間

普通hive表

Parquet表

耗時

  2分14秒

  1分37秒

耗時

  2分24秒

  1分08秒

耗時

  2分27秒

  1分36秒

平均耗時

2分33秒

1分27秒

 

 

 

第二組:

約27005w數(shù)據(jù)   普通hive表      request表    (按照每天小時分組,2個求和,3個求平均運(yùn)算,2求最大值,2個求最小值)

測試結(jié)果:

時間

普通hive表

Parquet表

耗時

  2分22秒

  1分38秒

耗時

  2分58秒  

  1分51秒

耗時

  2分31秒  

  1分38秒

平均耗時

2分37秒

1分42秒

 

 

 

第三組:

約27005w數(shù)據(jù)   普通hive表      request表    (按照每天小時分組,4個求和,4個求平均運(yùn)算,4求最大值,4個求最小值)  

測試結(jié)果:

時間

普通hive表

Parquet表

耗時

  3分03秒

  1分58秒

耗時

  2分45秒  

  2分03秒

耗時

  2分48秒  

  2分06秒

平均耗時

2分52秒

2分02秒  

 

 

⑥總結(jié)結(jié)論

通過三組數(shù)值的比對計(jì)算,列式存儲格式parquet針對列式計(jì)算效率比普通的行式存儲有明顯的優(yōu)勢,運(yùn)算的效率提升在30%-40%左右,效率更高,執(zhí)行效率更快。

 

  1. 測試普通文件和parquet文件的壓縮效率對比

    ①測試環(huán)境:58.56機(jī)器、spark1.6、sts、hive等

     

    ②測試目的:驗(yàn)證測試普通文件和parquet文件的壓縮效率對比,在壓縮存儲相同數(shù)據(jù)時,存儲為parquet文件壓縮效率更高,占用的空間更小。

    ③測試原理:

    (1)由于每一列的成員都是同構(gòu)的,可以針對不同的數(shù)據(jù)類型使用更高效的數(shù)據(jù)壓縮算法,進(jìn)一步減小I/O。

    (2)由于每一列的成員的同構(gòu)性,可以使用更加適合CPU pipeline的編碼方式,減小CPU的緩存失效。

    ④測試步驟

    (1)同樣的SparkSql運(yùn)行,存儲方式不同。生成相同數(shù)據(jù)量的parquet文件和普通文件存儲;

    (2)分別查看生成的Parquet文件和普通文件的大小,對比結(jié)果。

     

    ⑤測試結(jié)果

     

    結(jié)果如下圖:

     Parquet性能測試調(diào)優(yōu)及其優(yōu)化建議

      經(jīng)過最終執(zhí)行結(jié)果,存儲為普通文件的總大小為12.6G,存儲為parquet文件的大小為3.6G,存儲所占空間減少了近70%,因此存儲為parquet文件占用的空間更小。

     

    四、Parquet在實(shí)際項(xiàng)目中的應(yīng)用建議

    (1)當(dāng)讀取的列數(shù)并非全部列數(shù),建議使用parquet格式存儲(建表時使用stored by parquet);

    (2)在進(jìn)行列式計(jì)算或者向量計(jì)算時,建議也使用parquet格式存儲,可以提高運(yùn)算效率;

    (3)如果有文件需要備份存儲,可以使用parquet文件進(jìn)行壓縮,可以有效的節(jié)約空間,提高壓縮效率和速率。

     

     

     

     

     

     

     

     

     

     

本文名稱:Parquet性能測試調(diào)優(yōu)及其優(yōu)化建議
文章出自:http://muchs.cn/article16/jepgdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站微信小程序、定制網(wǎng)站云服務(wù)器用戶體驗(yàn)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司