HIVE和SPARKSQL計算引擎在TEXT導入PARQUET格式的HIVE存儲引擎分片數量機制

表的hive導入:

create table XXXXXXX201512 (N多字段構成)STORED AS PARQUETFILE;

insert into XXXXXXX201512 select * from XXXXXXX20151231;


以上的insert,3000萬的數據,一般是6、7分鐘的樣子,,一個表到總表產生的分片數是40多個,之後查詢一張表大概1秒左右

別用Spark-SQL進行以上的插入過程,原因如下:

測試用sparksql來導入:

create table XXXXXXX201512P (N多字段構成)STORED AS PARQUETFILE;

insert into XXXXXXX201512P select * from XXXXXXX20151231;

以上的insert,3000萬的數據,超過了10分鐘,一個表到總表產生的分片數是80多個,查詢1.5秒左右


從文件數論證hive和sparksql對以上過程的分片機制:

得出結論:hive的上述過程是按照block的進行兩兩合併,然後壓縮成爲parquet文件的;sparksql是按照每個block壓縮成爲parquet文件的,同時,sparksql把空part也會算一個進行壓縮!!!

原表的數據:

spacer.gifwKioL1b05OWgzUkRAAA2Q84kcmA288.png

part0,65個block;part1,0個block;part2,11個block;part3,0個block;part4,4個block;

block數量一共是80個,而hive產生的總表中由這個表過去的數據的part數量是40個!!!sparkSQL產生的總表中由這個表過去的數據的part數量是82個!!!

由此可以看出,在進行上述操作的時候,hive至少比spark還是優化了一點的。

具體是不是我說的兩兩合併,有待看源碼驗證!!!


我個人覺得更加高端的方式是計算壓縮率,通過壓縮率和數據量大小,選擇合適的block合併數據壓縮,使數據儘量能達到每個block 128M的滿負荷,這樣分片數可以減少,再超大數據規模下,效率更高!!!

當然這個在代碼實現或者算法上應該比較難以實現,要不然以那些世界級的專業人士,怎麼會想不到我說的這段話。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章