spark SQL 參數調優

spark SQL 參數調優

1 spark.sql.codegen 默認值為false,當它設置為true時,Spark SQL會把每條查詢的語句在運行時編譯為java的二進位代碼。這有什麼作用呢?它可以提高大型查詢的性能,但是如果進行小規模的查詢的時候反而會變慢,就是說直接用查詢反而比將它編譯成為java的二進位代碼快。所以在優化這個選項的時候要視情況而定。

2 spark.sql.inMemoryColumnStorage.compressed 默認值為false 它的作用是自動對內存中的列式存儲進行壓縮

3 spark.sql.inMemoryColumnStorage.batchSize 默認值為1000 這個參數代表的是列式緩存時的每個批處理的大小。如果將這個值調大可能會導致內存不夠的異常,所以在設置這個的參數的時候得注意你的內存大小

4 spark.sql.parquet.compressed.codec 默認值為snappy 這個參數代表使用哪種壓縮編碼器。可選的選項包括uncompressed/snappy/gzip/lzo

uncompressed這個顧名思義就是不用壓縮的意思

推測執行(Speculative Execution)是指在分散式集群環境下,因為程序BUG,負載不均衡或者資源分布不均等原因,造成同一個job的多個task運行速度不一致,有的task運行速度明顯慢於其他task(比如:一個job的某個task進度只有10%,而其他所有task已經運行完畢),則這些task拖慢了作業的整體執行進度,為了避免這種情況發生,Hadoop會為該task啟動備份任務,讓該speculative task與原始task同時處理一份數據,哪個先運行完,則將誰的結果作為最終結果。

推測執行優化機制採用了典型的以空間換時間的優化策略,它同時啟動多個相同task(備份任務)處理相同的數據塊,哪個完成的早,則採用哪個task的結果,這樣可防止拖後腿Task任務出現,進而提高作業計算速度,但是,這樣卻會佔用更多的資源,在集群資源緊缺的情況下,設計合理的推測執行機制可在多用少量資源情況下,減少大作業的計算時間。

檢查邏輯代碼中注釋很明白,當成功的Task數超過總Task數的75%(可通過參數spark.speculation.quantile設置)時,再統計所有成功的Tasks的運行時間,得到一個中位數,用這個中位數乘以1.5(可通過參數spark.speculation.multiplier控制)得到運行時間門限,如果在運行的Tasks的運行時間超過這個門限,則對它啟用推測。簡單來說就是對那些拖慢整體進度的Tasks啟用推測,以加速整個Stage的運行。

演算法大致流程如圖:

示例:

SparkConf conf = new SparkConf();

conf.set("spark.speculation", "true"); // 設置推測機制

當成功的Task數超過總Task數的75%(可通過參數spark.speculation.quantile設置)

開啟則會啟動一個線程每隔SPECULATION_INTERVAL_MS(默認100ms,可通過spark.speculation.interval屬性設置)

推薦閱讀:

「一道亮麗的風景線」
國慶你錯過了哪些事:Oculus Connect 3 大會新品概覽
小米 MIX 2 與 iPhone X 孰優孰劣?
中國手機ODM廠商實力如何?未來將何去何從?
【一鍵合併】我只想靜靜的看一張全數據表格,可每個小夥伴都單獨給我發表格,怎麼辦?#無痛工作流

TAG:Spark | 計算機科學 | 科技 |