web-dev-qa-db-fra.com

Spark on K8s - erreur: le mode kube ne prend pas en charge les dépendances des applications au niveau local

J'essaye d'installer un groupe d'étincelles sur k8s. J'ai réussi à créer et à configurer un cluster avec trois nœuds en suivant cet article: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

Après cela, lorsque j'ai essayé de déployer spark sur le cluster, cela a échoué lors de la configuration de la soumission et de l'envoi. J'ai utilisé cette commande:

~/opt/spark/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \
--master k8s://https://206.189.126.172:6443 \
--deploy-mode cluster \
--name Word-count \
--class org.Apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=docker.io/garfiny/spark:v2.3.0 \
—-conf spark.kubernetes.driver.pod.name=Word-count \
local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar

Et cela me donne cette erreur:

Exception in thread "main" org.Apache.spark.SparkException: The Kubernetes mode does not yet support referencing application dependencies in the local file system.
    at org.Apache.spark.deploy.k8s.submit.DriverConfigOrchestrator.getAllConfigurationSteps(DriverConfigOrchestrator.scala:122)
    at org.Apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:229)
    at org.Apache.spark.deploy.k8s.submit.KubernetesClientApplication$$anonfun$run$5.apply(KubernetesClientApplication.scala:227)
    at org.Apache.spark.util.Utils$.tryWithResource(Utils.scala:2585)
    at org.Apache.spark.deploy.k8s.submit.KubernetesClientApplication.run(KubernetesClientApplication.scala:227)
    at org.Apache.spark.deploy.k8s.submit.KubernetesClientApplication.start(KubernetesClientApplication.scala:192)
    at org.Apache.spark.deploy.SparkSubmit$.org$Apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:879)
    at org.Apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:197)
    at org.Apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:227)
    at org.Apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:136)
    at org.Apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

2018-06-04 10:58:24 INFO ShutdownHookManager: 54 - Le crochet d'arrêt appelé 2018-06-04 10:58:24 INFO ShutdownHookManager: 54 - Suppression du répertoire/private/var/folder/lz/0bb8xlyd247cwc3kvh6pmr/00/spark-3967f4ae-e8b3-428d-ba22-580fc9c840cd

Note: J'ai suivi cet article pour installer spark sur k8s . https://spark.Apache.org/docs/latest/running-on-kubernetes.html

13
garfiny

Le message d'erreur provient de commit 5d7c4ba4d73a72f26d591108db3c20b4a6c84f3f et comprend la page mentionnée: " Running Spark on Kubernetes " avec la mention que vous indiquez:

// TODO(SPARK-23153): remove once submission client local dependencies are supported.
if (existSubmissionLocalFiles(sparkJars) || existSubmissionLocalFiles(sparkFiles)) {
  throw new SparkException("The Kubernetes mode does not yet support referencing application " +
    "dependencies in the local file system.")
}

Ceci est décrit dans SPARK-18278 :

il n'accepterait pas l'exécution d'un fichier local: jar, par exemple. local:///opt/spark/examples/jars/spark-examples_2.11-2.2.0-k8s-0.5.0.jar, sur mon image du menu d'étincelle (allowsMixedArguments et isAppResourceReq booleans dans SparkSubmitCommandBuilder.Java nous gênons). 

Et ceci est lié au numéro 34377 de kubernetes

Le numéro SPARK-22962 "L’application Kubernetes échoue si des fichiers locaux sont utilisés" mentionne:

Il s'agit du cas d'utilisation du serveur de transfert de ressources. Nous l'améliorerons dans la période 2.4.0.

Entre-temps, ce message d'erreur a été introduit dans PR 20320 .

Il comprend le commentaire:

Les tests manuels que j’ai effectués utilisent en fait un fichier jar principal de l’application situé sur gcs et http.
Pour être précis et pour mémoire, j'ai fait les tests suivants:

  • Utilisation d’un fichier jar principal de l’application gs: // et d’un fichier jar de dépendance http: //. Réussi.
  • Utilisation d'un fichier jar principal de l'application https: // et d'un fichier jar de dépendance http: //. Réussi.
  • Utilisation d'un fichier jar local: // main principal. Réussi.
  • Utilisation d'un fichier jar: application principale. Échoué.
  • Utilisation d'un fichier jar de dépendance fichier: //. Échoué.

Ce problème devrait déjà être résolu et le OP garfiny confirme dans les commentaires :

J'ai utilisé le plus récent spark-kubernetes jar pour remplacer celui du paquet spark-2.3.0-bin-hadoop2.7. L'exception est parti.

6
VonC

Selon le documentation } _:

Gestion de la dépendance

Si les dépendances de votre application sont toutes hébergés dans des emplacements distants tels que les serveurs HDFS ou HTTP, ils peuvent être référencés par leurs URI distants appropriés. Aussi, application les dépendances peuvent être pré-montées dans des images Docker personnalisées. Ceux des dépendances peuvent être ajoutées au classpath en les référençant avec local: // URI et/ou définition de l'environnement SPARK_EXTRA_CLASSPATH variable dans vos fichiers Dockerfiles. Le schéma local: // est également requis lorsque vous faites référence à des dépendances dans des images Docker personnalisées dans spark-submit

Notez que l’utilisation des dépendances d’application à partir du fichier Le système de fichiers local du client de soumission n’est pas encore pris en charge.

2
VAS

J'ai le même cas. 

Je ne sais pas quoi faire? Comment réparer? Spark version 2.3.0.

Spark-kubernetes_2.11-2.3.1.jar copié et renommé -> spark-kubernetes_2.11-2.3.0.jar 

Spark ne trouve pas les fichiers kubernetes correspondants.

bin/spark-submit \
--master k8s://https://lubernetes:6443 \
--deploy-mode cluster \
--name spark-pi \
--class org.Apache.spark.examples.SparkPi \
--conf spark.kubernetes.namespace=spark \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs \
--conf spark.kubernetes.authenticate.submission.caCertFile=/var/run/secrets/kubernetes.io/serviceaccount/k8.crt \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \ 
local:///usr/spark-2.3.0/examples/jars/spark-examples_2.11-2.3.0.jar

Merci pour l'aide!

0
JDev