spark-shell のパッケージリゾルバーに起動時のプロキシを渡す
--packages の解決より前にドライバー JVM のプロキシ設定を渡します。後から実行するシェルコードや executor の設定では、そのダウンロードを取り逃がすことがあります。
spark-shell --driver-java-options "-Dhttp.proxyHost=proxy.example -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example -Dhttps.proxyPort=8080" --packages group:artifact:versionクライアント側の spark-shell 起動では、これらのドライバー JVM オプションが依存関係の解決より前に届きます。例示したエンドポイントと group:artifact:version は、インストール済みの Spark バージョンが対応するオプションを使って意図した値に置き換えてください。Java のホスト名とポートは別々のプロパティです。許可された公開依存関係のダウンロードには、HTTPプロキシ一覧がこれらの項目の候補を提供します。
シェルが利用可能になる前に --packages が失敗する場合は、この位置を使ってください。後から入力したアプリケーションコードでは、先のダウンロードを修復できません。Spark は起動オプションとプログラム上の設定を区別します。クライアントモードでは、アプリケーションコードが動く時点でドライバー JVM はすでに存在します。
spark.driver.extraJavaOptions ではデプロイモードも重要です。ドライバーが別のマシンで動く場合、そのマシンはプロキシへの独自の経路を必要とします。executor の後続の API 要求は別のプロセスであり別のネットワーク位置です。executor を設定しても、起動時の解決が設定されるとは限りません。
起動オプションはあるのにダウンロードが失敗する場合
リポジトリのホスト名、要求の種類、最初のエラーを追ってください。メタデータとアーティファクトは複数のホストから来ることがあります。Maven 互換のリポジトリ URL は、成功した Maven コマンドが使う settings.xml を Spark が読むことを証明しません。
Java のダウンローダーはプロキシの仕組みと必要な認証に対応している必要があります。ホスト/ポートのプロパティはすべてのスキームを提供するわけではなく、でっち上げた http.proxyUsername プロパティは Java が名前を受け入れるというだけでは有効になりません。この段階を診断するときは、起動前の構成と具体的に失敗したダウンロードを一緒に保ってください。