2012-03-23 28 views
12

我試圖刪除由於MapReduce作業而創建的文件夾。存儲桶中的其他文件刪除就好了,但該文件夾不會被刪除。當我嘗試從控制檯中刪除它時,其狀態旁邊的進度條只停留在0.已經進行了多次嘗試,包括在兩者之間註銷/登錄。文件夾不會在亞馬遜S3上刪除

+0

該文件夾是否來自[Elastic MapReduce](http://aws.amazon.com/elasticmapreduce/)作業或來自另一個MapReduce f ramework? – 2012-03-24 14:52:43

+0

Elastic MapReduce – babonk 2012-03-25 00:22:34

回答

5

首先,Amazon S3實際上並沒有文件夾/目錄的本機概念,而僅僅是一個由存儲桶和對象/鍵組成的平面存儲體系結構 - 在S3的大多數工具(包括AWS Management Console本身)完全基於約定,即模擬具有相同前綴的對象的層次結構 - 請參閱我對How to specify an object expiration prefix that doesn't match the directory?的回答以獲取關於此體系結構的更多詳細信息,包括AWS文檔中的引用/引用。

因此,您的問題可能會從工具中使用不同的約定來模擬這一層次在AWS論壇乾的,例如參見如下回答:

  • 伊萬·莫伊謝耶夫的回答相關問題Cannot delete file from bucket,其中他建議使用另一種工具來檢查你是否可能有這樣的問題並相應地進行補救。

  • AWS團隊對What are these _$folder$ objects的迴應? - 這是一個由許多工具使用的約定,包括Hadoop在S3中創建目錄。他們主要需要指定空目錄。人們可能更喜歡更美觀的方案,但是這正是這些工具所採用的方式。

祝你好運!

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

我試圖從Cloudfront中刪除一個存放日誌文件的目錄存儲桶時出現以下錯誤。

An unexpected error has occurred. Please try again later. 

當我在Cloudfront中禁用日誌功能後,我能夠成功刪除文件夾。

我的猜測是,這是Cloudfront使用的系統文件夾,不允許所有者刪除。

在你的情況下,你可能想檢查MapReduce是否持有有問題的文件夾。

1

我正面臨同樣的問題。嘗試了許多登錄,註銷嘗試和刷新,但問題仍然存在。搜索了stackoverflow並找到了在不同文件夾中剪切和粘貼文件夾的建議,然後刪除但沒有奏效。 你應該看的另一件事是可能影響你的存儲桶的版本控制可能會暫停版本控制,允許你刪除該文件夾。

我的解決方案是用代碼刪除它。我用python中的boto包進行s3文件處理,當我嘗試從python代碼中刪除該文件夾時刪除工作。

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 

S3不保留目錄它只是有一個扁平的文件結構,所以一切都用密鑰管理。 對於你來說它是一個文件夾,但對於S3來說它只是一個關鍵。

如果你想刪除一個文件夾命名爲 - >虛擬 那麼關鍵是

fileKey = "/dummy/" 
15

我有同樣的問題,並使用AWS CLI來解決它:

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

(假設你已經運行aws configureaws s3 ls s3://<your-bucket>/已經工作)

+0

工程就像一個魅力,絕對是一種方式。對於任何好奇的人,如果你想上傳本地目錄,相反的命令是'''aws s3 cp YourLocalProjectFolder s3:// yourS3bucketname --recursive --debug''' – AdjunctProfessorFalcon 2017-02-27 22:31:31

+0

沒有';'在行結束。 'aws> s3 rm s3:// /<你的文件夾刪除>/- 遞歸' – 2017-05-09 07:51:28

+0

@YuAnShaolinMaculelêLai';'在powershell或bash中是可選的。我承認,我們已經進入了一個半結腸(ruby/python)的後現代時代......但它有它的用途:允許在一行中使用多個命令,或者表示語句的結束。 – sonjz 2017-05-09 23:16:05