सवाल न्यूनतम लागत के साथ दो एस 3 बाल्टी के बीच फ़ाइलों को कैसे स्थानांतरित करें?


मेरे पास अमेज़ॅन एस 3 बाल्टी में लाखों फाइलें हैं और मैं इन फ़ाइलों को न्यूनतम बाल्टी और फ़ोल्डर्स में न्यूनतम लागत या बिना लागत के स्थानांतरित करना चाहता हूं। सभी बाल्टी एक ही क्षेत्र में हैं।

मैं यह कैसे कर सकता हूं?


39
2018-01-12 22:33


मूल




जवाब:


लाखों लोग एक बड़ी संख्या है - मैं बाद में वापस आऊंगा।

आपके दृष्टिकोण के बावजूद, अंतर्निहित तंत्र को सीधे एक बाल्टी से दूसरे में कॉपी करने की आवश्यकता है - इस तरह से (चूंकि आपकी बाल्टी एक ही क्षेत्र में हैं) इसलिए आपको बैंडविड्थ के लिए कोई शुल्क नहीं लगता है। कोई अन्य दृष्टिकोण केवल अक्षम है (उदाहरण के लिए फ़ाइलों को डाउनलोड और पुनः अपलोड करना)।

बाल्टी के बीच प्रतिलिपि 'पुट कॉपी' का उपयोग करके पूरा की जाती है - यह एक पुट अनुरोध है जिसमें 'x-amz-copy-source' हेडर शामिल है - मेरा मानना ​​है कि इसे एक COPY अनुरोध के रूप में वर्गीकृत किया गया है। यह फ़ाइल और डिफ़ॉल्ट मेटा-डेटा डिफ़ॉल्ट रूप से कॉपी करेगा। यदि आप एक ही समय में एसीएल सेट करना चाहते हैं तो आपको सही मान के साथ 'x-amz-acl' शामिल करना होगा (अन्यथा, यह निजी रूप से डिफ़ॉल्ट होगा)। आपसे आपके सीओपीवाई अनुरोध ($ 0.01 / 1,000 अनुरोध) के लिए शुल्क लिया जाएगा। कॉपी किए जाने के बाद आप अनइडेड फ़ाइलों को हटा सकते हैं (अनुरोध अनुरोध शुल्क नहीं लिया जाता है)। (एक बिंदु पर मैं बिल्कुल स्पष्ट नहीं हूं कि एक सीओपीवाई अनुरोध भी जीईटी अनुरोध का प्रभार लेता है, क्योंकि ऑब्जेक्ट को पहले स्रोत बाल्टी से लाया जाना चाहिए - यदि ऐसा होता है, तो शुल्क अतिरिक्त $ 0.01 / 10,000 होगा अनुरोध)।

उपर्युक्त शुल्क प्रतीत होता है अपरिहार्य - एक लाख वस्तुओं के लिए आप लगभग $ 10 (या $ 11) देख रहे हैं। अंत में आपको वास्तव में गंतव्य बाल्टी पर फ़ाइलों को बनाना होगा, अन्य दृष्टिकोण (जैसे फाइलों को टैर-गजिप करना, अमेज़ॅन आयात / निर्यात इत्यादि) इस लागत के आसपास नहीं होंगे। कम से कम कोई नहीं, अमेज़ॅन से संपर्क करते समय यह आपके लायक हो सकता है यदि आपके पास स्थानांतरण करने के लिए कुछ मिलियन से अधिक ऑब्जेक्ट हैं।

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

कुछ कमांड लाइन दृष्टिकोण हैं जो काफी व्यवहार्य हो सकते हैं:

  • s3cmd-संशोधन (उस विशिष्ट पुल अनुरोध) में समांतर सीपी और एमवी कमांड शामिल हैं और आपके लिए एक अच्छा विकल्प होना चाहिए।
  • एडब्ल्यूएस कंसोल सीधे प्रतिलिपि कर सकता है - हालांकि मैं इसके बारे में बात नहीं कर सकता कि यह समानांतर है।
  • टिम के के aws लिपि प्रतिलिपि कर सकती है - लेकिन यह समानांतर नहीं है - आपको अपनी इच्छित प्रतिलिपि चलाने के लिए इसे स्क्रिप्ट करने की आवश्यकता होगी (शायद इस मामले में सबसे अच्छा विकल्प नहीं है - हालांकि, यह एक महान स्क्रिप्ट है)।
  • क्लाउडबेरी एस 3 एक्सप्लोरर, बाल्टी एक्सप्लोरर, तथा CloudBuddy सभी को कार्य करने में सक्षम होना चाहिए, हालांकि मुझे नहीं पता कि प्रत्येक ढेर की दक्षता कैसे होती है। मेरा मानना ​​है कि इनमें से अधिकांश की बहु-थ्रेडेड फीचर्स को सॉफ्टवेयर की खरीद की आवश्यकता है।
  • उपलब्ध एसडीके में से किसी एक का उपयोग करके अपनी खुद की स्क्रिप्ट करें।

