解決Apache Spark 中的依賴問題
Apache Spark 動態建構其類路徑,增加了其對java.lang.ClassNotFoundException 等依賴問題的敏感性,對象x 不是包 y的成員,並且java.lang.NoSuchMethodError.
解決這些問題的關鍵在於理解Spark 應用程式的各個組件:
-
驅動程式: 執行應用程式邏輯並管理集群連接。
-
叢集管理器:分配資源應用程式的(執行器)。
-
執行器:執行實際的處理任務。
每個組件都需要特定的類,如下圖所示:
[班級分班概述圖圖像]
Spark代碼:
- 必須存在於所有組件中以促進通訊。
- 在所有元件中使用相同的 Scala 和 Spark 版本。
僅限駕駛程式碼:
分散式程式碼:
- 必須送到執行者進行處理。
- 包含使用者轉換及其相依性。
依賴關係解析指南:
-
Spark 程式碼:
-
- 對於獨立模式,驅動程式必須與主節點和執行器上的 Spark 版本相符。
- 對於 YARN/Mesos,在啟動 SparkSession 時提供正確的 Spark 版本。將所有 Spark 依賴項運送到執行器。
-
驅動程式碼:
- 打包為單一或多個 jar,確保包含所有 Spark依賴項與使用者
-
分散式程式碼:
- 包裝為庫,包括使用者程式碼和依賴項。
- 使用spark.jars將庫發送給執行者
最佳實踐:
- 最佳實踐:
-
- 最佳實踐:
-
- 使用分散式程式碼建立庫,將它們打包為常規和胖罐子。
建置依賴這些函式庫和Spark 的驅動程式應用程式(具體將驅動程式應用程式打包為fat jar。將spark.jars 設定為分散式程式碼的位置。的位置二進位。
以上是如何有效解決 Apache Spark 應用程式中的依賴衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!