2015-05-22 6 views
28

मैं स्पार्क के लिए बहुत नया हूं और मैं सिर्फ एक स्पार्क एप्लिकेशन को स्थानीय रूप से डीबग करने के तरीके से कदम उठाना चाहता हूं? क्या कोई ऐसा करने के लिए आवश्यक चरणों का विस्तार कर सकता है?मैं स्पार्क एप्लिकेशन को स्थानीय रूप से कैसे डिबग कर सकता हूं?

मैं कमांड लाइन से स्थानीय रूप से स्पार्क वेबसाइट पर सरल ऐप चला सकता हूं लेकिन मुझे कोड के माध्यम से कदम उठाने और यह देखने की ज़रूरत है कि यह कैसे काम करता है। किसी भी प्रकार के मदद की बहुत सराहना की जाएगी। धन्यवाद।

+0

मैं विकल्प "--driver-जावा-विकल्प" का उपयोग कर सकते यह एक जरूरत है वास्तव में नहीं जानते कि 'डीबग सीखना' से आपका क्या मतलब है। आप इस ट्यूटोरियल को देख सकते हैं कि IntelliJ ide https://docs.sigmoidanalytics.com/index.php/Step_by_Step_instructions_on_how_to_build_Spark_App_with_IntelliJ_IDEA में स्थानीय रूप से स्पार्क कैसे सेट अप करें। – abalcerek

+1

मेरा मतलब है "मैं स्पार्क वेबसाइट पर सरल ऐप एप्लिकेशन के माध्यम से कैसे कदम उठा सकता हूं। SimpleApp.java फ़ाइल है, और pom.xml (स्पार्क वेबसाइट पर कोड किए गए अनुसार)। मैं लाइन से चरणबद्ध करने के लिए इंटेलिज आईडीई का उपयोग कैसे कर सकता हूं SimpleApp.java में कोड thorugh और देखें कि प्रत्येक पंक्ति वास्तव में क्या करती है? मैं क्लस्टर को नौकरी भेजने के बिना ऐसा करने में सक्षम होना चाहता हूं। मैं बस अपने लैपटॉप पर स्थानीय रूप से कोड के माध्यम से कदम उठाना चाहता हूं। आपके द्वारा प्रदान किया गया लिंक देता है IntelliJ IDEA के साथ स्पार्क ऐप बनाने के लिए कदम। लाइन लाइन के माध्यम से लाइन लाइन के माध्यम से कदम उठाने के बारे में कैसे? किसी भी मदद की बहुत सराहना की जाती है। धन्यवाद। – eugenerory

+0

मुझे स्कैला के बारे में पता नहीं है लेकिन कम से कम जावा में आप मानक आईडीईए डीबगर का उपयोग कर सकते हैं (स्थानीय मोड में)। अगर आपको बड़ा संग्रह है तो आपको याद रखना होगा कि आपको सभी तत्वों को थ्रो करना होगा। – abalcerek

उत्तर

7

स्पार्क खोल को फायर करें। यह Spark documentation से सीधे है:

./bin/spark-shell --master local[2] 

तुम भी स्पार्क खोल REPL रूप में जाना जाता देखेंगे। यह स्पार्क सीखने का सबसे अच्छा तरीका है। मैं अपने समय का 80% स्पार्क खोल में खर्च करता हूं और दूसरा 20% मेरे आवेदन में कोड का अनुवाद करता है।

+2

यदि जावा में एप्लिकेशन लिखा गया है तो क्या होगा? – MFARID

+0

स्कैला स्पार्क-खोल जावा जार लोड कर सकता है, तो आप अपना एक रन चला सकते हैं पीपी और स्कैला से विधियां। –

+0

यह बहुत उपयोगी नहीं है यदि आप एक (बड़ा) फ़ंक्शन बना रहे हैं जिसे आप हर समय बदलते हैं, और जिसे आपको खोल में परीक्षण करने की आवश्यकता होती है। इसे सुधारने के बाद आपको हर बार उस फ़ंक्शन को फिर से आयात करने की आवश्यकता होती है। लेकिन इसके लिए खोल को रोकना और खोलना आवश्यक है (हर बार!), जो कोड बनाने का एक तेज़ तरीका नहीं है।ओपी (पायथन) आईपीडीबी जैसी कार्यक्षमता (स्पष्ट रूप से केवल स्थानीय मोड में उपयोगी) मांग रहा है, जो स्पष्ट रूप से मौजूद नहीं है। –

7

बस डीबग पोर्ट खोलने के लिए जावा विकल्प पास करें। यहाँ अच्छा लेख अपने प्रश्न को संबोधित कर रहे है - http://danosipov.com/?p=779 मैं इसे पसंद

$ SPARK_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spark-shell 

उपयोग कर रहा हूँ (हाँ, SPARK_JAVA_OPTS हटा दिया गया है, लेकिन यह ठीक काम करता है)

+3

मैंने आपके द्वारा उल्लिखित आलेख पर भी ठोकर खाई, हालांकि SPARK_JAVA_OPTS ने मेरे लिए इस तरह के रूप में काम नहीं किया। मुझे इसे संशोधित करना पड़ा और मेरे लिए यह क्या था: 'निर्यात SPARK_JAVA_OPTS = -agentlib: jdwp = transport = dt_socket, server = y, पता = 5005, निलंबन = y, onuncaught = n' –

7

दाऊद ग्रिफिन उल्लेख किया है, spark-shell का उपयोग कर बहुत उपयोगी हो सकता । हालांकि, मुझे लगता है कि वास्तविक स्थानीय डिबगिंग करना, ब्रेक पॉइंट्स सेट करना, चर का निरीक्षण करना आदि अनिवार्य है। इंटेलिजे का उपयोग करके मैं इसे कैसे करता हूं।

