2016-04-17 17 views
5

पर चलते समय 'संसाधन' से फ़ाइलों तक कैसे पहुंचे, मैंने जावा में स्पार्क जॉब लिखा था। काम एक छायांकित जार के रूप में पैक किया जाता है और मार डाला:जावा में स्पार्क जॉब: क्लस्टर

spark-submit my-jar.jar 

कोड में, कुछ फ़ाइलें (Freemarker टेम्पलेट्स) कि src/main/resources/templates में रहते हैं। जब स्थानीय रूप से चलाने के लिए, मैं सक्षम पहुँच फ़ाइलों हूँ:

File[] files = new File("src/main/resources/templates/").listFiles(); 

जब काम एक क्लस्टर पर चलाया जाता है, एक अशक्त-सूचक अपवाद है जब पिछली लाइन निष्पादित किया जाता है लौटाया जाता है।

मैं देख सकता हूँ अगर मैं jar tf my-jar.jar चलने वाले फ़ाइलों को एक templates/ फ़ोल्डर में पैक कर रहे हैं:

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

मैं सिर्फ उन्हें पढ़ने में असमर्थ हूँ, मुझे संदेह है कि .listFiles() क्लस्टर नोड पर स्थानीय फाइल सिस्टम तक पहुंचने का प्रयास करता है, और फाइलें वहां नहीं हैं।

मुझे यह जानकर उत्सुकता है कि मुझे स्वयं निहित स्पार्क नौकरी के भीतर फ़ाइलों का उपयोग कैसे करना चाहिए। मैं उन्हें नौकरी के बाहर एचडीएफएस में कॉपी नहीं करना चाहूंगा क्योंकि यह बनाए रखने के लिए गन्दा हो जाता है।

+0

क्या आप बता सकते हैं कि आपका मास्टर क्या है? और आप किस तैनाती मोड का उपयोग कर रहे हैं? – user1314742

उत्तर

6

आपका मौजूदा कोड उन्हें उन फ़ाइलों के रूप में संदर्भित कर रहा है जिन्हें पैक नहीं किया गया है और स्पार्क नोड्स पर भेज दिया गया है। लेकिन, चूंकि वे आपकी जार फ़ाइल के अंदर हैं, इसलिए आप उन्हें Foo.getClass().getResourceAsStream("/templates/my_template_ftl") के माध्यम से संदर्भित करने में सक्षम होना चाहिए। जावा संसाधन स्ट्रीम पर अधिक जानकारी यहां: http://www.javaworld.com/article/2077352/java-se/smartly-load-your-properties.html

4

ऐसा लगता है कि स्पार्क पर स्कैला (2.11) कोड चलाना छायांकित जार में संसाधनों तक पहुंच का समर्थन नहीं करता है।

इस कोड को निष्पादित:

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

उम्मीद स्ट्रिंग जब स्पार्क के बाहर चलने प्रिंट करता है।

स्पार्क के अंदर दौड़ते समय, java.lang.NullPointerException उठाया जाता है क्योंकि पथ शून्य है।

+0

getResourceAsStream() मेरे लिए काम करता प्रतीत होता है, लेकिन संसाधन नहीं मिलता है()। – Ted

संबंधित मुद्दे