J'essaie de lancer une application spark avec bin/spark-submit. Lorsque je référence mon fichier d'application dans mon système de fichiers local, cela fonctionne. Cependant, lorsque j'ai copié mon application dans un répertoire en hdfs, j'obtiens l'exception suivante:
Avertissement: Ignorer le fichier jar distant hdfs: // localhost: 9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar ..__ Java.lang.ClassNotFoundException: com.example.SimpleApp
Voici la commande:
$ ./bin/spark-submit --class com.example.SimpleApp --master local hdfs://localhost:9000/user/hdfs/jars/simple-project-1.0-SNAPSHOT.jar
J'utilise hadoop version 2.6.0, spark version 1.2.1
La seule façon dont cela a fonctionné pour moi, quand j'utilisais
- groupe de fils maître
Pour rendre la bibliothèque HDFS accessible au travail par étincelle, vous devez exécuter le travail en mode cluster.
$SPARK_HOME/bin/spark-submit \
--deploy-mode cluster \
--class <main_class> \
--master yarn-cluster \
hdfs://myhost:8020/user/root/myjar.jar
En outre, Spark JIRA est généré pour le mode client, qui n'est pas encore pris en charge.
SPARK-10643 : Support du téléchargement d'application HDFS en mode client spark submit
Il y a une solution de contournement. Vous pouvez monter le répertoire dans HDFS (qui contient votre fichier jar d’application) en tant que répertoire local.
J'ai fait la même chose (avec le stockage blob Azure, mais il devrait être similaire pour HDFS)
exemple de commande pour Azure wasb
Sudo mount -t cifs //{storageAccountName}.file.core.windows.net/{directoryName} {local directory path} -o vers=3.0,username={storageAccountName},password={storageAccountKey},dir_mode=0777,file_mode=0777
Maintenant, dans votre commande spark submit, vous fournissez le chemin de la commande ci-dessus
$ ./bin/spark-submit --class com.example.SimpleApp --master local {local directory path}/simple-project-1.0-SNAPSHOT.jar