2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
शफल-व्यवस्थायाः प्रवेशद्वारम् । ShuffleManager इत्येतत् driver तथा executor इत्यत्र sparkEnv इत्यत्र निर्मितम् अस्ति । चालके shuffle इति पञ्जीकरणं कृत्वा एक्जीक्यूटिव् मध्ये data पठन्तु लिखन्तु च।
registerShuffle: रजिस्टर shuffle, return shuffleHandle
unregisterShuffle: फेरबदलं निष्कासयन्तु
shuffleBlockResolver: shuffleBlockResolver प्राप्नुवन्तु, यस्य उपयोगः shuffle तथा block इत्येतयोः मध्ये सम्बन्धं नियन्त्रयितुं भवति
getWriter: विभाजनस्य अनुरूपं लेखकं प्राप्य निष्पादकस्य नक्शाकार्य्ये आह्वयन्तु
getReader, getReaderForRange: एकस्य श्रेणीविभाजनस्य पाठकं प्राप्य निष्पादकस्य reduce कार्ये आह्वयन्तु
shuffleManager इत्यस्य एकमात्रं कार्यान्वयनम् अस्ति ।
क्रमाधारित-शफल-मध्ये आगच्छन्तः सन्देशाः विभाजन-अनुसारं क्रमेण भवन्ति, अन्ते च पृथक् सञ्चिका निर्गच्छति ।
न्यूनकः अस्मात् सञ्चिकातः दत्तांशस्य क्षेत्रं पठिष्यति ।
यदा आउटपुट् सञ्चिका स्मृतौ उपयुक्ता भवति तदा क्रमबद्धा मध्यवर्ती परिणामसञ्चिका डिस्कमध्ये प्रक्षिप्ता भविष्यति, एताः मध्यवर्ती सञ्चिकाः आउटपुट् कृते अन्तिमसञ्चिकायां विलीनाः भविष्यन्ति
क्रमाधारित-शफलस्य द्वौ पद्धतौ स्तः - १.
क्रमबद्धसॉर्टस्य लाभाः
क्रमाङ्कितक्रमणविधौ, शफललेखकः आगच्छन्तं सन्देशं क्रमबद्धं करोति, तान् दत्तांशसंरचने रक्षति, क्रमेण च स्थापयति ।
भिन्न-भिन्न-परिदृश्यानुसारं तत्सम्बद्धं हस्तकं चिनुत । प्राथमिकताक्रमः BypassMergeSortShuffleHandle>SerializedShuffleHandle>BaseShuffleHandle अस्ति
बाईपास-स्थितिः: कोऽपि नक्शा-पक्षः नास्ति, विभाजनानाम् संख्या _SHUFFLE_SORT_BYPASS_MERGE_THRESHOLD_ इत्यस्मात् न्यूना वा समाना वा अस्ति ।
क्रमाङ्कन-हन्डल-स्थितयः: क्रमाङ्कन-वर्गः क्रमबद्ध-वस्तूनाम् प्रवासनं समर्थयति, mapSideCombine-क्रियायाः उपयोगं न करोति, तथा च मातापितृ-आरडीडी-विभाजनस्य संख्या (1 << 24) इत्यस्मात् अधिका नास्ति ।
प्रथमं एतत् शफलं संग्रहयन्तु तथा च taskIdMapsForShuffle_ इत्यत्र सूचनां मैप् कुर्वन्तु ।
शफलस्य अनुरूपस्य हन्डलस्य आधारेण तत्सम्बद्धं लेखकं चिनोतु ।
BypassMergeSortShuffleHandle->BypassMergeSortShuffleWriter बाईपास
SerializedShuffleHandle->असुरक्षितShuffleWriter
BaseShuffleHandle-> क्रमबद्धShuffleWriter
taskIdMapsForShuffle तत्सम्बद्धं shuffle तथा shuffle तत्सम्बद्धेन मानचित्रेण उत्पन्नानि सञ्चिकानि निष्कासयति
shuffle सञ्चिकायाः अनुरूपं सर्वाणि ब्लॉक्-सङ्केतानि प्राप्नुवन्तु, अर्थात् blocksByAddress ।
BlockStoreShuffleReader ऑब्जेक्ट् रचयति, तत् च प्रत्यागच्छति ।
मुख्यतया shuffle इत्यस्य पैरामीटर्स् पारयितुं तस्य उपयोगः भवति, अपि च कस्य लेखकस्य चयनं कर्तव्यमिति चिह्नितुं चिह्नम् अपि अस्ति ।
अमूर्तवर्गः, नक्शाकार्यनिर्गमसन्देशानां उत्तरदायी मुख्यविधिः लेखनम् अस्ति, तथा च त्रयः कार्यान्वयनवर्गाः सन्ति
पश्चात् पृथक् पृथक् विश्लेषणं भविष्यति।
Trait, कार्यान्वयनवर्गः mapId, reduceId, shuffleId इत्येतयोः आधारेण तत्सम्बद्धं ब्लॉकदत्तांशं प्राप्तुं शक्नोति ।
ShuffleBlockResolver इत्यस्य एकमात्रः कार्यान्वयनवर्गः ।
एकस्मात् मानचित्रकार्यात् शफलब्लॉकदत्तांशस्य कृते तार्किकखण्डानां भौतिकसञ्चिकास्थानानां च मध्ये मैपिंगं निर्माय परिपालयन्तु ।
एकस्यैव मानचित्रकार्यस्य शफलखण्डदत्तांशः समेकितदत्तांशसञ्चिकायां संगृहीतः भविष्यति ।
दत्तांशसञ्चिकायां एतेषां दत्तांशखण्डानां आफ्सेट् पृथक् पृथक् अनुक्रमणिकासञ्चिकायां संगृहीताः भवन्ति ।
.data इति दत्तांशसञ्चिकाप्रत्ययः
.index इति अनुक्रमणिकासञ्चिकाप्रत्ययः
दत्तांशसञ्चिकां प्राप्नुवन्तु।
ShuffleDataBlockId उत्पन्नं कृत्वा सञ्चिकां प्राप्तुं blockManager.diskBlockManager.getFile मेथड् आह्वयन्तु
getDataFile इत्यस्य सदृशम्
ShuffleIndexBlockId उत्पन्नं कृत्वा सञ्चिकां प्राप्तुं blockManager.diskBlockManager.getFile मेथड् आह्वयन्तु
shuffleId तथा mapId इत्येतयोः आधारेण दत्तांशसञ्चिकां अनुक्रमणिकासञ्चिकां च प्राप्नुवन्तु, ततः तान् विलोपयन्तु
mapId तथा shuffleId इत्येतयोः अनुसारं तत्सम्बद्धं दत्तांशसञ्चिकां अनुक्रमणिकासञ्चिकां च प्राप्नुवन्तु ।
दत्तांशसञ्चिका अनुक्रमणिकासञ्चिका च सन्ति वा मेलनं च वा इति पश्यन्तु, प्रत्यक्षतया च प्रत्यागच्छन्तु ।
यदि तत् मेलनं कर्तुं न शक्नोति तर्हि नूतना अनुक्रमणिका अस्थायी सञ्चिका उत्पद्यते । ततः उत्पन्नं अनुक्रमणिकासञ्चिकां दत्तांशसञ्चिकां च नाम परिवर्त्य प्रत्यागच्छतु ।
कल्पयतु यत् shuffle इत्यस्य त्रयः विभाजनाः सन्ति, तदनुरूपाः दत्तांशस्य आकाराः क्रमशः 1000, 1500, 2500 च सन्ति ।
अनुक्रमणिकासञ्चिकायां प्रथमपङ्क्तिः 0, तदनन्तरं विभाजनदत्तांशस्य सञ्चितमूल्यं द्वितीयपङ्क्तिः 1000, तृतीयपङ्क्तिः 1000+1500=2500, तृतीयपङ्क्तिः 2500+2500=5000 च भवति ।
दत्तांशसञ्चिकाः विभाजनआकारेन क्रमेण संगृह्यन्ते ।
यदि ते मेलनं न कुर्वन्ति तर्हि null प्रत्यागच्छति तर्हि विभाजन-आकारस्य सरणी प्रत्यागच्छति ।
1.सूचकाङ्कसञ्चिकायाः आकारः (blocks + 1) * 8L अस्ति
2.सूचकाङ्कसञ्चिकायाः प्रथमपङ्क्तिः 0 अस्ति
3. विभाजनस्य आकारं प्राप्य दीर्घतासु लिखन्तु दीर्घतायाः सारांशमूल्यं दत्तांशसञ्चिकायाः आकारस्य बराबरम् अस्ति ।
यदि उपर्युक्ताः त्रयः शर्ताः पूर्यन्ते तर्हि lengths प्रत्यागच्छति, अन्यथा null प्रत्यागच्छति ।
shuffleId, mapId, startReduceId, endReduceId प्राप्तुम्
अनुक्रमणिकासञ्चिकां प्राप्नुत
तत्सम्बद्धं startOffset तथा endOffset पठन्तु
FileSegmentManagedBuffer उत्पन्नं कर्तुं प्रत्यागमनाय च data file, startOffset, endOffset इत्येतयोः उपयोगं कुर्वन्तु