सबसे पहले, सुनिश्चित करें कि आप स्थानीय रूप से spark-submit का उपयोग करके अपने स्पार्क एप्लिकेशन को चला सकते हैं, उदा। कुछ की तरह:

spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar 

फिर, रोक सकते हैं और एक डिबगर से एक कनेक्शन के लिए प्रतीक्षा करने के लिए अपने स्थानीय चिंगारी ड्राइवर बता जब यह शुरू होता है, निम्न प्रकार के एक विकल्प जोड़कर:

--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 

जहां agentlib:jdwp है जावा डिबग तार प्रोटोकॉल विकल्प, उप विकल्पों में से एक अल्पविराम द्वारा पृथक सूची के बाद:

  • transport कनेक्शन डीबगर और debuggee के बीच इस्तेमाल किया प्रोटोकॉल को परिभाषित करता है - eithe आर सॉकेट या "साझा स्मृति" - आप लगभग हमेशा सॉकेट (dt_socket) चाहते हैं सिवाय इसके कि मैं माइक्रोसॉफ्ट विंडोज
  • server पर कुछ मामलों में विश्वास करता हूं कि डीबगर (या इसके विपरीत, क्लाइंट) से बात करते समय यह प्रक्रिया सर्वर होनी चाहिए या नहीं - - आपको हमेशा एक सर्वर और एक ग्राहक की आवश्यकता होती है। इस मामले में, हम सर्वर बनने जा रहे हैं और डीबगर
  • suspend से कनेक्शन के लिए प्रतीक्षा कर रहे हैं कि डीबगर सफलतापूर्वक कनेक्ट होने तक निष्पादन रोकना है या नहीं। हम इसे चालू करते हैं ताकि ड्राइवर तब तक शुरू नहीं होगा जब तक डीबगर
  • address कनेक्ट करता है, यह सुनने के लिए बंदरगाह है (इनकमिंग डीबगर कनेक्शन अनुरोधों के लिए)।

    spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 
    
    : आप इसे किसी भी उपलब्ध पोर्ट के लिए सेट कर सकते हैं

तो अब, अपने spark-submit कमांड लाइन कुछ ऐसा दिखाई देगा (तुम सिर्फ यकीन है कि डिबगर इसी पोर्ट से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है करने के लिए है)

अब अगर आप ऊपर चलाने के लिए, आप की तरह

Listening for transport dt_socket at address: 5005 

और डीबगर संलग्न करने के लिए अपने चिंगारी आवेदन इंतज़ार कर रहा है कुछ देखना चाहिए।

अगला, अपने स्पार्क एप्लिकेशन वाले इंटेलिजे प्रोजेक्ट को खोलें, और फिर "रन -> कॉन्फ़िगरेशन संपादित करें ..." खोलें, फिर नया रन/डीबग कॉन्फ़िगरेशन जोड़ने के लिए "+" पर क्लिक करें और "रिमोट" चुनें। इसे एक नाम दें, उदा। "स्पार्कलोकल", और ट्रांसपोर्ट के लिए "सॉकेट" का चयन करें, डीबगर मोड के लिए "अटैच" करें, और होस्ट के लिए "लोकलहोस्ट" टाइप करें और पोर्ट के लिए ऊपर दिए गए पोर्ट, इस मामले में, "5005"। सहेजने के लिए "ठीक" पर क्लिक करें।

इंटेलिजे के मेरे संस्करण में यह आपको डीबग कमांड लाइन के लिए डीबग प्रक्रिया के लिए उपयोग करने के लिए सुझाव देता है, और यह "suspend = n" का उपयोग करता है - हम इसे अनदेखा कर रहे हैं और "suspend = y" (ऊपर के रूप में उपयोग कर रहे हैं)) क्योंकि हम चाहते हैं कि एप्लिकेशन तब तक प्रतीक्षा करे जब तक कि हम शुरू करने के लिए कनेक्ट न हों।

अब आपको डीबग करने के लिए तैयार होना चाहिए। बस उपरोक्त आदेश के साथ स्पार्क शुरू करें, फिर आपके द्वारा अभी बनाई गई IntelliJ रन कॉन्फ़िगरेशन का चयन करें और डीबग पर क्लिक करें। IntelliJ को अपने स्पार्क एप्लिकेशन से कनेक्ट करना चाहिए, जो अब चलना शुरू कर देना चाहिए। आप ब्रेक पॉइंट्स सेट कर सकते हैं, चर का निरीक्षण कर सकते हैं, आदि

+0

टाइप करके टाइपो को ठीक करने के लिए संपादित" - "एजेंटलिब" से पहले, जैसा कि अन्य उत्तरों –

2

@ जेसन इवांस का जवाब मेरे लिए काम नहीं करता है। लेकिन

--conf spark.driver.extraJavaOptions=-Xrunjdwp:transport=dt_socket,server=y,address=8086,suspend=n 

+0

द्वारा उल्लिखित है, हां, "एजेंटलिब" से पहले गायब हो गया था जैसा कि @ryan द्वारा इंगित किया गया है, अब तय किया गया है –

0

केवल एक मामूली परिवर्तन @Jason इवान के जवाब के लिए आवश्यक है में काम किया। '-' स्ट्रिंग से पहले "agentlib ...."

--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 

आप भी वही उद्देश्य को प्राप्त करने

--driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 
+0

हां, आप लापता "-" के बारे में सही @ryan हैं, धन्यवाद! –

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