你好,
目前我們使用的是司機:Standard_D32s_v3·工人:Standard_D32_v3·2 - 8工人·6.4擴展支持(包括Apache火花2.4.5,Scala 2.11)集群。我們24/7運行流筆記本的觸發每一分鍾和5管道具有不同時間線觸發器。當我們開始24小時後的所有觸發器正常執行。後來流和管道相關的筆記本開始失敗了。這意味著筆記本執行時間增加,每個命令采取更多的時間來執行。上圖顯示24小時之後集群指標執行。
https://dbricks.co/3VWeuRJ經過這個鏈接我開始升級12.0運行時版本。對於這個我麵臨問題而執行DDL和DML以下格式的查詢。
進口com.microsoft.azure.sqldb.spark.config.Config
進口com.microsoft.azure.sqldb.spark.connect._
進口com.microsoft.azure.sqldb.spark.query._
val查詢= "截斷表的表"
val配置=配置(地圖(
“url”- > dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“DW-URL”),
“數據庫名”- > dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“DW-DBName”),
“用戶”- > dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Username”),
“密碼”- > dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Password”),
“queryCustom”- >查詢
))
sqlContext.sqlDBQuery(配置)
誰能建議的方法來解決我的問題的最佳方法。
感謝和問候。
嗨Suteja,
我們驗證代碼和刪除不必要的命令還我們仍麵臨的問題。我們嚐試清除緩存使用spark.catalog.clearCache()這段代碼。在集群的性能仍然沒有改變。
截斷表現在好工作。我發現不同的查詢的執行12.0運行時版本。
進口java.sql。{連接、DriverManager語句}
val jdbcUrl = dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“nycsqlserver-DW-ConnectionString”)
用戶= dbutils.secrets瓦爾。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Username”)
= dbutils.secrets val密碼。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Password”)
val updateQuery = "截斷表的表"
康涅狄格州var:連接= null
var支撐:聲明= null
嚐試{
康涅狄格州= DriverManager。getConnection (jdbcUrl、用戶密碼)
支撐= conn.createStatement ()
stmt.executeUpdate (updateQuery)
}catch {
例e:異常= > e.printStackTrace ()
最後}{
如果(支撐! = null) stmt.close ()
如果(康涅狄格州! = null) conn.close ()
}
通過使用上麵的代碼可以執行查詢。
定期重啟部分有機會提高性能與重新啟動集群。別的,有沒有自動集群啟動選項可以在磚,避免手動重啟。
普拉薩德@Someswara杜爾迦Yaralgadda:我給你一些想法如何考慮這個問題。請測試並實現什麼最適合你。
有幾件事你可以做筆記本的性能優化:
關於你麵臨的具體問題,刪除一個表可以是資源密集型的操作,可能需要更長的時間來執行更大的表。你可能想要考慮優化表模式或分區數據來提高查詢的性能。此外,你可以嚐試使用DROP TABLE語句代替截斷表,它有時會更快。
最後,如果你的筆記本運行24/7,這可能是一個好主意,定期啟動內核釋放任何資源隨著時間的推移,可能已經被消費。
嗨Suteja,
我們驗證代碼和刪除不必要的命令還我們仍麵臨的問題。我們嚐試清除緩存使用spark.catalog.clearCache()這段代碼。在集群的性能仍然沒有改變。
截斷表現在好工作。我發現不同的查詢的執行12.0運行時版本。
進口java.sql。{連接、DriverManager語句}
val jdbcUrl = dbutils.secrets。得到(=“azurekeyvault-scope”範圍,鍵=“nycsqlserver-DW-ConnectionString”)
用戶= dbutils.secrets瓦爾。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Username”)
= dbutils.secrets val密碼。得到(=“azurekeyvault-scope”範圍,鍵=“DW-Password”)
val updateQuery = "截斷表的表"
康涅狄格州var:連接= null
var支撐:聲明= null
嚐試{
康涅狄格州= DriverManager。getConnection (jdbcUrl、用戶密碼)
支撐= conn.createStatement ()
stmt.executeUpdate (updateQuery)
}catch {
例e:異常= > e.printStackTrace ()
最後}{
如果(支撐! = null) stmt.close ()
如果(康涅狄格州! = null) conn.close ()
}
通過使用上麵的代碼可以執行查詢。
定期重啟部分有機會提高性能與重新啟動集群。別的,有沒有自動集群啟動選項可以在磚,避免手動重啟。
普拉薩德@Someswara杜爾迦Yaralgadda:
我很高興聽到你能夠解決問題與執行DDL查詢新的運行時版本。
關於你問題定期重新啟動集群來提高性能,這是一種常見的做法,防止長時間運行的集群變得不穩定,並確保集群資源被有效利用。通過定期重新啟動集群,您可以發布任何積累資源和刷新運行時環境,它可以幫助優化性能。
然而,手動重新啟動集群可能是耗時的,並且可能導致中斷正在進行的工作負載。磚集群提供了一個自動終止功能,允許您指定的時間或時間活躍集群,集群之後,將自動終止。這個特性可以幫助你節省成本,確保集群隻需要運行時,它也可以幫助確保集群定期刷新,以優化性能。
集群啟用自動終止,可以導航到磚中的集群設置工作區並選擇“自動終止”選項。從那裏,您可以指定的最大空閑時間或持續時間集群,集群之後,將自動終止。
除了集群自動終止,你也可以考慮優化代碼和工作負載來減少所需的內存和計算資源集群。這可以包括修剪技術,如數據,緩存,分區,以及優化代碼和查詢減少需要處理的數據量。通過優化你的工作負載和資源,可以幫助確保您的集群運行效率和成本效益。