性能的最佳實踐的效率

本文介紹的最佳實踐性能效率,組織架構原則在下麵幾節中列出。

垂直擴展,水平擴展和線性可伸縮性

在討論最佳實踐之前,我們先看看一些概念在分布式計算:水平和垂直縮放、和線性可伸縮性:

  • 垂直擴展通過添加或刪除資源從一台計算機,通常cpu,內存,或gpu。通常,這意味著停止工作負載,它轉移到一個更大的機器,重新啟動一次。垂直擴展限製:可能沒有更大的機器,或下一個更大的機器的價格相當之高。

  • 水平擴展從分布式係統通過添加或刪除節點:當達到垂直擴展的限製,橫向擴展解決方案:分布式計算使用(稱為係統與多個機器集群)運行的工作負載。必須明白,這是可能的,工作負載需要準備並行執行,支持引擎的磚Lakehouse, Apache火花和光子。這允許多個機器價格合理結合到一個更大的計算係統。如果一個人需要更多的計算資源,那麼水平擴展向集群添加更多的節點和刪除不再需要的時候。雖然從技術上講是沒有限製(和火花引擎將接管分配負荷的複雜的部分),大量的節點做增加了管理的複雜性。

  • 線性可伸縮性,這意味著當您添加更多的資源係統,吞吐量和資源使用之間的關係是線性的。這是唯一可能的,如果並行任務是獨立的。如果沒有,中間結果在一組節點需要在集群中的另一組節點進行進一步的計算。這個節點之間數據交換涉及運輸的結果通過網絡從一個節點到另一組節點,這需要相當長的時間。一般來說,分布式計算總有一些開銷來管理分配和交換的數據。結果,可以分析小數據集工作負載在單個節點上可能會更加緩慢運行在分布式係統上。磚Lakehouse平台提供了靈活的計算(單節點和Beplay体育安卓版本分布式)來滿足您的獨特需求的工作負載。

1。使用serverless架構

使用serverless計算

serverless計算在磚Lakehouse的平台上,計算層運行在客戶的磚帳戶Beplay体育安卓版本。工作空間管理員可以創建serverless SQL倉庫,使即時計算和由磚來管理。serverless SQL倉庫使用磚中的計算集群托管客戶帳戶。與磚的SQL查詢使用它們就像你通常會與原磚SQL的倉庫。Serverless計算有一個非常快的起始時間為SQL倉庫(10年代和下麵),和基礎設施是由磚。

這導致提高生產力:

  • 雲管理員不再需要管理複雜的雲計算環境中,例如通過調整配額,創建和維護網絡資產,並加入計費來源。

  • 用戶受益於接近零等待時間集群啟動和改善並發查詢。

  • 雲高附加值項目管理員可以重新調整自己的時間,而不是管理底層雲組件。

2。設計工作負載性能

理解你的數據攝入和訪問模式

從性能的角度而言,數據訪問模式,如“聚合與訪問”或“掃描和搜索”——根據數據大小不同。大文件掃描查詢和更小的文件更有效更好的搜索,因為你必須少讀數據找到特定的行(s)。

對攝入模式來說,這是常見的使用DML語句。DML語句最高性能集群的數據時,你可以簡單地孤立的部分數據。保持數據集群,可隔離的攝入很重要:考慮保持自然時間排序順序和盡可能多的過濾器應用於攝取目標表。為擴展和覆蓋攝入工作負載,沒有多考慮,這是一個相對廉價的操作。

攝入和訪問模式通常指向一個明顯的數據布局和集群。如果他們不這樣做,決定什麼是對你的生意更重要,斜向如何更好地解決這一目標。

使用並行計算,它是有益的

時間價值是一個重要的維度在處理數據。雖然許多用例可以很容易地實現在同一台計算機上(小數據,一些和簡單的計算步驟),經常使用情況下出現:

  • 需要處理大型數據集。

  • 長期以來,由於複雜的算法運行時間。

  • 必須重複100年代和1000年代的時代。

磚的集群環境平台是一個很好的環境來有效地分配這些工作負載。Beplay体育安卓版本它會自動對SQL查詢集群的所有節點,它提供了圖書館PythonScala來做同樣的事情。在引擎蓋下,引擎Apache火花和光子分析查詢,確定最優的並行執行方式和管理分布式執行彈性的方式。

以同樣的方式作為批處理任務,結構化流跨集群分布流工作的最佳性能。

最簡單的方法之一,利用並行計算三角洲生活表。聲明的工作任務和依賴SQL或Python,然後接管三角洲生活表執行計劃,高效的基礎設施的設置,作業執行和監控。

數據科學家,熊貓是一個Python包,它提供了簡單易用的數據結構和數據分析工具的Python編程語言。但是,大熊貓不規模大數據。熊貓API火花填補這一差距通過提供熊貓等效api, Apache火花。

