2015-04-24 6 views
23

मैं ईसी 2 क्लस्टर पर स्पार्क डेटा प्रसंस्करण नौकरी तैनात कर रहा हूं, क्लस्टर के लिए नौकरी छोटी है (कुल में 120 जी रैम के साथ 16 कोर), सबसे बड़ी आरडीडी में केवल 76k + पंक्तियां हैं। लेकिन बीच में भारी गिरावट आई है (इस प्रकार पुन: विभाजन की आवश्यकता है) और धारावाहिकरण के बाद प्रत्येक पंक्ति में लगभग 100k डेटा होता है। नौकरी हमेशा पुन: विभाजन में फंस गई। अर्थात्, काम लगातार निम्न त्रुटियों और पुनः प्राप्त होगा:org.apache.spark.shuffle.MetadataFetchFailedException के संभावित कारण क्या हैं: शफल के लिए आउटपुट स्थान गुम है?

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 

org.apache.spark.shuffle.FetchFailedException: Error in opening FileSegmentManagedBuffer 

org.apache.spark.shuffle.FetchFailedException: java.io.FileNotFoundException: /tmp/spark-... 

मैं समस्या की पहचान करने की कोशिश की है, लेकिन यह मशीन फेंकने 50% नीचे इन त्रुटियों कर रहे हैं के दोनों मेमोरी और डिस्क की खपत की तरह लगता है। मैंने विभिन्न विन्यासों का भी प्रयास किया है, जिनमें शामिल हैं:

let driver/executor memory use 60% of total memory. 
let netty to priortize JVM shuffling buffer. 
increase shuffling streaming buffer to 128m. 
use KryoSerializer and max out all buffers 
increase shuffling memoryFraction to 0.4 

लेकिन उनमें से कोई भी काम नहीं करता है। छोटी नौकरी हमेशा त्रुटियों की एक ही श्रृंखला और अधिकतम आउट रीट्रीज़ (1000 गुना तक) ट्रिगर करती है। ऐसी स्थिति में इस बात का निवारण कैसे करें?

यदि आपके पास कोई सुराग है तो बहुत बहुत धन्यवाद।

उत्तर

12

अगर आपको इस तरह की त्रुटि मिलती है तो अपने लॉग की जांच करें।

ERROR 2015-05-12 17:29:16,984 Logging.scala:75 - Lost executor 13 on node-xzy: remote Akka client disassociated 

हर बार जब आपको यह त्रुटि मिलती है क्योंकि आप एक निष्पादक खो देते हैं। जैसे ही आप एक निष्पादक खो गए, यह एक और कहानी है, फिर से सुराग के लिए अपने लॉग की जांच करें।

एक बात यार्न, अपने काम को मार सकता है अगर यह सोचता है कि देखने के प्रयोग कर रहे हैं "बहुत अधिक स्मृति" कुछ इस तरह के लिए

की जांच:

org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl - Container [<edited>] is running beyond physical memory limits. Current usage: 18.0 GB of 18 GB physical memory used; 19.4 GB of 37.8 GB virtual memory used. Killing container. 

यह भी देखें: http://apache-spark-developers-list.1001551.n3.nabble.com/Lost-executor-on-YARN-ALS-iterations-td7916.html

कला की वर्तमान स्थिति spark.yarn.executor.memoryOverhead को बढ़ाने के लिए है जब तक कि नौकरी विफल हो जाती है। हमारे पास है मेमोरी की मात्रा के आधार पर इसे स्वचालित रूप से स्केल करने का प्रयास करने की योजना है, लेकिन यह अभी भी एक उदारवादी होगा।

+2

बहुत बहुत धन्यवाद! मेरी समस्या यह है कि मैं बस स्पार्क स्टैंडअलोन मास्टर का उपयोग कर रहा हूं। खो गया निष्पादक वास्तव में बड़ी शफलिंग के लिए एक समस्या है, क्योंकि प्रत्येक को एक गैर-लगातार भंडारण में लिखने में काफी समय लगता है और एक बार खो जाने के बाद इसे शुरू करना होगा। मैं जांच कर रहा हूं कि क्या अक्सर चेकपॉइंटिंग समस्या को हल कर सकती है – tribbloid

+0

क्या आपने इसमें अंतर्दृष्टि प्राप्त की है? – raam86

+0

मैंने जीसी द्वारा अपने वर्कफ़्लो को दोबारा लिखा है और आरडीडी को मैन्युअल रूप से जारी रखा है और अधिक मेमोरी और स्पेस को मुक्त करने के लिए चेकपॉइंट() के साथ अन्य persist() को बदल दिया है। इस पल के लिए गायब हो गया। लेकिन स्मृति/डिस्क खपत के प्रोफाइल पर विचार करते समय इसे गलत तरीके से नहीं किया जाना चाहिए।जब मैं इसे फिर से सामना करता हूं तो मैं अपडेट करूंगा – tribbloid

1

मैं भी त्रुटि

org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 

हो रही थी और लॉग में आगे देख रहा

Container killed on request. Exit code is 143 

पाया बाहर निकलने के कोड के लिए खोज के बाद, मुझे एहसास हुआ कि इसकी मुख्य रूप से स्मृति आवंटन से संबंधित है। इसलिए मैंने निष्पादकों के लिए कॉन्फ़िगर की गई मेमोरी की मात्रा की जांच की। मैंने पाया कि गलती से मैंने ड्राइवर को 7 जी और एक्जिक्यूटर के लिए केवल 1 जी कॉन्फ़िगर किया था। निष्पादक की याददाश्त बढ़ाने के बाद मेरी स्पार्क नौकरी सफलतापूर्वक भाग गई।

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

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