2016-04-21 5 views
0

Ich habe Kopie kleistert eine Linie, die wie diesewholeTextFiles Unterschied zwischen Shell und App

val files = sc.wholeTextFiles("file:///path/to/files/*.csv") 

aus der Spark-Shell sieht, wo es läuft, zu einer Anwendung, wo es nicht läuft. Stattdessen bekomme ich, dass das Muster 0 Dateien entspricht, obwohl ich in der Shell alle Dateien sehen kann und Spark sie liest.

Was fehlt mir? Ist das ein Dateiberechtigungs-Problem?

Ich bin mit der App wie folgt:

spark-submit \ 
    --master yarn \ 
    --deploy-mode cluster \ 
    --files /usr/hdp/current/spark/conf/hive-site.xml \ 
    --num-executors 20 \ 
    --driver-memory 8G \ 
    --executor-memory 4G \ 
    --class com.myorg.pkg.MyApp \ 
    MyApp-assembly-0.1.jar 
+0

ist Ihre Datei im lokalen Dateisystem oder in den hdfs vorhanden? –

+0

Liefern Sie den absoluten Pfad oder einen relativen Pfad? – user1314742

+0

Es ist auf dem lokalen FS und der Pfad ist wie im Beispiel: Absolut. – Ian

Antwort

2

für diese arbeiten, um alle Ihre Testamentsvollstrecker Zugriff auf diese Datei benötigen. Wenn sich die Datei nicht für jeden Executor im lokalen Dateisystem befindet, treten Probleme auf.

Eine Option wäre, die Datei auf hdfs zu platzieren und den Pfad als hdfs:/path/to/file.csv anzugeben. Auf diese Weise haben alle Ausführenden Zugriff darauf.

Eine andere Option wäre, die Datei im Parameter --files zu übergeben. Dadurch wird die Datei an alle Executoren gesendet, sodass alle darauf zugreifen können.

+0

Ja, das habe ich herausgefunden, kurz nachdem ich meinen Laptop verlassen hatte. HDFS ist dann die beste Lösung. Vielen Dank! – Ian

+0

Übrigens stört mich, dass das in der Spark-Shell funktioniert. Wie kommt die Shell damit klar? Verwendet es nur den lokalen Knoten (d. H. 1 Executor)? – Ian

+0

Spark Shell funktioniert, weil es den Application Master lokal startet, wo die Datei @Ian existiert –