此外,平台提供了並行的機器學習算法Beplay体育安卓版本MLlib。它支持開箱即用的利用multi-GPU和分布式深度學習計算,如Horovod跑步者。看到HorovodRunner: Horovod分布式深度學習。特定庫也跟這個平台來幫助大量重複的任務分發給所有集群節點,切割時間值近似線性的方Beplay体育安卓版本式。例如,Hyperopt在ML平行hyperparameter優化。

分析整個鏈的執行

大多數管道或消費模式使用一連串的係統。例如,對於BI工具性能是受幾個因素的影響:

  • BI工具本身。

  • 連接器連接和SQL引擎BI工具。

  • BI工具發查詢的SQL引擎。

為了獲得最佳性能,整個鏈需要考慮和選擇/調整為最佳性能。

喜歡大的集群

請注意

Serverless計算自動管理集群,這是不需要serverless計算。

計劃更大的集群,尤其是當工作負載線性擴展。在這種情況下,這不是更貴為一個工作負載使用大型集群比使用一個較小的一個。它隻是更快。關鍵是你租的集群工作負載的長度。如果你旋轉兩個工人集群和需要一個小時,你支付這些工人完整的小時。同樣,如果你旋轉4個工作集群和隻需要半個小時(線性可伸縮性來發揮作用),成本都是一樣的。如果成本是主要的司機非常靈活的SLA,一個自動定量集群幾乎總是要最便宜的,但不一定是最快的。

使用本機火花操作

用戶定義函數(udf)是一個偉大的方法來擴展SQL火花的功能。然而,不要使用Python或Scala udf如果存在本機函數:

原因:

  • Python和火花之間傳輸數據,串行化是必要的。這大大減緩查詢。

  • 更高的努力實現和測試平台中已經存在的功能。Beplay体育安卓版本

如果本機函數是失蹤,應該作為Python實現udf使用熊貓udfApache箭頭確保數據有效地火花和Python之間來回移動。

使用光子

光子是磚的引擎,提供了以低成本快速查詢性能——從數據攝入、ETL、流媒體,數據科學、湖和交互式查詢——直接在你的數據。光子與Apache火花api兼容,所以開始就可以輕鬆的把它——沒有代碼變更和鎖定。

光子是一個高性能的運行時的一部分運行現有的SQL和DataFrame API調用每個工作負載速度和減少你的總成本。光子在默認情況下用於磚SQL的倉庫。

理解你的硬件和工作負載類型

請注意

Serverless計算自動管理集群,這是不需要serverless計算。

並不是所有的雲創建虛擬機一樣。雲提供商提供的不同家庭的機器都是不同的問題。有明顯差異,RAM和核心——更細微的差別——處理器類型和一代,網絡帶寬保證,和地方高速存儲和本地磁盤和遠程磁盤。也有不同的“現貨”市場。這些之前應該被理解為你的工作量決定最好的虛擬機類型。

使用緩存

有兩種類型的緩存中可用數據磚:三角洲緩存和火花緩存。這裏是每個類型的特征:

  • 使用磁盤緩存

    磁盤高速緩存(原名“三角洲緩存”)上的遠程數據複製本地磁盤(例如,SSD)的虛擬機。它可以提高廣泛的查詢的性能但不能用於存儲任意子查詢的結果。磁盤緩存數據文件被創建或刪除時自動檢測並相應更新其內容。推薦使用磁盤緩存(簡單的)方法是選擇一個工人類型與SSD卷當你配置集群。這些工人是磁盤緩存啟用和配置。

  • 避免火花緩存

    火花緩存(通過使用.persist ().unpersist ())可以存儲任何子查詢的結果數據和數據存儲在拚花以外的其他格式(如CSV、JSON和獸人)。然而,如果在錯誤的地點在一個查詢中使用,它可能會耗光所有內存,甚至可以大幅降低查詢。作為一個經驗法則,避免引發緩存,除非你知道的影響。看到火花緩存

  • 查詢結果緩存

    每個集群緩存查詢結果通過SQL查詢倉庫。受益於查詢結果緩存,專注於確定性的查詢,例如,不要使用謂詞=現在()。確定一個查詢時,在三角洲和底層數據格式和不變,SQL倉庫將返回結果直接從查詢結果緩存。

  • 磚SQL UI的緩存

    每個用戶緩存的查詢和儀表板的結果磚SQL的用戶界麵

  • Prewarm集群

    請注意

    注意:Serverless計算自動管理集群,這是不需要serverless計算。

    獨立的查詢和數據格式,第一個查詢集群上總是會慢於後續查詢。這與所有不同的子係統,將啟動和閱讀他們所需要的所有數據。考慮到這對性能基準測試。一個簡單的方法來確保熱身是prewarm三角洲集群的緩存。還可以附加一個集群,一個現成的池。看到創建一個池

  • Prewarmδ緩存BI工作負載

    緩存的數據訪問指定的三角洲的簡單的SELECT查詢緩存。你可以選擇一個子集的列緩存通過提供一個列名列表並選擇行通過提供一個謂詞的一個子集。

