天天看點

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也會算一個進行壓縮!!!

原表的資料:

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

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還是優化了一點的。

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

繼續閱讀