L'écriture de fichiers sur le système local avec une Étincelle dans le mode Cluster

Je sais que c'est une drôle de façon de l'utilisation de Spark, mais je vais essayer d'enregistrer un dataframe pour le système de fichiers local (pas hdfs) à l'aide de l'Étincelle même si je suis dans cluster mode. Je sais que je peux utiliser client mode mais je ne souhaitez exécuter dans cluster mode et ne se soucient pas qui nœud (sur 3) de l'application va s'exécuter sur le conducteur.
Le code ci-dessous est le pseudo-code de ce que je suis en train de faire.

//create dataframe
val df = Seq(Foo("John", "Doe"), Foo("Jane", "Doe")).toDF()
//save it to the local file system using 'file://' because it defaults to hdfs://
df.coalesce(1).rdd.saveAsTextFile(s"file://path/to/file")

Et c'est de cette façon que je vous soumets l'étincelle de l'application.

spark-submit --class sample.HBaseSparkRSample --master yarn-cluster hbase-spark-r-sample-assembly-1.0.jar

Cela fonctionne bien si je suis dans local mode mais ne pas en yarn-cluster mode.

Par exemple, java.io.IOException: Mkdirs failed to create file se produit avec le code ci-dessus.

J'ai changé le df.coalesce(1) partie de df.collect et a tenté d'enregistrer un fichier à l'aide de la plaine de la Scala, mais il a fini avec un Permission denied.

J'ai aussi essayé:

  • spark-submit avec root utilisateur
  • chowned yarn:yarn, yarn:hadoop, spark:spark
  • a donné chmod 777 de répertoires liés à

mais pas de chance.

Je suppose que cela a à voir quelque chose avec clusters, drivers and executors, et la user qui essaie d'écrire pour le système de fichiers local, mais je suis un peu coincé dans la résolution de ce problème par moi-même.

Je suis en utilisant:

  • Étincelle: 1.6.0-cdh5.8.2
  • Scala: 2.10.5
  • Hadoop: 2.6.0-cdh5.8.2

Tout soutien est le bienvenu et merci d'avance.

Certains des articles que j'ai essayé:

  • "Étincelle saveAsTextFile() résultats dans Mkdirs n'a pas pu créer de la moitié du répertoire" -> Essayé de changer les utilisateurs, mais rien n'a changé
  • "Impossible d'enregistrer le CA en tant que fichier texte de système de fichiers local" -> chmod ne m'a pas aidé

Édité (2016/11/25)

C'est l'Exception-je obtenir.

java.io.IOException: Mkdirs failed to create file:/home/foo/work/rhbase/r/input/input.csv/_temporary/0/_temporary/attempt_201611242024_0000_m_000000_0 (exists=false, cwd=file:/yarn/nm/usercache/foo/appcache/application_1478068613528_0143/container_e87_1478068613528_0143_01_000001)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:449)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:435)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:920)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:813)
at org.apache.hadoop.mapred.TextOutputFormat.getRecordWriter(TextOutputFormat.java:135)
at org.apache.spark.SparkHadoopWriter.open(SparkHadoopWriter.scala:91)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1193)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1185)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
16/11/24 20:24:12 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, localhost): java.io.IOException: Mkdirs failed to create file:/home/foo/work/rhbase/r/input/input.csv/_temporary/0/_temporary/attempt_201611242024_0000_m_000000_0 (exists=false, cwd=file:/yarn/nm/usercache/foo/appcache/application_1478068613528_0143/container_e87_1478068613528_0143_01_000001)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:449)
at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:435)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:920)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:813)
at org.apache.hadoop.mapred.TextOutputFormat.getRecordWriter(TextOutputFormat.java:135)
at org.apache.spark.SparkHadoopWriter.open(SparkHadoopWriter.scala:91)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1193)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1185)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:89)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

OriginalL'auteur tkrhgch | 2016-11-24