在启动时给 spark-shell 的包解析器配置代理
在 --packages 解析之前提供驱动 JVM 的代理属性;之后输入的 shell 代码与 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 选项会在依赖解析之前到达。请用所安装 Spark 版本支持的选项,把示例端点和 group:artifact:version 替换为预期值。Java 的主机名和端口是两个独立的属性。对于获准的公共依赖下载,HTTP 代理列表可为这些字段提供候选。
当 --packages 在 shell 可用之前就失败时,应使用这个位置。之后输入的应用程序代码无法修复先前那次下载。Spark 区分启动选项与程序内设置;在客户端模式下,应用程序代码运行时驱动 JVM 已经存在。
部署模式对 spark.driver.extraJavaOptions 同样重要:驱动可能运行在另一台机器上,而那台机器需要自己的代理路径。executor 之后的 API 请求是另一个进程、另一个网络位置;配置 executor 并不一定配置启动时的解析。
启动选项已存在但下载失败时
沿着仓库主机名、请求类型和第一条错误排查。元数据与构件可能来自多个主机。与 Maven 兼容的仓库 URL 并不能证明 Spark 会读取成功 Maven 命令所用的那个 settings.xml。
Java 下载器必须支持代理机制和所需的身份验证。主机/端口属性并不覆盖所有方案,而凭空编造的 http.proxyUsername 属性不会仅因 Java 接受该名称就生效。诊断这一阶段时,请把启动前配置和具体失败的下载放在一起看。