PySpark通过代理访问资源报错407 Proxy Authentication Required问题问询
配置失效核心原因
- 配置项误用:方案3中将JVM代理参数错误配置到
spark.driver.extraClassPath,该参数仅用于指定Driver进程的类路径,不会作为JVM启动参数生效,正确的参数应为spark.driver.extraJavaOptions和spark.executor.extraJavaOptions。 - 配置顺序错误:
SparkContext.setSystemProperty必须在SparkContext或SparkSession初始化前调用,若上下文已完成初始化再修改属性不会生效。 - 配置项缺失:方案1仅配置了HTTP代理的用户名密码,未同步配置HTTPS代理的对应参数,访问HTTPS资源时会触发认证失败。
- 拼写错误:YARN Application Master的环境变量配置应为
spark.yarn.appMasterEnv.*,原写法缺失字母n,导致YARN模式下环境变量不生效。
可行解决方案
代码内配置(适用交互式/脚本运行)
在脚本最开头、SparkSession初始化前完成所有配置,示例如下:
from pyspark import SparkContext from pyspark.sql import SparkSession import os # 先同步Python进程的代理环境变量,匹配直连时的生效逻辑 os.environ['HTTP_PROXY'] = 'http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>' os.environ['HTTPS_PROXY'] = 'http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>' # 提前设置JVM系统属性,必须放在SparkSession初始化前 SparkContext.setSystemProperty("http.proxyUser", "<代理用户名>") SparkContext.setSystemProperty("http.proxyPassword", "<代理密码>") SparkContext.setSystemProperty("http.proxyHost", "<代理主机>") SparkContext.setSystemProperty("http.proxyPort", "<代理端口>") SparkContext.setSystemProperty("https.proxyUser", "<代理用户名>") SparkContext.setSystemProperty("https.proxyPassword", "<代理密码>") SparkContext.setSystemProperty("https.proxyHost", "<代理主机>") SparkContext.setSystemProperty("https.proxyPort", "<代理端口>") SparkContext.setSystemProperty("jdk.http.auth.tunneling.disabledSchemes", "") SparkContext.setSystemProperty("jdk.http.auth.proxying.disabledSchemes", "") # 构建SparkSession,补全所有正确配置 spark = SparkSession.builder.appName("<你的应用名称>") \ .config("spark.driver.extraJavaOptions", "-Dhttp.proxyUser=<代理用户名> -Dhttp.proxyPassword=<代理密码> -Dhttp.proxyHost=<代理主机> -Dhttp.proxyPort=<代理端口> -Dhttps.proxyUser=<代理用户名> -Dhttps.proxyPassword=<代理密码> -Dhttps.proxyHost=<代理主机> -Dhttps.proxyPort=<代理端口> -Djdk.http.auth.tunneling.disabledSchemes= -Djdk.http.auth.proxying.disabledSchemes=") \ .config("spark.executor.extraJavaOptions", "-Dhttp.proxyUser=<代理用户名> -Dhttp.proxyPassword=<代理密码> -Dhttp.proxyHost=<代理主机> -Dhttp.proxyPort=<代理端口> -Dhttps.proxyUser=<代理用户名> -Dhttps.proxyPassword=<代理密码> -Dhttps.proxyHost=<代理主机> -Dhttps.proxyPort=<代理端口> -Djdk.http.auth.tunneling.disabledSchemes= -Djdk.http.auth.proxying.disabledSchemes=") \ .config("spark.executorEnv.HTTP_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .config("spark.executorEnv.HTTPS_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .config("spark.driverEnv.HTTP_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .config("spark.driverEnv.HTTPS_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .config("spark.yarn.appMasterEnv.HTTP_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .config("spark.yarn.appMasterEnv.HTTPS_PROXY", "http://<代理用户名>:<代理密码>@<代理主机>:<代理端口>") \ .getOrCreate()
spark-submit提交配置(适用集群提交,避免硬编码密码)
提交时直接在命令行传入参数即可:
spark-submit \ --conf spark.driver.extraJavaOptions="-Dhttp.proxyUser=<代理用户名> -Dhttp.proxyPassword=<代理密码> -Dhttp.proxyHost=<代理主机> -Dhttp.proxyPort=<代理端口> -Dhttps.proxyUser=<代理用户名> -Dhttps.proxyPassword=<代理密码> -Dhttps.proxyHost=<代理主机> -Dhttps.proxyPort=<代理端口> -Djdk.http.auth.tunneling.disabledSchemes= -Djdk.http.auth.proxying.disabledSchemes=" \ --conf spark.executor.extraJavaOptions="-Dhttp.proxyUser=<代理用户名> -Dhttp.proxyPassword=<代理密码> -Dhttp.proxyHost=<代理主机> -Dhttp.proxyPort=<代理端口> -Dhttps.proxyUser=<代理用户名> -Dhttps.proxyPassword=<代理密码> -Dhttps.proxyHost=<代理主机> -Dhttps.proxyPort=<代理端口> -Djdk.http.auth.tunneling.disabledSchemes= -Djdk.http.auth.proxying.disabledSchemes=" \ --conf spark.executorEnv.HTTP_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ --conf spark.executorEnv.HTTPS_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ --conf spark.driverEnv.HTTP_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ --conf spark.driverEnv.HTTPS_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ --conf spark.yarn.appMasterEnv.HTTP_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ --conf spark.yarn.appMasterEnv.HTTPS_PROXY=http://<代理用户名>:<代理密码>@<代理主机>:<代理端口> \ 你的脚本名称.py
验证方法
配置完成后可执行以下代码验证代理是否生效:
# 尝试拉取公网资源验证 spark.sparkContext.addFile("https://example.com/index.html")
如果没有抛出407错误则说明配置生效。
内容的提问来源于stack exchange,提问作者Gonzalo Pérez Fernández
相关产品推荐
相关产品推荐

