2016-12-30 9 views
5

पर चाबियों की एक सूची लाने के लिए वितरित कैसे किया जाए मैं एस 3 से 60 मिलियन कुंजी (फ़ाइल नाम) की सूची प्राप्त करने की प्रक्रिया को वितरित करने की कोशिश कर रहा हूं।एस 3

पृष्ठभूमि: मैं पाइस्पार्क के माध्यम से लगभग 60 मिलियन फ़ोल्डर में सभी फ़ाइलों को संसाधित करने की कोशिश कर रहा हूं। विस्तृत HERE विशिष्ट sc.textFile ('s3a: // bucket/*') ड्राइवर के सभी डेटा को लोड करेगा, और उसके बाद क्लस्टर को वितरित करेगा। सुझाई गई विधि सबसे पहले फाइलों की एक सूची प्राप्त करने के लिए है, सूची को समानांतर करें, और फिर प्रत्येक नोड फाइलों का सबसेट प्राप्त करें।

समस्या: इस विधि में वहाँ अभी भी "फ़ाइलों की एक सूची प्राप्त" कदम में अड़चन है अगर उस सूची काफी बड़ी है। एस 3 बाल्टी में कुंजी (फ़ाइल नाम) की सूची प्राप्त करने का यह चरण भी कुशल होने के लिए वितरित किया जाना चाहिए।

क्या Ive की कोशिश की:

  1. अजगर एडब्ल्यूएस एपीआई (boto3) है, जो पृष्ठों परिणामों का उपयोग: मैं दो अलग अलग तरीकों की कोशिश की है। आदर्श रूप में हम पृष्ठों की संख्या का अनुमान लगा सकते हैं, और एक श्रेणी वितरित कर सकते हैं ताकि नोड 1 पृष्ठों 1-100 का अनुरोध करे, नोड 2 पृष्ठों 101-200 का अनुरोध करेगा। दुर्भाग्य से आप एक मनमानी पृष्ठ आईडी निर्दिष्ट नहीं कर सकते हैं, आपको " अगले टोकन "पिछले पृष्ठ से, परिणामों की एक लिंक की सूची उर्फ।

  2. aws cli, जिसमें वे फ़िल्टर को शामिल करने और शामिल करने की अनुमति देते हैं। फ़ाइल नामों के रूप में, मैं 8 अंकों के इंट के साथ सभी शुरुआतओं को पुनर्प्राप्त कर रहा हूं, सिद्धांत रूप में, नोड्स में उन फ़ाइलों के लिए पूर्ण फ़ाइल सूची का अनुरोध है जो 10 * और दूसरे नोड से मेल खाते हैं जो फ़ाइल नामों के लिए पूर्ण फ़ाइल सूची का अनुरोध करने के लिए 11 से मेल खाते हैं * आदि द्वारा किया जाता है:

    एडब्ल्यूएस S3 --recursive --exclude = "" शामिल = "10" S3: // बाल्टी/

दुर्भाग्य से यह एक कर किया जा रहा है प्रत्येक इंडेक्स का उपयोग करने के बजाय प्रत्येक अनुरोध को पूरा स्कैन करें क्योंकि यह प्रति अनुरोध 15 मिनट के लिए लटकता है।

क्या समाधान को व्यवहार्य बनाने का कोई तरीका है? क्या कोई तीसरा विकल्प है? मुझे यकीन है कि मैं लाखों एस 3 फाइलों में अकेले नहीं हूं जिन्हें पचाने की जरूरत है।

+1

सभी फाइलों की संरचना समान है? यदि हां - तो हमने इसे कैसे प्रबंधित किया है बेस बेस 3 पथ के शीर्ष पर एक हाइव टेबल बनाकर और फिर हम एचक्यूएल या स्पार्क एसक्यूएल का उपयोग करके हमारे डेटा मैनिपुलेशन/ट्रांसफॉर्मेशन करते हैं। मुझे बताएं क्या इससे मदद मिलती है। –

+0

धन्यवाद, यह एक दिलचस्प दृष्टिकोण है। हां, वे एक ही संरचना के साथ सभी जेसन फाइलें हैं।मैं निश्चित रूप से विश्लेषण के लिए कोशिश करूँगा, लेकिन अब मैं जो करने की कोशिश कर रहा हूं वह स्वरूपण में त्रुटियों की खोज है, हमारे पास दो स्रोत थे, और एक त्रुटि जिसने दस्तावेज़ों के आधे में गलत कुंजी बनाई थी। तो यह एक फिक्स और बचाव प्रयास है। –

उत्तर

0

यदि आप फ़ाइल नाम तोड़ने के तरीके के रूप में पर्याप्त होंगे, तो आप पैरामीटर list_objects_v2 का उपयोग कर सकते हैं।

4

यदि आपको अमेज़ॅन एस 3 सामग्री की एक सूची की आवश्यकता है और आपको इसे पूरी तरह से अद्यतित करने की आवश्यकता नहीं है, तो आप Amazon S3 Storage Inventory का उपयोग कर सकते हैं, जो एक एस 3 बाल्टी में सभी फ़ाइलों की दैनिक सीएसवी सूची स्टोर करेगा। फिर आप अपनी पिसपार्क नौकरियों को ट्रिगर करने के लिए उस सूची का उपयोग कर सकते हैं।

इसी तरह के झुकाव पर, आप Amazon S3 Event Notifications का उपयोग करके बाल्टी से ऑब्जेक्ट जोड़े/हटाए जाने पर डेटाबेस को अपडेट करने की प्रक्रिया के साथ सभी फ़ाइलों का डेटाबेस बनाए रख सकते हैं। इस तरह, सूची हमेशा आपके अद्यतित नौकरियों के लिए अद्यतित और सुलभ होती है।