一 對比
存儲空間對比:
查詢性能對比:
二 設計方案
將數據拆分為:歷史數據(hdfs+parquet+snappy)+ 近期數據(kudu),可以兼具各種優點:
- 1)整體低於10%的磁盤占用;
- 2)更少的查詢耗時;
- 3)近期數據實時更新;
- 4)近期數據可修改;
- 5)kudu集群重啟時間降低90%;
- 6)impala並行scan:scan kudu + scan hdfs;
三 改造方案
利用視圖
create view v_table as
select * from parquet_table where dt < 'seven days ago'
union all
select * from kudu_table where dt >= 'seven days ago';
client將kudu_table替換為v_table即可;
四 其他
kudu問題:
- flume kudu sink使用kudu client版本過低,有bug,不會自動刷新token,7天之后會因為token失效報錯;升級kudu client后可以解決bug,但是kudu client和flume使用的guava庫版本有沖突;
- 按dt分區后tablet數量過多,磁盤占用空間過大,內存占用過多;
- 因為tablet數量多,磁盤空間大,每次kudu集群重啟需要10-20分鍾做initialize;
- kudu內存占用過多時會拒絕寫操作;
- 使用kudu作為單一數倉同時支持寫入和查詢,很容易相互影響,大量寫入影響查詢,大量查詢影響寫入,會導致數據丟失或者查詢慢;
- kudu支持更新,一個delete或者drop就可以把所有數據全部刪掉,作為單一數倉比較危險;