2012-03-23 15 views
12

पर नहीं हटाएगा मै मैप्रिडस नौकरी के परिणामस्वरूप बनाए गए फ़ोल्डर को हटाने का प्रयास कर रहा हूं। बाल्टी में अन्य फाइलें ठीक से हटाती हैं, लेकिन यह फ़ोल्डर हटा नहीं जाएगा। जब मैं इसे कंसोल से हटाने की कोशिश करता हूं, तो इसकी स्थिति के बगल में प्रगति पट्टी बस 0 पर रहती है। लॉगआउट/लॉगिन के साथ कई प्रयास किए गए हैं।फ़ोल्डर अमेज़ॅन S3

+0

क्या फ़ोल्डर एक [लोचदार MapReduce] (http://aws.amazon.com/elasticmapreduce/) नौकरी से या किसी अन्य MapReduce f से स्टेम करता है ramework? –

+0

लोचदार MapReduce – babonk

उत्तर

5

सबसे पहले और सबसे महत्वपूर्ण, Amazon S3 में वास्तव में फ़ोल्डर्स/निर्देशिकाओं की मूल अवधारणा नहीं है, बल्कि एक फ्लैट स्टोरेज आर्किटेक्चर है जिसमें बाल्टी और ऑब्जेक्ट्स/कुंजियां शामिल हैं - एस 3 के लिए अधिकांश टूल में देखी गई निर्देशिका शैली प्रस्तुति AWS Management Console स्वयं) पूरी तरह से सम्मेलन पर आधारित है, यानी समान उपसर्ग वाले ऑब्जेक्ट्स के लिए पदानुक्रम अनुकरण करना - इस वास्तुकला के बारे में अधिक जानकारी के लिए How to specify an object expiration prefix that doesn't match the directory? पर मेरा उत्तर देखें, जिसमें एडब्लूएस दस्तावेज़ से उद्धरण/संदर्भ शामिल हैं।

तदनुसार, आपकी समस्या एडब्ल्यूएस मंचों में इस पदानुक्रम का अनुकरण के लिए एक अलग परंपरा का उपयोग करके एक उपकरण से स्टेम सकता है, उदाहरण के लिए देखें निम्नलिखित जवाब:

  • संबंधित सवाल Cannot delete file from bucket, जहां के लिए इवान मॉइसीव के जवाब वह यह जांचने के लिए एक और उपकरण का उपयोग करने का सुझाव देता है कि आपको ऐसी समस्या हो सकती है और तदनुसार इसका समाधान करें।

  • एडब्ल्यूएस टीम What are these _$folder$ objects पर प्रतिक्रिया? - यह एक सम्मेलन है जो एसए 3 में निर्देशिका बनाने के लिए हैडोप समेत कई टूल द्वारा उपयोग किया जाता है। उन्हें मुख्य रूप से खाली निर्देशिका निर्दिष्ट करने की आवश्यकता है। किसी ने एक और सौंदर्य योजना को पसंद किया होगा, लेकिन यह वही तरीका है जो ये उपकरण करते हैं।

शुभकामनाएँ!

0

सबसे पहले, getBucket विधि से निर्देशिका की सामग्री को पढ़ें, फिर आपको सभी फ़ाइलों की सरणी सूची मिल गई है, फिर फ़ाइल को deleteObject विधि से हटाएं।

if (($contents = $this->S3->getBucket(AS_S3_BUCKET, "file_path")) !== false) 
{ 
    foreach ($contents as $file) 
    { 
    $result = $this->S3->deleteObject(AS_S3_BUCKET,$file['name']); 
    } 
} 

$this->S3 S3 वर्ग वस्तु है, और AS_S3_BUCKET बाल्टी नाम है।

1

मुझे निम्न त्रुटि मिल रही थी जब मैंने एक बाल्टी हटाने की कोशिश की जो क्लाउडफ़्रंट से लॉग फ़ाइलों को रखने वाली निर्देशिका थी।

An unexpected error has occurred. Please try again later. 

क्लाउडफ़्रंट में लॉगिंग अक्षम करने के बाद मैं फ़ोल्डर को सफलतापूर्वक हटाने में सक्षम था।

मेरा अनुमान है कि यह क्लाउडफ़्रंट द्वारा उपयोग किया जाने वाला एक सिस्टम फ़ोल्डर था जिसने मालिक द्वारा हटाने की अनुमति नहीं दी थी।

अपने मामले में, आप यह जांचना चाहेंगे कि MapReduce प्रश्न में फ़ोल्डर पर है या नहीं।

1

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

मेरा समाधान कोड के साथ इसे हटाना था। मैंने s3 पर फ़ाइल हैंडलिंग के लिए पायथन में boto पैकेज का उपयोग किया है और जब मैंने अपने पायथन कोड से उस फ़ोल्डर को हटाने का प्रयास किया था तो हटाया गया था।

import boto 
from boto.s3.key import Key 
keyId = "your_aws_access_key" 
sKeyId = "your_aws_secret_key" 
fileKey="dummy/foldertodelete/" #Name of the file to be deleted 
bucketName="mybucket001" #Name of the bucket, where the file resides 
conn = boto.connect_s3(keyId,sKeyId) #Connect to S3 
bucket = conn.get_bucket(bucketName) #Get the bucket object 
k = Key(bucket,fileKey) #Get the key of the given object 
k.delete() #Delete 

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

आप नाम का एक फ़ोल्डर हटाना चाहते हैं -> डमी तो कुंजी होगा

fileKey = "/dummy/" 
15

मैं एक ही मुद्दा था और एडब्ल्यूएस CLI इस्तेमाल किया इसे ठीक करने के:

aws s3 rm s3://<your-bucket>/<your-folder-to-delete>/ --recursive ; 

(यह मान लिया गया है आपने aws configure चलाया है और aws s3 ls s3://<your-bucket>/ पहले से ही काम करता है)

+0

एक आकर्षण की तरह काम करता है, निश्चित रूप से जाने का रास्ता। और जो भी उत्सुक है, यदि आप स्थानीय निर्देशिका अपलोड करना चाहते हैं, तो विपरीत कमांड '' 'aws s3 cp है आपका लॉक प्रोजेक्टफोल्डर एस 3: // yourS3bucketname --recursive --debug''' – AdjunctProfessorFalcon

+0

कोई ';' नहीं है लाइन के अंत में। 'aws> s3 rm s3: // //--recursive' –

+0

@ YuAnShaolinMaculelêLai ';' शक्तिशक्ति या बाश में वैकल्पिक है। मैं स्वीकार करता हूं, हमने अर्द्ध-कॉलोनलेसनेस (रूबी/पायथन) के बाद के आधुनिक युग में प्रवेश किया है ... लेकिन इसका उपयोग है: एक ही पंक्ति पर एकाधिक कमांड की अनुमति देता है, या एक कथन के अंत को दर्शाता है। – sonjz

संबंधित मुद्दे