Apache Spark での依存関係の問題への対処
Apache Spark アプリケーションは、ビルドおよびデプロイ中に依存関係関連の問題に遭遇することがよくあります。これらの問題には、java.lang.ClassNotFoundException、オブジェクト x はパッケージ y のメンバーではありません、コンパイル エラー、および java.lang.NoSuchMethodError.
動的クラスパスと依存関係の管理
Spark のクラスパスは、ユーザー コードに対応するために動的に構築されるため、これらの問題が発生する可能性があります。さらに、使用される特定のクラスター マネージャー (マスター) については、さらなる考慮事項が必要になります。
コンポーネントとクラスの配置
Spark アプリケーションは次のコンポーネントで構成されます:
ドライバー: アプリケーションを初期化し、クラスター マネージャーに接続します。- クラスター マネージャー:リソース割り当てを容易にし、エグゼキュータに作業を分散します。
- エグゼキュータ: クラスター ノードで Spark タスクを実行します。
-
各コンポーネントのクラス配置を以下に示します:
コードの配布
クラス配置要件を理解することで、クラス間で適切なコード分散が可能になります。コンポーネント:
- Spark コード: すべてのコンポーネントで必要なライブラリが含まれており、3 つすべてで使用できる必要があります。
- ドライバー専用コード: 実行者への配布を必要としないユーザー コード。
- 配布済みコード: エグゼキューター上で実行する必要があり、エグゼキューターに配布する必要があるユーザー コード。
異なるクラスター マネージャーでの依存関係管理
スタンドアロン:
すべてのドライバーが次のことを行う必要があります。マスターおよびエグゼキューターとして同じ Spark バージョンを使用します。-
YARN / Mesos:
アプリケーションごとに異なる Spark バージョンを許可します。-
ドライバーのバージョンは、コンパイル中に使用されたバージョンと一致する必要があります。パッケージ化。- 推移的な依存関係を含む Spark の依存関係は、配布された jar/アーカイブに含める必要があります。
-
YARN を使用した推奨アプローチ
依存関係の問題を最小限に抑えるには、次の点を考慮してください。アプローチ:
通常の jar とファット jar の両方として分散コードを含むライブラリを作成します。- 分散コード ライブラリと Apache Spark (特定のバージョン) に依存するドライバー アプリケーションを作成します。 ).
- ドライバー アプリケーションを Fat jar としてパッケージ化します。
- spark.jars パラメーターを使用します配布コードのバージョンを指定します。
- spark.yarn.archive パラメーターを使用して、Spark バイナリを含むアーカイブ ファイルを提供します。
-
以上がApache Spark アプリケーションでのエラーを回避するために依存関係を効果的に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。