溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-05-19 14:25:13 來(lái)源:網(wǎng)絡(luò) 閱讀:12058 作者:Rawirm 欄目:大數(shù)據(jù)

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

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

  1、選擇parquet的外部因素

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

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

  

2、選擇parquet的本身原因

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

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

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

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

     

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

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

     

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

     

  3. Parquet性能測(cè)試

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

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

     

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

    測(cè)試原理:

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

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

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

    測(cè)試步驟

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

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

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

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

     

    測(cè)試結(jié)果

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

查詢列數(shù)

普通hive表耗時(shí)

Parquet表耗時(shí)

1

 253

242

5

 353

127

20

 558

356秒  

35

 916

936秒  

50

1319

811

 

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

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

 

 

 

 

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

 

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

 

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

測(cè)試原理:

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

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

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

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

測(cè)試步驟

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

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

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

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

 

測(cè)試結(jié)果

 

第一組:

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

測(cè)試結(jié)果:

時(shí)間

普通hive

Parquet

耗時(shí)

  214

  137

耗時(shí)

  224

  108

耗時(shí)

  227

  136

平均耗時(shí)

233

127

 

 

 

第二組:

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

測(cè)試結(jié)果:

時(shí)間

普通hive

Parquet

耗時(shí)

  222

  138

耗時(shí)

  258秒  

  151

耗時(shí)

  231秒  

  138

平均耗時(shí)

237

142

 

 

 

第三組:

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

測(cè)試結(jié)果:

時(shí)間

普通hive

Parquet

耗時(shí)

  303

  158

耗時(shí)

  245秒  

  203

耗時(shí)

  248秒  

  206

平均耗時(shí)

252

202秒  

 

 

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

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

 

  1. 測(cè)試普通文件和parquet文件的壓縮效率對(duì)比

    測(cè)試環(huán)境:58.56機(jī)器、spark1.6、stshive

     

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

    測(cè)試原理:

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

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

    測(cè)試步驟

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

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

     

    測(cè)試結(jié)果

     

    結(jié)果如下圖:

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

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

     

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

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

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

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

     

     

     

     

     

     

     

     

     

     

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI