एक साथ कई स्कैप थ्रेड चलाना


11

एक साथ कई scp थ्रेड चलाना:

पृष्ठभूमि:

मैं अक्सर अपने आप को सर्वर फ़ाइलों के एक सेट को बहुत प्रतिबिंबित कर रहा हूं, और इन सर्वर फ़ाइलों में शामिल हजारों छोटी 1kb-3kb फाइलें हैं। सभी सर्वर 1 जीबीपीएस पोर्ट से जुड़े होते हैं, जो आमतौर पर विभिन्न डेटा-सेंटरों में फैलते हैं।

मुसीबत:

एससीपी इन छोटी फाइलों को एक-एक करके स्थानांतरित करता है, और इसमें उम्र लगती है, और मुझे लगता है कि मेरे पास मौजूद खूबसूरत नेटवर्क संसाधनों को बर्बाद कर रहा हूं।

समाधान?:

मेरे पास एक विचार था; एक स्क्रिप्ट बनाना, जो फाइलों को समान मात्रा में विभाजित करता है, और 5-6 स्कैप थ्रेड शुरू करता है, जो सैद्धांतिक रूप से 5-6 गुना तेजी से हो जाएगा, नहीं? लेकिन मेरे पास कोई लिनक्स स्क्रिप्टिंग का अनुभव नहीं है!

प्रशन):

  • क्या उल्लेखित समस्या का बेहतर समाधान है?
  • क्या ऐसा कुछ है जो पहले से मौजूद है?
  • यदि नहीं, तो क्या कोई है जो मुझे एक शुरुआत देगा, या मेरी मदद करेगा?
  • यदि 2, या 3 नहीं है, तो लिनक्स स्क्रिप्टिंग सीखने की तलाश शुरू करने के लिए एक अच्छी जगह कहां होगी? बैश की तरह, या अन्य।

जवाबों:


11

मैं इसे इस तरह से करूंगा:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'

आपके द्वारा स्थानांतरित की जा रही फ़ाइलों के आधार पर, यह tarकमांड में कंप्रेशन को सक्षम करने के लिए समझ में आता है :
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'

यह भी समझ सकता है कि आप sshकमांड के लिए सीपीयू फ्रेंडली सिफर चुनते हैं (जैसे आर्कफॉर): tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'

या उन दोनों को मिलाएं, लेकिन यह वास्तव में इस बात पर निर्भर करता है कि आपकी अड़चन क्या है। यदि आप वृद्धिशील syncs कर रहे हैं तो
जाहिर तौर पर rsyncबहुत तेजी से होगा।


10

के rsyncबजाय का उपयोग करें scp। आप जितनी आसानी rsyncसे उपयोग कर सकते हैं , और यह "विलंबता लागत को कम करने के लिए फ़ाइल स्थानांतरण की पाइपलाइनिंग" का समर्थन करता है।sshscp

एक टिप: यदि डेटा सिक्योर है, तो कंप्रेशन को सक्षम करें। यदि यह नहीं है, तो इसे अक्षम करें।


मैंने सिर्फ एक ट्रांसफर बीती रात scp के साथ किया था और rsync के साथ एक और समान ट्रांसफर कर रहा हूं - यह बहुत तेज लगता है। हालाँकि, यह अभी भी एक समय में एक फ़ाइल को स्थानांतरित करना प्रतीत होता है - कोई भी विचार यह कैसे करें कि यह कई थ्रेड्स (Beyond --include'ing और --exclude'ing स्क्रिप्ट के माध्यम से निर्देशिकाओं का एक गुच्छा है; देखें: sun3.org/archives / 280 )
aendrew

सीमित बैंडविड्थ को देखते हुए एक ही समय में कई फ़ाइलों को स्थानांतरित करने का कोई मतलब नहीं है। मुझे विश्वास है कि जब बैंडविड्थ प्रचुर मात्रा में होगा तो आप इस आदेश पर विचार नहीं करेंगे। जब आप बहुत सी छोटी फ़ाइलों का मुकाबला कर रहे हों, तो विलंबता की लागत को कम करने में बहुत मदद मिली। यहां तक ​​कि अगर आप एक ही समय में कई फ़ाइलों को कॉपी कर सकते हैं, तो सीमित बैंडविड्थ आपके फ़ाइल स्थानांतरण को गति नहीं देगा।
जो

1

मैं GNO सुझाव देने के बारे में था समानांतर (जो अभी भी अपनी ओर से कुछ पटकथा काम की आवश्यकता है), लेकिन फिर मैं pscp पाया (जो का हिस्सा है pssh )। यह सिर्फ आपकी जरूरत के हिसाब से हो सकता है।


2
ऐसा लगता है कि यह psshकई मशीनों को समवर्ती रूप से संचालित करता है। मुझे नहीं लगता कि यह फ़ाइल-स्तरीय समानता को लागू करता है।
डेविड श्वार्ट्ज

मैं शायद विशिष्ट होना चाहिए - मेरा मतलब था pscp।
Rilindo

1

सीधे scp नहीं, लेकिन mutli थ्रेडेड ट्रांसफर (सिंगल फाइल्स पर भी) के लिए एक विकल्प है bbcp - https://www2.cisl.ucar.edu/resources/storage-and-file-systems/bbcp

उन थ्रेड्स की संख्या के लिए -s विकल्प का उपयोग करें जिन्हें आप डेटा ट्रांसफर करना चाहते हैं। उच्च बैंडविड्थ के लिए महान है, लेकिन अंतराल कनेक्शन, प्रति धागे टीसीपी खिड़की के आकार को सीमित करता है।


0

संभवतः असंबंधित, लेकिन यदि आप कुछ और वास्तविक समय चाहते हैं तो आप GlusterFS की कोशिश कर सकते हैं । अच्छी तरह से काम करता है, लेकिन कुछ ट्यूनिंग की आवश्यकता होती है यदि आप कुशलतापूर्वक छोटी फ़ाइलों को पढ़ना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.