मैं एक स्पार्क एप्लिकेशन जार बनाना चाहता हूं। मेरी अपेक्षा है: जब मैं ./spark-submit द्वारा जार निष्पादित करता हूं, तो एप्लिकेशन मेरे स्वयं के निर्मित mllib(उदा:spark-mllib_2.11-2.2.0-SNAPSHOT.jar) का उपयोग करेगा।

यह मेरा build.sbt है:

name:="SoftmaxMNIST"
version := "1.0"
scalaVersion := "2.11.4"
unmanagedJars in Compile += file("lib/spark-mllib_2.11-2.2.0-SNAPSHOT.jar")

libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"org.apache.spark" %% "spark-sql" % "2.1.0 
)

// META-INF discarding
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
{
  case PathList("META-INF", xs @ _*) => MergeStrategy.discard
  case x => MergeStrategy.first
}
}

मैंने पहले ही अपनी खुद की निर्मित spark-mllib_2.11-2.2.0-SNAPSHOT.jar को /My-Project-Path/lib/ निर्देशिका में छोड़ दिया है। लेकिन यह काम नहीं करता है। ऐसा लगता है कि एप्लिकेशन अभी भी स्पार्क के डिफ़ॉल्ट mllib jar का उपयोग कर रहा है, मेरे मामले में यह PATH/spark-2.1.0-bin-hadoop2.7/jars/ निर्देशिका में है

पीएस: अंतिम उद्देश्य यह है कि जब मैं एडब्ल्यूएस ईसी 2 पर अपना आवेदन चलाता हूं, तो मेरा आवेदन हमेशा डिफ़ॉल्ट के बजाय मेरे स्वयं के निर्मित mllib का उपयोग कर रहा है। मैं अपने स्वयं के mllib को बार-बार संशोधित कर सकता/सकती हूं।

क्या कोई इसे हल करने में मेरी मदद कर सकता है। अग्रिम में धन्यवाद!

0
kz28 6 मार्च 2017, 06:34

1 उत्तर

सबसे बढ़िया उत्तर

उत्तर इस बात पर निर्भर करता है कि आप spark-submit कैसे करते हैं। संशोधित जार (SPARK_HOME में से एक नहीं) देखने के लिए आपको "कायल" (उर्फ संशोधित) spark-submit करना होगा।

सबसे तेज (लंबे समय में जरूरी नहीं कि सबसे आसान) दृष्टिकोण स्पार्क जार को शामिल करना होगा, जिसमें आपके द्वारा संशोधित किया गया है, आपके uberjar (उर्फ फैट जार) में। ऐसा लगता है कि आप अपने एसबीटी प्रोजेक्ट में एसबीटी-असेंबली प्लगइन का उपयोग कर रहे हैं, इसलिए यह केवल publishLocal निर्भरता (या lib निर्देशिका में डालने) की बात है और इसे अपने प्रोजेक्ट में libraryDependencies में जोड़ें . बाकी काम assemble करेंगे।

हालांकि यह आपको वास्तव में एक विशाल और मोटा जार देगा, जबकि भारी विकास चक्र में बहुत सारे संकलन, परीक्षण और तैनाती के साथ प्रक्रिया बहुत धीमी हो सकती है।

दूसरा तरीका अपने कस्टम अपाचे स्पार्क का उपयोग करना है (स्पार्क एमएललिब के लिए संशोधित पुस्तकालय के साथ)। आपके mvn install के बाद आपका कस्टम स्पार्क उपयोग के लिए तैयार हो जाएगा। कस्टम संस्करण से spark-submit का उपयोग करें और इसे काम करना चाहिए। आपको अपने मोटे जार में जार को शामिल करने की आवश्यकता नहीं है और शायद आपको एसबीटी-असेंबली प्लगइन का उपयोग करने की आवश्यकता नहीं होगी (केवल एक sbt package काम करना चाहिए)।

उस दृष्टिकोण से आपके परिनियोजन योग्य स्पार्क एप्लिकेशन पैकेज को छोटा बनाने और कस्टम स्पार्क को विकास प्रक्रिया से अलग रहने का लाभ मिलता है। प्रकाशित करने और उस पर निर्भर रहने के लिए एक आंतरिक पुस्तकालय भंडार का उपयोग करें।

1
Jacek Laskowski 7 मार्च 2017, 14:24