五大磚性能的建議
2022年3月10日 在Beplay体育安卓版本平台的博客
介紹
作為解決方案架構師,我們每天都與客戶緊密合作,幫助他們獲得最佳性能的工作磚——我們往往會給同beplay体育app下载地址樣的建議。也不是什麼罕見的與客戶交談,得到兩倍,三倍,甚至更多的性能隻有幾個調整。這個秘密是什麼?我們這樣做?以下5件事我們看到可以對客戶從磚性能產生巨大影響。beplay体育app下载地址
這裏有一個TLDR:
- 使用更大的集群。這可能聽起來很明顯,但是這是我們看到的第一個問題。其實不是任何更多的昂貴的使用大型集群工作負載比使用一個較小的一個。它隻是更快。如果有什麼你應該遠離這篇文章,就是這個。讀第一節。真的。
- 使用光子,磚的新,超快的執行引擎。讀第二部分了解更多信息。你不會後悔的。
- 清理你的配置。從一個Apache配置進行火花™版本到下一個可以造成巨大的問題。清理!閱讀第三節了解更多信息。
- 使用三角洲緩存。很有可能你不是正確使用緩存,如果。了解更多請見第四章。
- 注意懶惰的評價。如果這對你沒有任何意義,你在寫代碼,跳到第五節。
- 小貼士!表的設計是非常重要的。我們將進入這個在以後的博客,但是現在,看看指南三角洲湖的最佳實踐。
1。給你的集群馬力!
這是客戶常犯的一個錯誤。beplay体育app下载地址許多客戶創beplay体育app下载地址建的小集群與四核,兩名工人,要花很多時間去做任何事情。關心總是一樣的:他們不想花太多錢在更大的集群。事情是這樣的:其實不是任何更多的昂貴的使用大型集群工作負載比使用一個較小的一個。它隻是更快。
關鍵是你租的集群工作負載的長度。如果你旋轉,兩個工人集群,需要一個小時,你支付這些工人完整的小時。然而,如果你旋轉四個工人集群,隻需要半個小時,成本實際上是相同的!,這一趨勢持續下去,隻要有足夠的為集群的工作要做。
這是一個假設的場景說明這一點:
工人數量 | 每小時費用 | 長度的工作負載(小時) | 成本的工作負載 |
---|---|---|---|
1 | 1美元 | 2 | 2美元 |
2 | 2美元 | 1 | 2美元 |
4 | 4美元 | 0.5 | 2美元 |
8 | 8美元 | 0.25 | 2美元 |
注意到工作負載的總成本保持不變而工作運行的實際時間顯著下降。提高你的磚集群規範和加快你的工作負載不花更多的錢。它不能得到任何比這更簡單。
2。使用光子
我們的同事在工程已經重寫了火花執行引擎在c++和稱光子。結果是令人印象深刻的!
除了明顯改善由於運行引擎在本機代碼,他們還利用CPU-level性能特性和更好的內存管理。除此之外,他們在c++重寫鋪作家。這使得寫拚花和δ(基於拚花)超快!
但是我們也清楚什麼是光子加速。它可以提高計算速度任何內置函數或操作,以及寫拚花或δ。所以連接?是的!聚合嗎?當然!ETL嗎?絕對的!UDF(用戶定義函數)你寫嗎?抱歉,但這不會幫助。 The job that's spending most of its time reading from an ancient on-prem database? Won't help there either, unfortunately.
好消息是,它幫助。因此,即使不能加快你的工作的一部分,它將加速其他部分。同時,大多數工作都用本機操作和花很多時間寫信給三角洲,光子可以幫助很多。所以給它一個嚐試。你可能會驚訝於結果!
3所示。清除舊的配置
你知道那些火花配置你一直攜帶在版本之間,沒有人知道他們做什麼了?它們可能不是無害的。我們看到工作從運行幾個小時分鍾隻要清理舊的配置。有怪癖的特定版本的火花,性能調整並不成熟,或者從一些博客的地方,從來沒有真正有意義。至少,值得重新審視你的火花配置如果你在這種情況下。通常默認的配置是最好的,他們隻會變得更好。你的配置可能會阻礙你。
4所示。三角洲緩存是你的朋友
這似乎是顯而易見的,但你會吃驚地發現有多少人不使用三角洲緩存加載數據的雲存儲(S3, ADLS),使工人ssd更快的訪問。
如果你使用磚SQL端點在運氣。這些默認緩存。事實上,我們建議使用從表緩存SELECT *預加載你的“熱”表,當你開始一個端點。這將確保超級快的速度在這些表的查詢。
如果你使用常規的集群,一定要使用i3係列亞馬遜網絡服務(AWS), L係列或E係列Azure磚,或者在GCP n2。這些都將快速ssd和緩存默認啟用。
當然,你的情況可能不同。如果你做BI,包括閱讀一遍又一遍相同的表,緩存了驚人的提高。然而,如果你隻是讀一次表,寫一些ETL作業的結果,你可能不會得到太多的好處。你比任何人都了解你的工作。出去和征服。
5。注意懶惰的評價
如果你是一個數據分析或數據科學家隻使用SQL或做BI可以跳過本節。然而,如果你在數據工程和寫作管道或做處理使用磚/火花,繼續讀下去。
當你寫代碼選擇、火花groupBy,過濾器,等等,你真的建立一個執行計劃。你會注意到代碼返回幾乎立即當您運行這些函數。這是因為它實際上不做任何計算。所以即使你有pb的數據它將返回在不到一秒。
然而,一旦你去寫你的結果你會發現它需要更長的時間。這是由於懶惰的評價。直到你嚐試顯示或編寫你的執行計劃是實際運行的結果。
- - - - - - - - - - - -#建立一個執行計劃。#這將返回在不到一秒,但沒有工作df2 = (df. join (…).select (…)。過濾器(…))現在#運行得到結果的執行計劃df2.display ()- - - - - - -
然而,這裏有一個陷阱。每次你想顯示或寫出結果它運行的執行計劃。讓我們看看相同的代碼塊但擴展它,做更多的業務。
- - - - - - - - - - - -#建立一個執行計劃。#這將返回在不到一秒,但沒有工作df2 = (df. join (…).select (…).filter (…))現在#運行得到結果的執行計劃df2.display ()#不幸的是,這將再次運行計劃,包括過濾,加入等df2.display ()#所以這…df2.count ()- - - - - - -
這段代碼的開發人員很可能以為他們隻是打印結果三次,但他們真正做的是開始相同的處理三次。哦。這是一個許多額外的工作。這是一個很常見的錯誤我們遇到。那麼為什麼會有懶惰的評價,我們該怎麼做呢?
簡而言之,延遲評價方式的處理速度比沒有它。磚/火花看完整的執行計劃和發現機會的優化,可以減少處理時間數量級。這是偉大的,但我們如何避免額外的計算?答案很簡單:保存計算結果你會重用。
讓我們再看看相同的代碼塊,但這一次讓我們避免重新計算:
#建立一個執行計劃。#這將返回在不到一秒,但沒有工作df2 = (df. join (…).select (…)。過濾器(…))#保存它df2.write.save(路徑)#加載它df3 = spark.read.load(路徑)#現在使用它df3.display ()#這是不做任何額外的計算了。沒有連接,過濾等。它已經完成並保存。df3.display ()#這也不是df3.count ()
這尤其是當工作三角洲緩存是打開的。簡而言之,你受益匪淺懶惰的評估,但很多客戶被絆倒。beplay体育app下载地址所以要意識到它的存在並保存結果你重用,以避免不必要的計算。
下一個博客:設計你的表!
這是一個非常重要的話題,但它需要自己的博客。請繼續關注。與此同時,看看這個指南三角洲湖的最佳實踐。