दाऊद ग्रिफिन उल्लेख किया है, 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 को अपने स्पार्क एप्लिकेशन से कनेक्ट करना चाहिए, जो अब चलना शुरू कर देना चाहिए। आप ब्रेक पॉइंट्स सेट कर सकते हैं, चर का निरीक्षण कर सकते हैं, आदि
मैं विकल्प "--driver-जावा-विकल्प" का उपयोग कर सकते यह एक जरूरत है वास्तव में नहीं जानते कि 'डीबग सीखना' से आपका क्या मतलब है। आप इस ट्यूटोरियल को देख सकते हैं कि IntelliJ ide https://docs.sigmoidanalytics.com/index.php/Step_by_Step_instructions_on_how_to_build_Spark_App_with_IntelliJ_IDEA में स्थानीय रूप से स्पार्क कैसे सेट अप करें। – abalcerek
मेरा मतलब है "मैं स्पार्क वेबसाइट पर सरल ऐप एप्लिकेशन के माध्यम से कैसे कदम उठा सकता हूं। SimpleApp.java फ़ाइल है, और pom.xml (स्पार्क वेबसाइट पर कोड किए गए अनुसार)। मैं लाइन से चरणबद्ध करने के लिए इंटेलिज आईडीई का उपयोग कैसे कर सकता हूं SimpleApp.java में कोड thorugh और देखें कि प्रत्येक पंक्ति वास्तव में क्या करती है? मैं क्लस्टर को नौकरी भेजने के बिना ऐसा करने में सक्षम होना चाहता हूं। मैं बस अपने लैपटॉप पर स्थानीय रूप से कोड के माध्यम से कदम उठाना चाहता हूं। आपके द्वारा प्रदान किया गया लिंक देता है IntelliJ IDEA के साथ स्पार्क ऐप बनाने के लिए कदम। लाइन लाइन के माध्यम से लाइन लाइन के माध्यम से कदम उठाने के बारे में कैसे? किसी भी मदद की बहुत सराहना की जाती है। धन्यवाद। – eugenerory
मुझे स्कैला के बारे में पता नहीं है लेकिन कम से कम जावा में आप मानक आईडीईए डीबगर का उपयोग कर सकते हैं (स्थानीय मोड में)। अगर आपको बड़ा संग्रह है तो आपको याद रखना होगा कि आपको सभी तत्वों को थ्रो करना होगा। – abalcerek