तेज़ s3 बाल्टी दोहराव


93

मैं s3cmd की तुलना में बाल्टी नकल करने के लिए एक बेहतर कमांड लाइन टूल खोजने की कोशिश कर रहा हूंs3cmdप्रत्येक फ़ाइल को डाउनलोड और अपलोड किए बिना बाल्टी को डुप्लिकेट कर सकते हैं। कमांड जिसे मैं आमतौर पर s3cmd का उपयोग करके बकेट डुप्लिकेट करने के लिए चलाता हूं:

s3cmd cp -r --acl-public s3://bucket1 s3://bucket2

यह काम करता है, लेकिन यह बहुत धीमी है क्योंकि यह एक बार में एक एपीआई के माध्यम से प्रत्येक फ़ाइल की प्रतिलिपि बनाता है। अगर s3cmdमैं समानांतर मोड में दौड़ सकता हूं, तो मुझे बहुत खुशी होगी।

क्या कमांड लाइन टूल्स या कोड के रूप में अन्य विकल्प उपलब्ध हैं जिनका उपयोग लोग डुप्लीकेट बाल्टियों से करते हैं जो इससे तेज हैं s3cmd?

संपादित करें: ऐसा लगता है कि s3cmd-modification बिल्कुल वैसा ही है जैसा मैं देख रहा हूं। बहुत बुरा यह काम नहीं करता है। क्या कोई अन्य विकल्प भी हैं?


6
यह सुनिश्चित नहीं है कि यह प्रश्न बार-बार बंद क्यों किया जा रहा है, क्योंकि ऐसा लगता है कि कई डेवलपर्स ने इसमें भाग लिया है। वैसे भी, मैंने इसे अत्यधिक समानांतर फैशन में हल किया, यहाँ लिंक है: github.com/cobbzilla/s3s3mirror धन्यवाद! - जोनाथन।
कोबजिला

जवाबों:


166

AWS सीएलआई पूरी तरह से काम करता है, और आधिकारिक रूप से समर्थित उपकरण होने का बोनस है।

aws s3 sync s3://mybucket s3://backup-mybucket

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

डिफ़ॉल्ट रूप से समवर्ती स्थानान्तरण का समर्थन करता है। Http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests देखें

बड़ी संख्या में छोटी फ़ाइलों को जल्दी से स्थानांतरित करने के लिए, विलंबता को कम करने के लिए EC2 उदाहरण से स्क्रिप्ट चलाएं, और विलंबता max_concurrent_requestsके प्रभाव को कम करने के लिए बढ़ाएं । उदाहरण के लिए:

aws configure set default.s3.max_concurrent_requests 200

4
यह फ़ाइल संशोधित समय, आकार आदि के आधार पर गैर-समवर्ती सिंक का समर्थन करता है, जब मैंने इसे आज़माया तो यह तेज़ी से धधक रहा था। मेरा मानना ​​है कि वस्तुओं को स्थानीय मशीन पर डाउनलोड किए बिना सीधे S3 पर कॉपी किया जाता है। यह डिफ़ॉल्ट रूप से समानांतर में नहीं चलता है, लेकिन मुझे यकीन है कि आपके पास एक ही समय में अलग-अलग सबफ़ोल्डर पर चलने वाले कई सिंक कमांड हो सकते हैं। यह काफी तेज़ है कि आपको संभवतः समानांतर में इसे चलाने की आवश्यकता नहीं होगी। मैंने कुछ ही मिनटों में 100GB डेटा की नकल की।
python1981

11
यदि फ़ाइलों की संख्या अधिक है, तो नरक के रूप में धीमा।
नागुगीन

14
कई छोटी फ़ाइलों को स्थानांतरित करते समय विलंबता प्रमुख बाधा बन जाती है, इसलिए EC2 उदाहरण से इस कमांड को चलाना आवश्यक है।
python1981

1
मैंने इसका उपयोग एक डॉकटर के निर्माण के लिए किया और बहुत अच्छी तरह से काम करता है github.com/sunshineo/s3-bucket-copier
गॉर्डन सन

3
अब यह समवर्ती समन्वय का
python1981

70

यदि आपको AWS कंसोल का उपयोग करने में कोई आपत्ति नहीं है, तो आप कर सकते हैं:

  1. पहले बकेट में सभी फ़ाइलों / फ़ोल्डरों का चयन करें
  2. क्रियाएँ> कॉपी पर क्लिक करें
  3. एक नई बाल्टी बनाएँ और उसे चुनें
  4. क्रियाएँ> चिपकाएँ पर क्लिक करें

यह अभी भी काफी धीमा है, लेकिन आप इसे अकेले छोड़ सकते हैं और इसे अपना काम करने दे सकते हैं।


