2016-04-17 18 views
5

Java'da bir Spark işi yazdım. iş gölgeli kavanozu olarak paketlenir ve yürütülür:Java'da kıvılcım işi: bir kümede çalıştırıldığında 'kaynakların' dosyalarına nasıl erişileceği

kodunda
spark-submit my-jar.jar 

, src/main/resources/templates ikamet bazı dosyaları (Freemarker şablonları) olmasıdır. Yerel olarak çalıştırdığınızda, ben mümkün erişim dosyaları değilim: Önceki satıra çalıştırıldığında

işin bir küme üzerinde çalıştırılır
File[] files = new File("src/main/resources/templates/").listFiles(); 

, boş-işaretçi istisna döndürülür.

Ben jar tf my-jar.jar çalıştırırsanız ben dosyaları templates/ klasörde paketlenmiş olduğunu görebilirsiniz:

[...] 
templates/ 
templates/my_template.ftl 
[...] 

ben onları okumak için sadece edemiyorum; .listFiles()'un küme düğümündeki yerel dosya sistemine erişmeye çalıştığından şüpheleniyorum ve dosyalar orada yok.

Bağımsız bir Spark işinde kullanılacak dosyaları nasıl paketlemem gerektiğini merak ediyorum. İşlerin dışında HDFS'ye kopyalamamayı tercih ederim, çünkü bu durumun bakımı karmaşık hale geliyor.

+0

Ustanızın ne olduğunu söyleyebilir misiniz? ve hangi dağıtım modunu kullanıyorsunuz? – user1314742

cevap

6

Varolan kodunuz onları paketlenmemiş ve Spark düğümlerine gönderilen dosyalar olarak adlandırıyor. Ancak, kavanoz dosyanızın içinde olduklarından, bunları Foo.getClass().getResourceAsStream("/templates/my_template_ftl") aracılığıyla göndermeniz gerekir. Java kaynak akışları hakkında daha fazla bilgi için: http://www.javaworld.com/article/2077352/java-se/smartly-load-your-properties.html

4

Spark'de Scala (2.11) kodunun çalıştırılması, gölgeli kavanozlardaki kaynaklara erişmeyi desteklemiyor gibi görünüyor.

bu kodu yürütülüyor:

var path = getClass.getResource(fileName) 
println("#### Resource: " + path.getPath()) 

Spark dışında çalıştırmak beklenen dize yazdırır.

Spark'in içinde çalışırken, yol boş olduğu için java.lang.NullPointerException yükseltildi.

+0

getResourceAsStream() benim için çalışacak gibi görünüyor, ancak getResource(). – Ted

İlgili konular