कुछ संभावना है कि s3fs काम कर सकता है - यह काफी समानांतर है, एक ही बाल्टी के बीच प्रतियों का समर्थन करता है - विभिन्न बाल्टी के बीच प्रतियों का समर्थन नहीं करता है, लेकिन पराक्रम विभिन्न बाल्टी के बीच समर्थन चालें।

मैं s3cmd-modification के साथ शुरू करूंगा और देख सकता हूं कि इसके साथ कोई सफलता है या बेहतर समाधान के लिए अमेज़ॅन से संपर्क करें।


51
2018-01-13 22:35



बाल्टी एक्सप्लोरर मेरे लिए अच्छा काम कर रहा है (इस समय दो बाल्टी के बीच फ़ाइलों को ले जा रहा है) - Noodles
कहा पर aws s3 sync s3://source s3://destination में फिट? - Olivier Lalonde


मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है लेकिन एडब्ल्यूएस प्रबंधन कंसोल में कट / कॉपी / पेस्ट फीचर है। उपयोग करने और कुशल करने के लिए बहुत आसान है।


5
2018-06-28 07:51



यह दस लाख फाइलों के साथ अच्छी तरह से काम करने की संभावना नहीं है। - James
@ जेम्स दर्द से पुष्टि कर सकते हैं;) - rob


मुझे लगता है कि आपको शायद अब तक एक अच्छा समाधान मिल गया है, लेकिन अन्य लोगों के लिए जो इस समस्या का सामना कर रहे हैं (जैसा कि मैंने हाल ही में किया था), मैंने विशेष रूप से एक एस 3 बाल्टी को दूसरे में मिरर करने के उद्देश्य से एक सरल उपयोगिता तैयार की है एक अत्यधिक समवर्ती, अभी तक सीपीयू और मेमोरी कुशल तरीके से।

यह यहां अपाचे लाइसेंस के तहत जिथब पर है: https://github.com/cobbzilla/s3s3mirror

यदि आप इसे आज़माने का फैसला करते हैं तो कृपया मुझे बताएं कि क्या आपके पास कोई प्रतिक्रिया है।


3
2018-05-17 01:12



मुझे s3s3mirror के साथ एक अच्छा अनुभव था। मैं इसे m1.small EC2 नोड पर सेट करने में सक्षम था और लगभग 2 घंटे में 1.5 मिलियन ऑब्जेक्ट्स कॉपी करता हूं। मेवेन और जावा के साथ मेरी अपरिचितता के कारण सेटअप थोड़ा मुश्किल था, लेकिन यह सबकुछ स्थापित करने के लिए उबंटू पर केवल कुछ उपयुक्त आदेश प्राप्त हुए। एक आखिरी नोट: अगर (मेरे जैसा) आप एक बड़ी, महत्वपूर्ण एस 3 बाल्टी पर अज्ञात लिपि चलाने के बारे में चिंतित हैं, तो कॉपी-बाल्टी बाल्टी पर केवल पढ़ने के लिए एक विशेष उपयोगकर्ता बनाएं और उन प्रमाणपत्रों का उपयोग करें। आकस्मिक विलोपन का शून्य मौका। - Micah
क्या यह विभिन्न खातों के बीच बाल्टी पर लागू किया जा सकता है? - Oliver Burdekin
@ ओलिवर बर्डकेन हां एक है --cross-account-copy विकल्प (-C संक्षेप में) ऐसा करने के लिए। ध्यान दें कि पूरे खातों की प्रतिलिपि करते समय, एसीएल हैं नहीं कॉपी किया; गंतव्य बाल्टी के मालिक को कॉपी किए गए डेटा की पूरी अनुमति होगी। - cobbzilla
धन्यवाद @rfcreader मैं इसकी लागत का अनुमान कैसे लगा सकता हूं? मुझे एडब्लूएस लागत कैलकुलेटर के बारे में पता है, लेकिन मुझे पता नहीं है कि इस प्रक्रिया में एलएस अनुरोधों की संख्या के मामले में क्या शामिल होगा। मुझे लगता है कि सीएलआई का उपयोग करके इन मीट्रिक को गिनना बहुत आसान है, लेकिन यदि आप और जानते हैं तो कृपया संपर्क में रहें। एडब्ल्यूएस समर्थन सुझाव दिया गया "अनुरोधकर्ता भुगतान करता है"। हा! - Oliver Burdekin
@ ओलिवर बर्डकेन s3s3mirror टाइप (GET, कॉपी, डिलीट इत्यादि) द्वारा AWS अनुरोधों की संख्या का ट्रैक रखता है। ये आंकड़े समय-समय पर चलते समय मुद्रित होते हैं, और आखिरी बार अंत में। आप वस्तुओं के एक छोटे से सबसेट की प्रतिलिपि बनाने के लिए सीमित / परीक्षण रन कर सकते हैं, इससे आपको सामान्य डेटा सेट की प्रतिलिपि बनाने के लिए कितने कुल अनुरोधों की आवश्यकता होगी, यह सामान्य अनुभव देना चाहिए। - cobbzilla