क्या यह स्रोत की सामग्री को मेरी मशीन पर कॉपी कर रहा है क्योंकि यह गंतव्य पर कॉपी करता है? बहुत सारी नेटवर्क गतिविधि और ब्राउज़र इंस्पेक्टर बेहद धीमा है, इसलिए इसका विश्लेषण करना कठिन है। मेरी मशीन पर 600K / s। इसके बाद अमेजन नेटवर्क के भीतर ट्रांसफर शुरू करने में काफी तेजी आएगी ... इसके बजाय वहां कोशिश करेंगे।
ब्रैड गॉस

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

7
यह अभी भी फ़ाइल सूची प्राप्त करता है। यदि सूची बहुत लंबी है (मेरे मामले में हजारों फाइलों में से दर्जनों) तो यह बिल्ली के रूप में धीमी है। और समय समाप्त / लटका की बहुत अधिक संभावना है
Phương Nguyễn

13
दुर्भाग्य से यह प्रक्रिया ब्राउज़र से जुड़ी है। :( डॉक्स से : "जब आप कॉपी प्रक्रिया शुरू करते हैं, तो आपको ब्राउज़र को खुला रखना चाहिए, जबकि कॉपी प्रगति पर है।"
डेविड लेमायियन

4
मैं एक बाल्टी में 8 मिलियन फ़ाइलों के साथ ऐसा करने की कोशिश कर रहा हूं। न जाने कितने महीने लगेंगे मुझे सारे चेकबॉक्स चुनने में ...
क्रिस हैरिसन

28

मैंने एडब्ल्यूएस वेब कंसोल s3cmdऔर एडब्ल्यूएस सीएलआई का उपयोग करके दो बाल्टी क्लोन करने की कोशिश की है । यद्यपि ये विधियां ज्यादातर समय काम करती हैं, फिर भी वे धीमी गति से होती हैं।

तब मैंने पाया s3s3mirror: दो S3 बाल्टी सिंक करने के लिए एक विशेष उपकरण। यह बहु-थ्रेडेड और मेरे द्वारा आजमाए गए अन्य तरीकों की तुलना में बहुत तेज़ है। मैंने जल्दी से एक AWS क्षेत्र से दूसरे में डेटा के Giga-बाइट को स्थानांतरित कर दिया।

इसे https://github.com/cobbzilla/s3s3mirror पर देखें , या https://registry.hub.docker.com/u/pmoust/s3s3mirror/ से डॉक कंटेनर डाउनलोड करें


1
यदि आपके पास स्थानांतरण के लिए बहुत सारी फाइलें हैं, तो यह नौकरी के लिए सबसे अच्छा उपकरण है। शर्म करो यह अब तक जवाब की सूची नीचे है ...
जॉन क्रिसस्टोम

कुछ लोगों को ध्यान दें: संकलन करने के लिए जावा 6/7 की आवश्यकता है।
ब्रायन

1
मैं एक EC2 उदाहरण से यह प्रयोग कर रहा हूँ और यह अविश्वसनीय रूप से तेजी से काम करता है! मुझे <स्रोत-बाल्टी> और <गंतव्य-बाल्टी> को वास्तविक बाल्टी नाम से बदलना होगा (न कि समापन बिंदु या AWS सीएलआई में ऐसा कुछ)।
लोहे की जूनी

1
बड़ी संख्या में फाइलों के लिए कमाल का उपकरण, दूसरों के लिए अत्यधिक अनुशंसित। कॉपी थ्रेड की संख्या पर नियंत्रण शानदार है।
शौनक

क्या आपको नहीं लगता कि नौकरी करने के लिए थर्ड पार्टी एप्लिकेशन का उपयोग करना सुरक्षित नहीं है? आखिरकार हमें इन उपकरणों का उपयोग करने के लिए क्रेडेंशियल्स या एक्सेस कुंजी प्रदान करने की आवश्यकता है।
कीत सुगतदासा

10

aws cliबाल्टी के बीच सिंक करने के लिए एडहॉक समाधान के उपयोग के लिए:

aws s3 syncगति पर निर्भर करता है:
- S3 समापन बिंदु के लिए एक एपीआई कॉल के लिए विलंबता
- समवर्ती में किए गए एपीआई कॉल की मात्रा

समन्वयन गति बढ़ाने के लिए:
- aws s3 syncAWS उदाहरण से चलाएं (FreeBSD पर c3.large ठीक है; ;-))
- अद्यतन ~ / .aws / साथ विन्यास:
- max_concurrent_requests = 128
-।max_queue_size = 8096