看到緩存選擇

使用壓實

三角洲湖磚可以提高閱讀的速度從表查詢。改善這種速度的一個方法是將小文件合並成更大的。你觸發壓縮通過運行優化命令。看到緊湊的數據文件與優化在三角洲湖

您還可以使用汽車緊湊的小文件自動優化。看到考慮文件大小調整

使用數據不

數據跳過:為實現這一目標,跳過信息收集數據時自動寫入數據到一個增量表(默認情況下三角洲湖磚收集統計數據的第一個32列表模式中定義)。三角洲湖上磚利用這些信息(最大和最小值)在查詢時提供更快的查詢。看到數據不與z順序索引三角洲湖

為達到最佳效果,適用z值搭配相關的信息技術,在同一組文件。這個co-locality自動用於磚三角洲湖data-skipping算法。這種行為大大減少了磚三角洲湖需要讀取的數據量。

動態文件修剪:動態文件修剪(DFP)可以顯著提高查詢的性能在三角洲表。DFP尤其高效非分區表或加入非分區列上。

避免跨越式

在過去,跳過數據分區是最常見的方式。然而,分區是靜態的,表現為一個文件係統層次結構。沒有簡單的方法來改變分區如果訪問模式隨時間變化的。通常,分區導致跨越式——換句話說,分區太小文件太多,導致糟糕的查詢性能。看到分區

與此同時,一個更好的選擇比分區z值。

考慮文件大小調整

這個詞自動優化有時是用來描述功能控製的設置delta.autoCompactdelta.optimizeWrite。這學期已經退休的描述每個單獨設置。看到配置三角洲湖控製數據文件大小

在下列情況下自動優化尤其有用:

  • 流用例延遲在分鍾的順序是可以接受的。

  • 合並成的首選方法是編寫成三角洲湖。

  • 創建表,選擇或插入常用操作。

優化與性能

  • 考慮連接優化範圍。看到連接優化範圍

    加入一係列發生在兩個關係加入使用點間隔或間隔重疊情況。範圍在磚連接優化支持運行時可以把數量級的提高查詢性能,但需要仔細的手工調優。

  • 考慮斜連接優化。

    數據傾斜時,一個表的數據分區中集群分布是不均勻的。數據傾斜會嚴重降低查詢的性能,特別是與連接。大表之間的連接需要轉移數據,傾斜會導致集群中的一個極端不平衡的工作。很有可能數據傾斜影響查詢如果查詢似乎很少完成任務。改善斜,三角洲湖磚SQL接受斜提示查詢。從傾斜的信息提示,磚運行時可以構造一個更好的查詢計劃,不受數據傾斜。有兩個選擇:

    • 如果斜是已知的,可以提供手動傾斜提示。看到傾斜連接優化

    • 與磚運行時7.3及以上,斜加入提示不需要。傾斜自動照顧自適應查詢執行(AQE)和spark.sql.adaptive.skewJoin.enabled都是啟用的。

運行分析表收集表統計

整個表上運行分析表來收集統計信息的查詢計劃。看到分析表

分析mytable計算統計數據所有;

這些信息保存在metastore並幫助查詢優化器:

  • 選擇合適的連接類型。

  • 選擇正確的構建方麵的散列連接。

  • 校準多路連接的連接順序。

每天應該運行與優化和推薦表< 5結核病。唯一的警告是,分析表不是增量。

3所示。運行性能測試的範圍發展

測試數據代表的生產數據

在生產運行性能測試數據(隻讀)或類似的數據。當使用類似的數據,特征像體積,文件的布局,和數據傾斜應該像生產數據,因為這對性能有重大的影響。

考慮到資源的預熱

第一個查詢新集群比其他人慢:

  • 一般來說,集群資源需要初始化多個層。

  • 當緩存設置的一部分,第一次運行確保數據在緩存中,加快後續工作。

預熱資源——運行特定查詢的初始化和填充緩存資源(例如,在一個集群重啟),可顯著提高第一個查詢的性能。所以,要理解的行為不同的場景,第一次執行的性能測試(有或沒有預熱)和隨後的執行。

提示

互動工作負載如儀表板刷新可以大大受益於預熱。然而,這並不適用於工作的集群,負載設計隻執行一次。

識別瓶頸

瓶頸區域在工作負載可能惡化生產負荷增加時的整體性能。識別這些在設計時對高工作負載和測試將有助於保持工作負載穩定生產。

4所示。監視性能

看到卓越運營,建立監測、報警和日誌記錄