2017-09-15 113 views
1

我想移動約1個百萬個文件從Azure存儲到S3。我使用Azure python sdk和boto3編寫了這個python腳本。有效地從Azure的Blob存儲的數據複製到S3

marker = None 
while True: 
    batch = azure_blob_service.list_blobs(
     container, marker=marker) 
    # copy blobs in batches 
    for blob in batch: 
     blob_name = blob.name 
     current_blob = azure_blob_service.get_blob_to_bytes(
      copy_from_container, blob_name) 
     s3_client.put_object(
      Body=current_blob.content, 
      Bucket=s3_bucket, 
      ContentType=current_blob.properties.content_settings.content_type, 
      Key=blob_name) 
    if not batch.next_marker: 
     break 
    marker = batch.next_marker 

但是這很慢。

我怎樣纔能有效地從蔚藍的數據移動到S3?

+0

它已經很長了我與S3工作,所以我可能是錯的,但S3不支持服務器端複製。正確?只有您可用的選項是從Azure將Blob下載到本地磁盤,然後將其上傳回S3。對? –

+0

@GauravMantri是的,我沒有找到類似的東西。我也在做類似於你的事情。但不是將它們下載到磁盤,而是使用'get_blob_to_bytes',然後將其上傳到S3。 –

+0

'get_blob_to_bytes' ....你仍然在下載數據。你沒有做的是將這些數據保存到本地磁盤,所以從網絡的角度來看,你沒有獲得任何東西。 –

回答

2

考慮到S3不支持像Azure Blob存儲這樣的服務器端異步複製blob,爲了將數據從Azure存儲移動到S3,您需要先從Azure存儲中下載blob,然後將它們上傳到S3。當您下載並上傳大量數據時,這就是互聯網速度起作用的地方。

如果你想加快整個過程中的一個替代方案是在亞馬遜本身就是一個虛擬機(最好在同一個區域作爲您的S3帳戶)運行此腳本。這樣,你就可以下載速度更快,然後將其上傳速度以及你將在同一區域進行上傳(假設亞馬遜比你目前有提供了更好的上網速度)。

+0

目前我正在Azure虛擬機上執行此操作。它會在EC2上做出改變嗎? –

+0

嗯.....有趣的問題。我認爲如果我們採用相同配置的虛擬機,那麼它應該差不多一樣。您的Azure虛擬機和存儲帳戶是否位於同一區域? –

+0

編號Azure虛擬機和存儲位於一個區域,而S3位於另一個區域。 –