निम्नलिखित विन्यास और उदाहरण प्रकार के साथ मैं 474 सेकंड के भीतर बाल्टी (309GB, 72K फाइलें, us-East-1) को सिंक करने में सक्षम था।

अधिक सामान्य समाधान के लिए विचार करें - AWS DataPipeLine या S3 क्रॉस-रीजन प्रतिकृति।


क्या आप जानते हैं कि अगर मैं S3 cp का उपयोग करता हूं तो मैं उसी प्रदर्शन की उम्मीद कर सकता हूं? क्या आप सुनिश्चित हैं कि जब आपने सिंक का उपयोग किया था तो यह वास्तव में सभी 309GB स्थानांतरित कर दिया था? सिंक केवल उन फ़ाइलों को सिंक करेगा जो समान नहीं हैं या दूसरी बाल्टी में मौजूद हैं।
ठंढी

इसके अलावा, आपके उपयोग के मामले में आपके विचार क्या हैं जहां मेरे पास 1k या उससे कम फाइलें हैं, लेकिन वे आकार (10gb) में बड़े हैं? क्या आपको लगता है कि मैं आपके लिए भी ऐसा ही प्रदर्शन देखूंगा?
ठंढा

@frosty, मेरे मामले में गंतव्य बाल्टी खाली थी। प्रति awscliडॉक्टर - aws syncकेवल नई और अद्यतन की गई फ़ाइलों की प्रतिलिपि बनाएँ। शायद आपको उच्च प्रदर्शन की उम्मीद करनी चाहिए aws cp(नकल आंतरिक रूप से की जाती है, आपका ग्राहक सिर्फ एपीआई कॉल जारी करता है)। प्रदर्शन इन कारकों पर निर्भर करता है: 1. src और dst क्षेत्रों के बीच विलंबता (जैसे- us-East-to us-west-X) 2. अपने क्लाइंट और AWS एपीआई एंडपॉइंट (आप कितनी तेजी से एपीआई कॉल जारी कर सकते हैं) के बीच विलंबता 3। समवर्ती अनुरोधों की राशि (आपके ग्राहक प्रति सेकंड कितने अनुरोध जारी कर सकते हैं)। मेरे मामले में एक ही क्षेत्र में बाल्टी के बीच 309G की नकल की गई (us-east-1)
टॉम लाइम

3

जैसा कि इस विषय पर Google की पहली हिट के बारे में है, अतिरिक्त जानकारी जोड़कर।

'Cyno' ने s3cmd-modification का एक नया संस्करण बनाया, जो अब समानांतर बाल्टी-टू-बाल्टी सिंकिंग का समर्थन करता है। बिल्कुल वैसा ही जिसका मुझे भी इंतजार था।

पुल अनुरोध पर है https://github.com/pcorliss/s3cmd-modification/pull/2 , में अपने संस्करण https://github.com/pearltrees/s3cmd-modification


s3cmd- संशोधन ने मुझे नकल करने के दिनों को बचाया।
gak

2

मैं किसी भी अन्य S3 कमांड लाइन टूल के बारे में नहीं जानता, लेकिन अगर यहाँ कुछ भी नहीं आता है, तो अपना खुद का लिखना आसान हो सकता है।

जो भी भाषा और अमेज़ॅन एसडीके / टूलकिट पसंद करें उसे चुनें। फिर आपको केवल स्रोत बाल्टी सामग्री को सूचीबद्ध / पुनर्प्राप्त करना होगा और प्रत्येक फ़ाइल को कॉपी करना होगा (समानांतर रूप से)

S3cmd- संशोधन के लिए स्रोत को देखते हुए (और मैं मानता हूं कि मुझे अजगर के बारे में कुछ भी नहीं पता है), ऐसा लगता है कि उन्होंने बाल्टी-से-बाल्टी कोड को समानांतर नहीं किया है, लेकिन शायद आप मानक अपलोड / डाउनलोड समानांतर कोड का उपयोग शुरुआती बिंदु के रूप में कर सकते हैं। यह करो।


हाँ। मैं इस विचार के साथ रहा हूँ और इसे रूबी में इवेंट मशीन के साथ रूबरू तरीके से लिख रहा हूं या JRuby के साथ पिरोया गया है। हालाँकि, s3cmd पहले से ही पूर्ण है और मैं इसके बजाय इसका उपयोग करूँगा। मैं s3cmd के डेवलपर के साथ बात कर रहा हूं, और उसके पास पाइपलाइन में कुछ समाधान हैं जो प्रदर्शन की समस्याओं का समाधान करेंगे।
शॉन मैकक्लेरी

1

एक aws s3 cp s3://[original-bucket] s3://[backup-bucket] --recursiveअच्छा काम करता है (यह मानते हुए कि आपके पास अवी क्लि सेटअप है)

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