web-dev-qa-db-fra.com

Comment résoudre les paquets externes avec spark-Shell quand derrière un proxy d'entreprise?

Je voudrais exécuter spark-Shell avec un paquet externe derrière un proxy d'entreprise. Malheureusement, les packages externes transmis via l'option --packages ne sont pas résolus.

Par exemple, en cours d'exécution

bin/spark-Shell --packages datastax:spark-cassandra-connector:1.5.0-s_2.10

le paquet de connecteurs cassandra n'est pas résolu (coincé à la dernière ligne):

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]

Après un certain temps, la connexion expire et contient des messages d'erreur tels que:

:::: 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)

Lorsque je désactive le VPN avec le proxy d'entreprise, le paquet est résolu et téléchargé immédiatement.

Ce que j'ai essayé jusqu'à présent:

Exposer les mandataires en tant que variables d'environnement:

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>"

Lancer spark-Shell avec des options Java supplémentaires:

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

Existe-t-il une autre possibilité de configuration qui me manque?

8
mtsz

Trouvé les paramètres corrects:

bin/spark-Shell --conf "spark.driver.extraJavaOptions=-Dhttp.proxyHost=<proxyHost> -Dhttp.proxyPort=<proxyPort> -Dhttps.proxyHost=<proxyHost> -Dhttps.proxyPort=<proxyPort>" --packages <somePackage>

Les proxies http et https doivent être définis comme des options de pilote supplémentaires. Java_OPTS ne semble rien faire.

17
mtsz

Cela a fonctionné pour moi dans 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
Ian Jones

Ajouter

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

à $SPARK_HOME/conf/spark-defaults.conf fonctionne pour moi.

1
Avatar Zhang

Si vous avez besoin d'une authentification pour utiliser un proxy, vous pouvez utiliser le fichier conf par défaut ci-dessous:

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

Sur Windows 7 avec spark-2.0.0-bin-hadoop2.7, j'ai défini le spark.driver.extraJavaOptions dans %SPARK_HOME%"\spark-2.0.0-bin-hadoop2.7\conf\spark-defaults.conf comme suit:

spark.driver.extraJavaOptions -Dhttp.proxyHost=hostname -Dhttp.proxyPort=port -Dhttps.proxyHost=Host -Dhttps.proxyPort=port
0
Grady G Cooper

Si le proxy est correctement configuré sur votre système d'exploitation, vous pouvez utiliser la propriété Java: Java.net.useSystemProxies:

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

ainsi, les hôtes proxy port/hôte et non proxy seront configurés.

0
Thomas Decaux