【问题标题】:How to upload large number of files to Amazon S3 efficiently using boto3?如何使用 boto3 高效地将大量文件上传到 Amazon S3?
【发布时间】:2022-05-07 06:25:26
【问题描述】:

我的本​​地目录中有 10000 个 10Mb 文件,我正在尝试使用 boto3 通过顺序上传方法将其上传到 Amazon S3 中的存储桶。我在这里面临的唯一问题是将大量文件上传到 S3 需要大量时间。我想知道是否有有效的方法(使用多线程或多处理)将文件上传到 Amazon S3?

root_path ="/home/shivraj/folder/"

path = root_path+'folder_raw/' # use your path
dest_path = root_path+'folder_parsed/'
backup_path = root_path+'folder_backup/'


def parse_ivn_files():
    src_files_list = glob.glob(path + "*.txt.zip") # .log files in the path files
    try:
        if src_files_list:
            for file_ in src_files_list:
                df = pd.read_csv(file_,compression="zip",sep="|", header=None)
                file = file_.replace(path,'')
                file_name = file.replace(".txt.zip",'')
                df.columns=["Date","Time","System_Event","Event_Type","Event_sub_type","Latitude","Longitude","Field_1","Field_2","Field_3","Field_4","Event_Number","Event_Description"]  
                new_df=df['Event_Description'].str.split(',',expand=True)         
                large_df = pd.concat([df,new_df],axis=1)   
                large_df.to_csv(dest_path+file_name+".csv",index=False)
                s3.meta.client.upload_file(dest_path+file_name+".csv", 's3-bucket-name-here', 'ivn_parsed/'+file_name+".csv")
                s3.meta.client.upload_file(path+file_name+".txt.zip", 's3-bucket-name-here', 'ivn_raw_backup/'+file_name+"_bk.txt.zip")
                os.rename(path+file_name+".txt.zip", backup_path+file_name+"_bk.txt.zip")
        else:
            print("No files in the source folder")


    except:
            raise FileNotFoundError

【问题讨论】:

  • Amazon Snowball 是您或许应该考虑的左侧字段选项。
  • 您可能需要使用多个线程并行运行您的代码。我的猜测是,在某些时候,您将在 CPU 利用率(在 gzip 解压缩中)、磁盘 I/O(从本地存储中读取字节)或网络 I/O(将字节推送到 S3)方面成为瓶颈。你被困在哪一个决定了你需要继续前进。但是要卡在其中任何一个上,您需要开始并行处理多个文件。
  • 非常感谢您的意见。我会调查他们。
  • 在走多线程的道路之前,您需要分析您当前的吞吐量和可用带宽。如果你有一个千兆连接到互联网,那么是的,你可以通过分离读取、压缩和写入过程来提高性能。但是,如果您与一群人共享 25 兆位(或更慢)的连接,您可能会遇到带宽限制。
  • @kdgregory 带宽延迟产品对 TCP 的影响表明并行化几乎总是有一些好处。

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

我会选择 s4cmd - 这是一个不错的工具,可以并行上传您的文件,并且还解决了一些其他问题:

https://github.com/bloomreach/s4cmd

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2012-07-31
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多