Impala簡明調優手冊

2021-06-28 19:51:08 字數 2089 閱讀 4568

impala是cloudera開發、開源的乙個原生於hadoop的互動式sql引擎。本身impala的出現並不是為了替代hive、pig等現有的、常用的etl工具。實用的場景往往於商業智慧型密不可分,比如對資料進行聚合(aggregation)、做一些簡單的分析統計(比如window function),通過jdbc/odbc,整合到當今流行的bi工具中,例如tableau等等。

這篇博文主要來**下關於impala日常使用過程中的需要注意的點,不得不強調的是對於sql的執行,一方面我們的確需要關注sql本身的執行效能,比如多久可以執行完畢;但是,sql的併發更是乙個關鍵的考察點,畢竟我相信對於大部分生產上的集群,使用者不止一位,任務也不止乙個。另外,隨著伺服器標配的記憶體數日益增長,128gb、256gb的機器屢見不鮮,對於如何更加高效使用cpu會成為下乙個熱點 (cpu efficiency)。

1. 使用parquet

這一步一般是預設需要做的,在impala中,定義parquet格式資料表的示例:

create table test_parquet (

id int,

name string

stored as parquet

2. 不使用壓縮

set compression_codec=none;

3. 計算統計資訊

計算統計資訊後,一些簡單的聚合計算,比如max(...)、count(...),都可以根據預計算的結果快速相應。另外,impala在計算query plan時也會利用這些統計資訊,比如對join順序進行自動優化。需要注意的是這種自動「優化」並不一定100%帶來效能的提公升。在impala中計算統計資訊的示例:

compute stats test_parquet;

4. hdfs cache

hdfs允許將常用資料lock在記憶體中,以提高資料讀取的效率。使用hdfs cache時也要考慮權衡。畢竟這部分記憶體會被lock住,使得這部分記憶體無法在impala計算過程中使用。因此,這一特徵的使用要慎重,建議在某一資料被非常頻繁地讀取時考慮使用。在impala中,使用hdfs cache的示例:

hdfs cacheadmin -addpool impala_pool -owner impala -limit 4000000000

create table test_parquet (

id int,

name string

)stored as parquest;

alter table test_parquet set cached in 'impala_pool';

alter table test_parquet set uncached;

5. 保持join順序

一般情況下,compute stats會對join的順序進行自動優化。但是這個自動「優化」並不一定保證對所有的sql都帶來效能的提公升 (需要測試)。對於那些效能下降的sql,可以使用straight_join保證impala在計算query plan保持原有的join順序。在impala中,使用straight_join的示例:

select straight_join id, name

from test_parquet t inner join other_parquet o

on t.id = o.id

6. sql hint指定join方式

sql join過程涉及資料的網路傳輸,impala支援兩種模式broadcast與shuffle,impala會根據表的大小選擇合適的模式,如果需要顯示指定特定模式,impala可以使用hint,示例如下:

select id, name

from test_parquet t join [shuffle] other_parquet o

on t.id = o.id;

select id, name

from test_parquet t join [broadcast] other_parquet o

on t.id = o.id;

Impala 效能調優和設計

優化思路 impala中,提供了10大類優化思路和方法 1.分割槽 2.連線查詢效能考慮 3.表和列資訊統計 4.impala效能測試 5.基準impala查詢 6.控制impala的資源使用情況 7.使用impala查詢amazon s3的檔案系統。8.hdfs快取 9.執行計畫和查詢概況 10....

spark調優 shuffle調優

基於spark1.6 引數可以通過 new sparkcontext set 來設定,也可以通過命令的引數設定 conf spark.shuffle.file.buffer 預設值 32k 引數說明 該引數用於設定shuffle write task的bufferedoutputstream的buf...

Spark Spark調優 資源調優

spark在乙個executor的記憶體分為三塊,1.一塊是execution記憶體 2.一塊是storge 記憶體 3.一塊是其他記憶體 執行記憶體是執行記憶體,加入,聚合都是在這部分記憶體中執行.shuffle的資料也會先快取在這個記憶體中,滿了再寫入磁碟,能減少io,其實地圖過程也是在這個記憶...