如何在公司代理后面使用 spark-shell 解析外部包?
Posted
技术标签:
【中文标题】如何在公司代理后面使用 spark-shell 解析外部包?【英文标题】:How to resolve external packages with spark-shell when behind a corporate proxy? 【发布时间】:2016-08-09 03:40:22 【问题描述】:我想在公司代理后面运行带有外部包的 spark-shell。不幸的是,通过--packages
选项传递的外部包无法解析。
例如,在运行时
bin/spark-shell --packages datastax:spark-cassandra-connector:1.5.0-s_2.10
cassandra 连接器包未解析(卡在最后一行):
Ivy Default Cache set to: /root/.ivy2/cache
The jars for the packages stored in: /root/.ivy2/jars
:: loading settings :: url = jar:file:/opt/spark/lib/spark-assembly-1.6.1-hadoop2.6.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
datastax#spark-cassandra-connector added as a dependency
:: resolving dependencies :: org.apache.spark#spark-submit-parent;1.0
confs: [default]
一段时间后,连接超时,并包含如下错误消息:
:::: ERRORS
Server access error at url https://repo1.maven.org/maven2/datastax/spark-cassandra-connector/1.5.0-s_2.10/spark-cassandra-connector-1.5.0-s_2.10.pom (java.net.ConnectException: Connection timed out)
当我使用公司代理停用 *** 时,程序包会立即解析并下载。
到目前为止我尝试了什么:
将代理暴露为环境变量:
export http_proxy=<proxyHost>:<proxyPort>
export https_proxy=<proxyHost>:<proxyPort>
export JAVA_OPTS="-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort>"
export ANT_OPTS="-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort>"
使用额外的 java 选项运行 spark-shell:
bin/spark-shell --conf "spark.driver.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort>" --conf "spark.executor.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort>" --packages datastax:spark-cassandra-connector:1.6.0-M1-s_2.10
我还缺少其他一些配置可能性吗?
【问题讨论】:
这里你缺少https.proxyHost
& 端口
【参考方案1】:
找到正确的设置:
bin/spark-shell --conf "spark.driver.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>" --packages <somePackage>
http 和 https 代理都必须设置为额外的驱动程序选项。 JAVA_OPTS 似乎什么也没做。
【讨论】:
你知道如何使用 spark-submit --master yarn --deploy-mode 集群做到这一点吗? 对我来说 spark2-submit 这工作'--driver-java-options "-Dhttps.proxyHost=httpproxy -Dhttps.proxyPort=80"' 嗨@mtsz,我还是有问题。我已经使用this site 上存在的代理之一配置了该命令。但这并不能解决我的问题。我不知道该怎么办。你能指导我解决我的问题吗? my *** question 和 my github issue @MostafaGhadimi 你能解决这个问题吗,因为我也面临同样的问题。 @abheet22 我使用了一些不同的 jar 文件,而不是之前的。【参考方案2】:如果您的操作系统上正确配置了代理,您可以使用 java 属性:java.net.useSystemProxies
:
--conf "spark.driver.extraJavaOptions=-Djava.net.useSystemProxies=true"
因此将配置代理主机/端口和无代理主机。
【讨论】:
这是最简单的方法,而且效果很好,谢谢。【参考方案3】:这在 spark 1.6.1 中对我有用:
bin\spark-shell --driver-java-options "-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>" --packages <package>
【讨论】:
【参考方案4】:在我发现这个之前一直在与 pyspark 斗争:
补充@Tao Huang 的回答:
bin/pyspark --driver-java-options="-Dhttp.proxyUser=user -Dhttp.proxyPassword=password -Dhttps.proxyUser=user -Dhttps.proxyPassword=password -Dhttp.proxyHost=proxy -Dhttp.proxyPort=port -Dhttps.proxyHost=proxy -Dhttps.proxyPort=port" --packages [groupId:artifactId]
即应该是 -Dhttp(s)。proxyUser 而不是 ...proxyUsername
【讨论】:
【参考方案5】:添加
spark.driver.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>
到$SPARK_HOME/conf/spark-defaults.conf
为我工作。
【讨论】:
【参考方案6】:如果你需要认证才能使用代理,你可以在默认的conf文件中使用如下:
spark.driver.extraJavaOptions -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= -Dhttp.proxyUsername= -Dhttp.proxyPassword= -Dhttps.proxyUsername= -Dhttps.proxyPassword=
【讨论】:
【参考方案7】:在带有 spark-2.0.0-bin-hadoop2.7 的 Windows 7 上,我在 %SPARK_HOME%"\spark-2.0.0-bin-hadoop2.7\conf\spark-defaults.conf
中设置了 spark.driver.extraJavaOptions
,例如:
spark.driver.extraJavaOptions -Dhttp.proxyHost=hostname -Dhttp.proxyPort=port -Dhttps.proxyHost=host -Dhttps.proxyPort=port
【讨论】:
以上是关于如何在公司代理后面使用 spark-shell 解析外部包?的主要内容,如果未能解决你的问题,请参考以下文章
Keycloak Node.js 适配器在公司代理后面不起作用
在公司代理服务器后面安装Visual Studio 2017
从公司代理服务器后面连接到Service Fabric集群端点