一、背景介绍
本地有大量文件,规模数量超过50万个,通过Azure网页上传无疑是不现实的且不可靠的。所以如何解决大文件及批量文件上传到Azure blob? 可以使用azcopy来完成这项任务。
操作环境:ubuntu 22.04 LTS
前置条件:
1、预先下载azopy linux安装包,下载链接:
使用 AzCopy v10 将数据复制或移到 Azure 存储 | Microsoft Learn
2、在azure 控制台里面获取 共享访问签名,注意共享访问签名需要明确允许的IP地址(这里我使用的是GLP里面的虚拟服务器的IP地址),而后点击生成SAS和连接字符串。这里获取到共享访问签名,后面会用到,出于隐私保护,我用 azure_sas 来替代(后文使用)
3、数据集下载获取。 这里我以下载BridgeData数据集为例,下载链接:
BridgeData (rail-berkeley.github.io)
tips: 如何在GLP服务器下载大文件数据集?
可以使用wget命令, eg: nohup sudo wget https://rail.eecs.berkeley.edu/datasets/bridge_release/scripted_raw_6_18.zip
请务必使用nohup,否则你会面临前功尽弃的风险(哭)。
二、实现
Ok, 接下来开始文件的乾坤大挪移技能。
首先,要解压文件,只有解压的文件才能被使用。
可以使用命令:
nohup sudo unzip scripted_raw_6_18.zip
请务必使用nohup,否则你会面临前功尽弃的风险(反复强调)。
接下来,就是azcopy登场了。
最简单的azcopy的使用命令:
nohup ./azcopy copy '/opt/dataset/scripted_raw' 'https://{{mystorageaccount}}.blob.core.windows.net/{{mycontainer}}/scripted_raw' azure_sas
这里的mystorageaccount 和 mycontainer是你自己在azure blob的账号和容器,可以从azure blob获取; azure_sas就是上文获取到的共享访问签名。
OK,一切准备就绪,开始我们的表演,静静等待文件copy到azure吧。
瞧一瞧,半小时搞定了16万个文件,42G文件大小的上传,简直是神器啊,终于取下了我之前痛不欲生的文件上传、失败、再上传、再失败的无限循环痛苦面具啊。
撒花,happy ending.