web-dev-qa-db-fra.com

(null) entrée dans une exception de chaîne de commande dans saveAsTextFile () sur Pyspark

Je travaille dans PySpark sur un bloc-notes Jupyter (Python 2.7) sous Windows 7. J'ai un RDD de type pyspark.rdd.PipelinedRDD appelé idSums. En essayant d'exécuter idSums.saveAsTextFile("Output"), je reçois le message d'erreur suivant:

Py4JJavaError: An error occurred while calling o834.saveAsTextFile.
: org.Apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 33.0 failed 1 times, most recent failure: Lost task 1.0 in stage 33.0 (TID 131, localhost): Java.io.IOException: (null) entry in command string: null chmod 0644 C:\Users\seride\Desktop\Experiments\PySpark\Output\_temporary\0\_temporary\attempt_201611231307_0033_m_000001_131\part-00001

Il ne devrait y avoir aucun problème avec l'objet RDD, à mon avis, car je suis capable d'exécuter d'autres actions sans erreur, par exemple. l'exécution de idSums.collect() produit la sortie correcte.

En outre, le répertoire Output est créé (avec tous les sous-répertoires) et le fichier part-00001 est créé, mais sa taille est de 0 octets.

10
Jr Swec

Il vous manque winutils.exe un binaire hadoop. Selon le système x64 bit/x32 bit, téléchargez le fichier winutils.exe et définissez votre maison hadoop de manière à ce qu’elle soit pointée.

1ère voie:

1.Télécharger le fichier 

2.Créez le dossier hadoop dans votre système ex "C:"

3.Créer un dossier bin dans le répertoire hadoop ex: C:\hadoop\bin

4. coller winutils.exe dans bin ex: C:\hadoop\bin\winuitls.exe

5.Dans les variables utilisateur dans les propriétés système -> Paramètres système avancés

Créer une nouvelle variable Nom: HADOOP_HOME Chemin: C:\hadoop \

2ème manière:

Vous pouvez définir hadoop home directement dans votre programme Java à l’aide de la commande suivante:

System.setProperty ("hadoop.home.dir", "C:\hadoop");

23
Harpreet Varma

Une exception similaire m'indiquait que je rencontrais un problème d'autorisations lors du chargement d'un modèle intégré dans une autre machine et copié dans mon système Windows alors que mon HADOOP_HOME était défini. Je viens d’exécuter la commande suivante sur mon dossier de modèles - 

winutils.exe chmod -R 777 chemin-modèle.

1
jasoos

Même procédure que celle décrite ci-dessus par @Hapreet Varma

Winutils.exe vous manque un binaire Hadoop. Selon le système x64 bit/x32 bit, téléchargez le fichier winutils.exe et définissez votre maison hadoop pointant dessus.

1ère voie:

1.Télécharger le fichier

2.Créez le dossier hadoop dans votre système ex "C:"

3.Créer un dossier bin dans le répertoire hadoop ex: C:\hadoop\bin

4. coller winutils.exe dans bin ex: C:\hadoop\bin\winuitls.exe

5.Dans les variables utilisateur dans les propriétés système -> Paramètres système avancés

Créer un nouveau nom de variable: HADOOP_HOME Chemin: C:\hadoop \

2ème manière:

Vous pouvez définir hadoop home directement dans votre programme Java à l’aide de la commande suivante:

System.setProperty ("hadoop.home.dir", "C:\hadoop");

Si vous travaillez dans Eclipse Oxygen, vous devez redémarrer Eclipse après avoir défini la variable dans les propriétés système, sinon cela ne fonctionnera pas. En cas de chemin incorrect, Eclipse indiquera l'emplacement actuel de winutils au début du journal. quelque chose comme ça

2018-05-05 18:27:47 ERREUR Shell: 397 - Impossible de localiser le fichier binaire winutils dans le chemin binaire hadoop

Java.io.IOException: impossible de localiser l'exécutable null\bin\winutils.exe dans les fichiers binaires Hadoop.

Le journal complet des erreurs est ici

2018-05-05 18:27:47 ERROR Shell:397 - Failed to locate the winutils binary in the hadoop binary path
Java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.Apache.hadoop.util.Shell.getQualifiedBinPath(Shell.Java:379)
    at org.Apache.hadoop.util.Shell.getWinUtilsPath(Shell.Java:394)
    at org.Apache.hadoop.util.Shell.<clinit>(Shell.Java:387)
    at org.Apache.hadoop.util.StringUtils.<clinit>(StringUtils.Java:80)
    at org.Apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.Java:611)
    at org.Apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.Java:273)
    at org.Apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.Java:261)
    at org.Apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.Java:791)
    at org.Apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.Java:761)
    at org.Apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.Java:634)
    at org.Apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
    at org.Apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2464)
    at scala.Option.getOrElse(Option.scala:121)
    at org.Apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2464)
    at org.Apache.spark.SparkContext.<init>(SparkContext.scala:292)
    at org.Apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2486)
    at org.Apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:930)
    at org.Apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:921)
    at scala.Option.getOrElse(Option.scala:121)
    at org.Apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
    at com.dataflair.spark.Wordcount$.main(Wordcount.scala:13)
    at com.dataflair.spark.Wordcount.main(Wordcount.scala)