如何在企业代理后面使用spark-shell解析外部包?

问题描述 投票:10回答:7

我想在公司代理后面使用外部包运行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)

当我使用公司代理停用VPN时,包将立即解析并下载。

到目前为止我尝试了什么:

将代理公开为环境变量:

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

是否有其他配置可能性我缺少?

apache-spark proxy dependencies ivy
7个回答
19
投票

找到了正确的设置:

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似乎没有做任何事情。


4
投票

这在火花1.6.1中对我有用:

bin\spark-shell --driver-java-options "-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>" --packages <package>

2
投票

如果在您的操作系统上正确配置了代理,则可以使用java属性:java.net.useSystemProxies

--conf "spark.driver.extraJavaOptions=-Djava.net.useSystemProxies=true"

因此将配置代理主机/端口和无代理主机。


1
投票

spark.driver.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>

$SPARK_HOME/conf/spark-defaults.conf为我工作。


1
投票

如果您需要身份验证才能使用代理,则可以在默认的conf文件中使用以下内容:

spark.driver.extraJavaOptions  -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort= -Dhttp.proxyUsername= -Dhttp.proxyPassword= -Dhttps.proxyUsername= -Dhttps.proxyPassword= 

1
投票

在发现这个问题之前我一直在和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


0
投票

在带有spark-2.0.0-bin-hadoop2.7的Windows 7上,我在spark.driver.extraJavaOptions中设置了%SPARK_HOME%"\spark-2.0.0-bin-hadoop2.7\conf\spark-defaults.conf,如:

spark.driver.extraJavaOptions -Dhttp.proxyHost=hostname -Dhttp.proxyPort=port -Dhttps.proxyHost=host -Dhttps.proxyPort=port
© www.soinside.com 2019 - 2024. All rights reserved.