91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Parquet性能測試調優及其優化建議

發布時間:2020-05-19 14:25:13 來源:網絡 閱讀:12079 作者:Rawirm 欄目:大數據

                  Parquet性能測試調優及其優化建議

  一、我們為什么選擇parquet

  1、選擇parquet的外部因素

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

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

  

2、選擇parquet的本身原因

  1parquet由于每一列的成員都是同構的,可以針對不同的數據類型使用更高效的數據壓縮算法,進一步減小I/OCSV格式一般不進行壓縮,通過parquet存儲數據有效的節約了空間,不考慮備份情況下,壓縮比將近27倍(parquet有四種壓縮方式lzogzipsnappyuncompressed,其中默認gzip的壓縮方式,其壓縮率最高,壓縮解壓的速率最快);

  2) 查詢的時候不需要掃描全部的數據,而只需要讀取每次查詢涉及的列,這樣可以將I/O消耗降低N倍,另外可以保存每一列的統計信息(minmaxsum)

  3) 分區過濾與列修剪中,parquet結合spark可以實現分區過濾(spark sqlrddfilterwhere關鍵字),列修剪即獲取所需要的列,列數越少查詢的速率也就也快;

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

     

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

       Parquet性能測試調優及其優化建議

     

    Parquet文件在磁盤上的分布情況如上圖,所有的數據被水平切分成Row group,一個Row group包含這個Row group對應的區間內的所有列的column chunk 。一個column chunk負責存儲某一列的數據,這些數據是這一列的Repetition levelDefinition levelValues。一個column chunk是由Page組成的,Page是壓縮和編碼的單元,對數據模型來說是透明的。一個Parquet文件最后是Footer,存儲了文件的元數據信息和統計信息。Row group是數據讀寫時候的緩存單元,所以推薦設置較大的Row group從而帶來較大的并行度,當然也需要較大的內存空間作為代價。一般情況下推薦配置一個Row group大小1G,一個HDFS塊大小1G,一個HDFS文件只含有一個塊。

     

  3. Parquet性能測試

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

    測試環境:58.56機器、spark1.6stshive

     

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

    測試原理:

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

    1由于每一列的成員都是同構的,可以針對不同的數據類型使用更高效的數據壓縮算法,進一步減小I/O

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

    測試步驟

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

    2)編寫spark讀取語句,對列數進行查詢讀取操作;

    3)增加讀取列數,在機器上spark提交任務運行記錄運行時間;

    4)對比運行時間,得出最終結論。

     

    測試結果

    27005w數據   普通hive表      request表    測試結果:

查詢列數

普通hive表耗時

Parquet表耗時

1

 253

242

5

 353

127

20

 558

356秒  

35

 916

936秒  

50

1319

811

 

總結結論

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

 

 

 

 

2)測試parquet列式存儲在對多列數據進行列式計算的效率

 

測試環境:58.56機器、spark1.6stshive

 

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

測試原理:

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

1查詢的時候不需要掃描全部的數據,而只需要讀取每次查詢涉及的列,這樣可以將I/O消耗降低N倍,另外可以保存每一列的統計信息(minmaxsum),實現部分的謂詞下推。

2由于每一列的成員都是同構的,可以針對不同的數據類型使用更高效的數據壓縮算法,進一步減小I/O

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

測試步驟

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

2)編寫spark讀取語句,包含列式計算的sumavg以及maxmin語句;

3)在機器上spark提交任務運行記錄運行時間;

4)對比運行時間,得出最終結論。

 

測試結果

 

第一組:

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

測試結果:

時間

普通hive

Parquet

耗時

  214

  137

耗時

  224

  108

耗時

  227

  136

平均耗時

233

127

 

 

 

第二組:

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

測試結果:

時間

普通hive

Parquet

耗時

  222

  138

耗時

  258秒  

  151

耗時

  231秒  

  138

平均耗時

237

142

 

 

 

第三組:

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

測試結果:

時間

普通hive

Parquet

耗時

  303

  158

耗時

  245秒  

  203

耗時

  248秒  

  206

平均耗時

252

202秒  

 

 

總結結論

通過三組數值的比對計算,列式存儲格式parquet針對列式計算效率比普通的行式存儲有明顯的優勢,運算的效率提升在30%-40%左右,效率更高,執行效率更快。

 

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

    測試環境:58.56機器、spark1.6stshive

     

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

    測試原理:

    1由于每一列的成員都是同構的,可以針對不同的數據類型使用更高效的數據壓縮算法,進一步減小I/O

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

    測試步驟

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

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

     

    測試結果

     

    結果如下圖:

     Parquet性能測試調優及其優化建議

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

     

    四、Parquet在實際項目中的應用建議

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

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

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

     

     

     

     

     

     

     

     

     

     

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

墨竹工卡县| 义马市| 原阳县| 上饶县| 娄烦县| 灌云县| 公主岭市| 始兴县| 桂平市| 灵山县| 芜湖县| 阿荣旗| 彰化县| 永康市| 洛隆县| 长垣县| 腾冲县| 蛟河市| 绥宁县| 邵东县| 金塔县| 北安市| 青浦区| 临沭县| 大田县| 石台县| 乡宁县| 博乐市| 治多县| 荣昌县| 梁山县| 乾安县| 玉溪市| 进贤县| 罗城| 北碚区| 洛阳市| 隆尧县| 碌曲县| 云梦县| 油尖旺区|