表的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也會算一個進行壓縮!!!
原表的數據:
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的滿負荷,這樣分片數可以減少,再超大數據規模下,效率更高!!!
當然這個在代碼實現或者算法上應該比較難以實現,要不然以那些世界級的專業人士,怎麼會想不到我說的這段話。。。