पर शफल करता है मैं स्कैला (2.11)/स्पार्क (1.6.1) स्ट्रीमिंग प्रोजेक्ट पर काम कर रहा हूं और पिछले बैचों से देखे गए डेटा का ट्रैक रखने के लिए mapWithState()
का उपयोग कर रहा हूं।स्पार्क नक्शा WithState सभी डेटा को एक नोड
राज्य 20 विभाजनों में विभाजित है, StateSpec.function(trackStateFunc _).numPartitions(20)
के साथ बनाया गया है। मैंने पूरे क्लस्टर में राज्य को वितरित करने की आशा की थी, लेकिन ऐसा लगता है कि प्रत्येक नोड में पूर्ण राज्य होता है और निष्पादन हमेशा एक ही नोड निष्पादित होता है।
Locality Level Summary: Node local: 50
प्रत्येक बैच के लिए यूआई में दिखाया गया है और पूरा बैच घसीटना पढ़ा है। बाद में, मैं कफका को लिखता हूं और विभाजन फिर से क्लस्टर में फैल जाते हैं। मुझे लगता है कि mapWithState()
को एक नोड पर चलाने की आवश्यकता क्यों नहीं है। क्या यह राज्य को विभाजित करने की अवधारणा को बर्बाद नहीं करता है अगर यह पूर्ण क्लस्टर के बजाय एक नोड द्वारा सीमित है? क्या कुंजी को राज्य द्वारा वितरित करना संभव नहीं था?
मुझे लगता है कि आपको अपना स्पार्क डीएजी जोड़ना चाहिए, और 'mapWithState' के साथ उपयोग किए जा रहे प्रकारों के बारे में थोड़ा और विवरण जोड़ें। –