使用不正確參數值的多任務工作流

如果在同一個集群上運行的並行任務使用Scala伴生對象,由於在JVM中共享單個類,可能會使用錯誤的值。

寫的Rajeev kannan Thangaiah

最後發布日期:2022年12月5日

問題

在多任務工作流中使用鍵-值參數是一個常見的用例。有多個任務並行運行是正常的,每個任務對於同一個鍵可以有不同的參數值。這些鍵-值參數在代碼中讀取,並由每個任務使用。

例如,假設你有四個任務:task1task2task3,task4在工作流作業中。表名參數鍵和參數值是否為員工部門位置,聯係人

在運行作業時,您希望每個任務獲得自己的參數。但是,如果應用程序代碼使用Scala伴生對象,您可能會注意到一個任務參數應用於所有其他任務,而不是應用每個任務的各自參數。這會產生不一致的結果。

在我們的示例中,如果任務使用Scala伴生對象並行運行,則任何一個任務參數(例如,task4參數聯係人)可以作為表名傳遞給其他三個任務。

導致

當在應用程序代碼中使用伴生對象時,伴生對象中有一個可並發修改的可變狀態。因為所有任務都運行在同一個集群上,所以該類隻加載一次,所有任務都運行在同一個Java虛擬機(JVM)下。

解決方案

您可以通過應用這些解決方案之一來緩解這個問題。最佳選擇取決於您的特定用例。

  • 按順序運行作業(在任務中添加依賴項)。
  • 將每個任務安排在不同的集群上。
  • 重寫加載配置的代碼,以便顯式地創建一個新對象,而不是使用伴生對象的共享狀態。
這篇文章有用嗎?