Apache Spark の依存関係の問題を解決する
Apache Spark はクラスパスを動的に構築するため、java.lang.ClassNotFoundException などの依存関係の問題の影響を受けやすくなります。 、オブジェクト x はパッケージ y のメンバーではなく、かつjava.lang.NoSuchMethodError.
これらの問題を解決する鍵は、Spark アプリケーションのさまざまなコンポーネントを理解することにあります。
-
ドライバー: アプリケーション ロジックを実行し、クラスター接続を管理します。
-
クラスターマネージャー: リソースを割り当てます。
-
エグゼキュータ: 実際の処理タスクを実行します。
次の図に示すように、各コンポーネントには特定のクラスが必要です。
【クラス配置概要図のイメージ】
Sparkコード:
- 通信を容易にするために、すべてのコンポーネントに存在する必要があります。
- すべてのコンポーネントで同じ Scala および Spark バージョンを使用します。
ドライバー専用コード:
配布コード:
- 処理のために実行者に送信する必要があります。
- ユーザー変換が含まれますそして彼らの
依存関係解決のガイドライン:
-
Spark コード:
- すべてのバージョンで一貫した Spark と Scala のバージョンを使用する
- スタンドアロン モードの場合、ドライバーはマスターおよびエグゼキューターの Spark バージョンと一致する必要があります。
- YARN/Mesos の場合は、SparkSession を開始するときに正しい Spark バージョンを指定します。すべての Spark 依存関係をエグゼキューターに送信します。
-
ドライバー コード:
- 単一または複数の jar としてパッケージ化し、確実に含めるようにします。すべての Spark 依存関係とユーザーのcode.
-
配布コード:
- ユーザー コードと依存関係を含むライブラリとしてパッケージ化します。
- spark.jars を使用してライブラリをエグゼキュータに送信する
ベスト プラクティス:
- 分散コードを使用してライブラリを作成し、通常の jar および fat jar としてパッケージ化します。
- これらのライブラリと Spark (特定の) に依存するドライバー アプリケーションを構築します。
- ドライバー アプリケーションを Fat jar としてパッケージ化します。
- spark.jars を配布コードの場所に設定します。
- spark.yarn.archive を Spark の場所に設定します。バイナリ。
以上がApache Spark アプリケーションの依存関係の競合を効果的に解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。