ईजी। मुझे सभी उपलब्ध निष्पादकों और उनकी संबंधित मल्टीथ्रेडिंग क्षमता की सूची प्राप्त करने की आवश्यकता है (कुल मल्टीथ्रेडिंग क्षमता नहीं, sc.defaultParallelism पहले से ही इसे संभालती है)।किसी कार्यकर्ता नोड पर निष्पादक के लिए कोर की संख्या प्राप्त करने का तरीका?
चूंकि यह पैरामीटर कार्यान्वयन-निर्भर है (यार्न और स्पार्क-स्टैंडअलोन में कोर आवंटित करने के लिए अलग-अलग रणनीति है) और स्थितिगत (यह गतिशील आवंटन और दीर्घकालिक नौकरी चलाने के कारण उतार-चढ़ाव कर सकता है)। मैं इसका अनुमान लगाने के लिए अन्य विधि का उपयोग नहीं कर सकता। क्या वितरित परिवर्तन में स्पार्क एपीआई का उपयोग करके इस जानकारी को पुनर्प्राप्त करने का कोई तरीका है?
1) कई विभाजन (के साथ एक 1 चरण काम >> defaultParallelism चलाने) और की संख्या की गणना: (उदाहरण के लिए TaskContext, SparkEnv)
अद्यतन स्पार्क 1.6 का सवाल है, मैं निम्न विधियों की कोशिश की है प्रत्येक executorID के लिए विशिष्ट threadIDs:
val n = sc.defaultParallelism * 16
sc.parallelize(n, n).map(v => SparkEnv.get.executorID -> Thread.currentThread().getID)
.groupByKey()
.mapValue(_.distinct)
.collect()
हालांकि यह एक अनुमान वास्तविक बहु सूत्रण क्षमता की तुलना में अधिक की ओर जाता है, क्योंकि प्रत्येक स्पार्क निष्पादक एक overprovisioned थ्रेड पूल का उपयोग करता है।
2) 1 के समान, n = defaultParallesim को छोड़कर, और प्रत्येक कार्य में मैं असंतुलित sharding से संसाधन वार्ताकार को रोकने के लिए देरी जोड़ता हूं (एक तेज़ नोड इसे पूरा करता है और धीमे नोड्स चलने से पहले और पूछता है):
val n = sc.defaultParallelism
sc.parallelize(n, n).map{
v =>
Thread.sleep(5000)
SparkEnv.get.executorID -> Thread.currentThread().getID
}
.groupByKey()
.mapValue(_.distinct)
.collect()
यह समय के सबसे अधिक काम करता है, लेकिन आवश्यक तुलना में बहुत धीमी है और बहुत असंतुलित क्लस्टर या कार्य अटकलों से तोड़ा जा सकता है।
3) मैंने यह कोशिश नहीं की है: BlockManager.numUsableCores पढ़ने के लिए जावा प्रतिबिंब का उपयोग करें, यह स्पष्ट रूप से एक स्थिर समाधान नहीं है, आंतरिक कार्यान्वयन किसी भी समय बदल सकता है।
कृपया मुझे बताएं कि क्या आपको कुछ बेहतर मिला है।
धन्यवाद पॉल, यह स्कैला के लिए है, मैं देर रात इसे पोस्ट करता हूं इसलिए मेरी जांच लिख नहीं पाई, बाद में – tribbloid
@ पॉल अपडेट किया जाएगा, क्या यह काफी अच्छा है? – tribbloid
इससे कहीं बेहतर दिखता है। – Paul