如何解決手動調參中問題?火山引擎DataLeap來告訴你

字節跳動數據平臺目前使用了1萬多個任務執行隊列,支持DTS、HSQL、Spark、Python、Flink、Shell等50多種類型的任務。

在手動調參的過程中,我們常常面臨以下困境:

•專業知識缺乏:

○通常由數據分析師來執行優化任務,但他們更側重於業務場景而非底層邏輯。因此,我們希望通過自動化方案沉澱專業知識,提供一站式解決方案。

•一致性與可重複性缺失:

○不同人員操作可能導致不一致的結果,手動調優往往難以復現。例如,昨天的分區調優效果良好,但明天可能因數據量增加而導致內存溢出(OOM),後續運維包括覆盤將需要投入大量時間成本。

針對業務方的優化需求,通常包括提高系統穩定性、降低運營成本、解決任務阻塞及提升系統健康度等多個方面。爲選擇最適合的優化策略,需深入理解以下幾個常見場景:

•穩定性與健康度:提高穩定性通常意味着需要犧牲一些資源利用率以保障運行效率;而提升健康度則旨在追求較高的資源利用率,儘管可能會對運行效率產生一些影響。

•成本優化:主要包括回收無效成本和最大化資源利用率兩個方向。由於業務方常存在大量未被充分利用的資源,我們需要協助他們提升任務的運行效率和縮短產出時間。

•解決阻塞:通過調整算力和內存等參數來緩解阻塞。若參數調優無法完全解決阻塞問題,就需要與用戶協作,優化任務的調度時間。

針對上述場景火山引擎DataLeap提供了一系列實時監控和自適應調整方案,以增強Spark等底層引擎的性能和穩定性:

•OOM自適應處理:針對易發生OOM的任務,我們將其調度至獨立的executor,讓其獨享container資源,從而在不增加總資源的前提下,減緩OOM的發生,保障任務的穩定運行。

•Shuffle溢寫分裂管理:我們設定了每個容器的Shuffle磁盤寫入量閾值。一旦寫入量超過閾值,系統會自動分裂出新的容器,避免單個容器的溢寫,同時減輕ESS的壓力。

•Shuffle分級限流機制:根據任務的優先級,分配不同的查詢處理速率(QPS)。高優先級任務將獲得更多的QPS,而低優先級任務的QPS會相應限制,以防止ESS服務過載,確保高優先級任務的順利執行。

•節點黑名單優化:爲了降低任務失敗率,我們實現了節點黑名單機制。當節點因特定失敗原因被標記時,任務會盡量避免在該節點上執行。我們還提供了設置黑名單節點數量上限的功能,防止過多節點被拉黑,影響整個集羣的可用性。

•失敗回滾與參數管理:當任務實例失敗時,系統會自動將參數回滾至上一個穩定版本。若連續失敗兩次,系統會自動抹除推薦參數並暫停優化,以避免對任務造成進一步的干擾。這種機制有助於降低業務波動對執行的風險,同時減少人工干預的成本。

通過火山引擎DataLeap這樣一站式解決方案,用戶可以快速發起治理。系統界面可以看到每個用戶當前可治理的資源量等信息,可以批量或者單個開啓優化,可以選擇激進或普通策略,支持小文件優化,系統會根據業務場景自動適配。在做優化方案的同時,系統就會預估出成本和收益。