पुराना विषय, लेकिन यह किसी भी परिदृश्य की जांच करने वालों के लिए है। 20,000+ वस्तुओं के लिए, मुझे यह समय लगेगा। एडब्ल्यूएस लिनक्स / सेंटोस पर चल रहा है, कुछ ऑब्जेक्ट कुछ वीडियो और विभिन्न मीडिया फ़ाइलों के साथ-साथ अधिकांश भाग के लिए छवियां हैं।

बाल्टी ए से बाल्टी बी तक फ़ाइलों की प्रतिलिपि बनाने के लिए एडब्ल्यूएस सीएलआई टूल्स का उपयोग करना।

ए नई बाल्टी बनाएँ

$ aws s3 mb s3://new-bucket-name

बी पुरानी बाल्टी को नई बाल्टी से सिंक करें 

$ aws s3 sync s3://old-bucket-name s3://new-bucket-name

20,000+ वस्तुओं की प्रतिलिपि बना रहा है ...

17:03 शुरू किया

17:06 समाप्त हुआ

20,000+ वस्तुओं के लिए कुल समय = लगभग 3 मिनट

एक बार नई बाल्टी सही ढंग से कॉन्फ़िगर किया गया है, आईई। अनुमतियां, नीति इत्यादि। और आप पुरानी बाल्टी को हटाना चाहते हैं।

सी पुरानी बाल्टी को हटाएं / हटाएं

$ aws s3 rb --force s3://old-bucket-name

3
2018-06-01 08:56



जीवन उद्धारक मैं 300 + जीबी की प्रतिलिपि बना रहा हूं। एक टिप: यदि आप उसी क्षेत्र में बाल्टी से प्रतिलिपि बनाते हैं तो दूसरे क्षेत्र की तुलना में तेज़ तरीका है (और मैंने इसे कम महंगा पढ़ा है)। - Marcelo Agimóvel
मुझे आपकी विधि में कोई समस्या थी: फाइल गोपनीयता निजी पर सेट की गई थी, यहां तक ​​कि अधिकांश वस्तुएं सार्वजनिक भी हैं, क्या खुशी है? - Marcelo Agimóvel


एडब्ल्यूएस सीएलआई समानांतर प्रक्रियाओं में एक बाल्टी को दूसरे में कॉपी करने का एक तरीका प्रदान करता है। से लिया गया https://stackoverflow.com/a/40270349/371699:

निम्नलिखित आदेश एडब्ल्यूएस सीएलआई को नौकरियों को निष्पादित करने के लिए 1,000 धागे का उपयोग करने के लिए बताएंगे (प्रत्येक छोटी फ़ाइल या मल्टीपार्ट प्रति का एक हिस्सा) और 100,000 नौकरियों को देखें:

aws configure set default.s3.max_concurrent_requests 1000
aws configure set default.s3.max_queue_size 100000

इन्हें चलाने के बाद, आप सरल सिंक कमांड का उपयोग निम्नानुसार कर सकते हैं:

aws s3 sync s3://source-bucket/source-path s3://destination-bucket/destination-path

एक एम 4.xlarge मशीन (एडब्ल्यूएस - 4 कोर, 16 जीबी रैम में), मेरे मामले (3-50 जीबी फाइलों) के लिए सिंक / कॉपी की गति लगभग 9.5 एमआईबी / एस से 700 + एमआईबी / एस तक बढ़ी, इसकी गति वृद्धि डिफ़ॉल्ट विन्यास पर 70x।


1
2018-03-21 14:10





खोने वाली बाल्टी में, उस फ़ाइल को चुनें जिसे आप दूसरी बाल्टी पर कॉपी करना चाहते हैं।

  • क्रियाओं के तहत, 'कॉपी' चुनें।
  • बाल्टी प्राप्त करने के लिए जाओ।
  • क्रियाओं के तहत, 'पेस्ट' चुनें

0
2017-08-20 19:50



एक ऐसे समाधान को दोहराएं जो दूसरों ने एक साल पहले उल्लेख किया है? - Benjamin