मैं YARN पर स्पार्क की नौकरी चलाते समय कोर की संख्या और निष्पादनकर्ताओं की संख्या के संबंध को समझने की कोशिश कर रहा हूं।
परीक्षण वातावरण इस प्रकार है:
- डेटा नोड्स की संख्या: 3
- डेटा नोड मशीन कल्पना:
- सीपीयू: कोर i7-4790 (कोर का #: 4, # धागे का: 8)
- RAM: 32GB (8GB x 4)
- HDD: 8TB (2TB x 4)
नेटवर्क: 1 जीबी
स्पार्क संस्करण: 1.0.0
Hadoop संस्करण: 2.4.0 (होर्टनवर्क्स HDP 2.1)
स्पार्क नौकरी का प्रवाह: sc.textFile -> फ़िल्टर -> मानचित्र -> फ़िल्टर -> mapToPair -> कम करेंबायके -> मानचित्र -> saveAsTextFile
इनपुट डेटा
- प्रकार: एकल पाठ फ़ाइल
- आकार: 165GB
- लाइनों की संख्या: 454,568,833
उत्पादन
- दूसरे फिल्टर के बाद लाइनों की संख्या: 310,640,717
- परिणाम फ़ाइल की पंक्तियों की संख्या: 99,848,268
- परिणाम फ़ाइल का आकार: 41 जीबी
निम्नलिखित कॉन्फ़िगरेशन के साथ काम चलाया गया था:
--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3
(डेटा नोड के अनुसार निष्पादक, कोर जितना उपयोग करें)--master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3
(# कोर की कमी)--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12
(कम कोर, अधिक निष्पादक)
बीता हुआ समय:
50 मिनट 15 सेकंड
55 मिनट 48 सेकेंड
31 मिनट 23 सेकंड
मेरे आश्चर्य करने के लिए, (3) बहुत तेज था।
मैंने सोचा था कि (1) तेजी से होगा, क्योंकि फेरबदल करते समय कम अंतर-निष्पादक संचार होगा।
हालाँकि (#) कोर का # (3) से कम है, #of कोर 2 से महत्वपूर्ण कारक नहीं है) ने अच्छा प्रदर्शन किया।
(Pwilmot के जवाब के बाद फॉलोवर्स जोड़े गए।)
जानकारी के लिए, प्रदर्शन मॉनिटर स्क्रीन कैप्चर इस प्रकार है:
- (1) के लिए गंगालिया डेटा नोड सारांश - नौकरी 04:37 पर शुरू हुई।
- (3) के लिए गंगालिया डेटा नोड सारांश - नौकरी 19:47 पर शुरू हुई। कृपया उस समय से पहले ग्राफ़ को अनदेखा करें।
ग्राफ लगभग 2 वर्गों में विभाजित है:
- पहला: शुरू से घटाना शुरू करें: CPU गहन, कोई नेटवर्क गतिविधि नहीं
- दूसरा: कम करने के बादबायके: सीपीयू कम, नेटवर्क I / O किया जाता है।
जैसा कि ग्राफ से पता चलता है, (1) सीपीयू शक्ति का उतना ही उपयोग कर सकते हैं जितना कि दिया गया था। तो, यह थ्रेड्स की संख्या की समस्या नहीं हो सकती है।
इस परिणाम की व्याख्या कैसे करें?