超大文件上传到Azure Linux虚拟机最佳实践
客户在实际进行迁移的时候,往往碰到需要将本地数据中心的超大文件,比如单个200GB的文件,或者总共1TB的无数文件上传到Azure上的情况,尤其是传到Azure的Linux虚拟机的场景,这种场景包括:
- 大日志文件上传到Azure进行分析
- 数据库备份文件导入导出
- 大数据文件下载到本地等等
尤其是要将数据库备份文件导入到Linux虚拟机进行数据库恢复,一般用户常常会选择传统的FTP方式进行处理,这样的方式通常会花费用户十几个小时,甚至几天的时间进行文件传输,但是在云计算的时代,其实有非常多的工具和方法可以使用,让你大幅度降低时间和成本,今天我们就以250GB数据库文件上传到Linux虚拟机为例,来看看怎么利用这些工具。
基本流程:
- 在本地安装或者使用一个Windows机器,内核数目和内存可能的话最好大一些,因为azcopy会根据内核数计算并发线程数
- 安装azcopy
- 在Azure上创建storage account,容器container
- 利用azcopy上传本地文件到Blob storage
- 在Linux虚拟机利用Azure CLI下载云端文件到本地Linux虚拟机
- 如果Azure上是Windows虚拟机,使用azcopy下载
限制和优化建议:
- 单个block blob的文件不能超过195GB,所以如果你的本地单个文件超过这个大小,你可以选择:
- 分割文件成小份
- 利用压缩软件压缩文件到较小大小
- 如果你本地的机器比较强大,并且单个文件的确比较大,建议你本地压缩,可以节约总体时间,你开始压缩的时候,大致可以知道这个压缩需要多长时间,
- 你的虚拟机和你的存储帐号入伍特别需要,请放在一个区域,比如都在北京或者上海,一边最大限度的降低延迟,提升速度
- Azcopy会最大限度的利用你的数据中心的带宽,如果你希望降低带宽占用,可以限制azcopy的并发处理数目,利用/NC来做限制,默认情况下,如果你是操作blob storage,azcopy的并发线程数是你处理器数目的8倍;对于Table的操作,默认的并发线程数是你的处理器数目。
- 上传下载速度和你的磁盘速度,网络带宽等都有关系,如果需要处理大规模文件,可以考虑临时调整你的数据中心带宽大小
在本示例中,基本环境如下:
- 备份文件未压缩前210GB,压缩后60GB
- 用户数据中心服务器,Windows Server 2012,16 cores,32GB
- Azure Linux虚拟机:A4, SUSE 11 SP3
基本配置步骤如下:
- 在用户数据中心Windows Server上下载并安装azcopy,请安装最新版本:
- 在Azure上创建一个存储账号,并取得存储账号的主访问密钥:


- 在该存储账号下创建一个容器,名字为upload,你可以按照自己的需要命名:


- 利用Azcopy,上传你本地的文件到Blob storage,注意要用到上个步骤创建到的存储账号和账号的key,假定当前的上传文件名为FULL0606.zip,放在你的E盘:
Azcopy.exe /Source:E:\ /Dest: https://myhousestorage.blob.core.chinacloudapi.cn/upload /DestKey:YOURSTORAGEKEY /Pattern:"FULL0606.zip"
参数说明:
/Souce:你的源文件地址,写目录,具体文件名写后面,如C:\data
/Dest:你的存储账号的容器地址,可以在你的容器页面看到
/DestKey:存储帐号的主访问密钥
更多关于azcopy的详细用法和命令,请参考:
https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/
- 传统方式下,用户会使用FTP的模式,经过调优,大概速度是3.5MB/s,而使用了azcopy,由于它有多线程,网络优化等底层功能的支持,速度可以达到近11MB/s,用户数据中心带宽100M,这个速度是相当不错的:

- 在将数据上传到Azure blob storage之后,需要在Linux虚拟机上将他下载到本地,在Windows上有Powershell,azcopy等工具,在Linux系统上,有Azure CLI作为跨平台的工具可以管理Azure的各项服务,关于如何在Linux上安装配置Azure CLI,请参考:
http://cloudapps.blog.51cto.com/3136598/1842181
- 在Linux虚拟机上,直接使用Azure的CLI命令下载上传到Blob storage上的压缩文件即可,在同一个region,速度大约30MB,但实际速度依赖于网络状况和当前负载:
# azure storage blob download upload FULL0606.zip ./

如果需要把Linux虚拟机上的大文件下载到本地,可以考虑逆序使用上述方法,azcopy经过了网络优化,压缩优化和算法优化,是Azure上数据处理的神器:)
在之前客户的方案中,文件上传到Linux虚拟机大约需要17个小时,经过选择合适的方法,数据上传,下载大约总共2个小时的时间,所以根据不同的场景选择不同的工具和方法很重要。
超大文件上传到Azure Linux虚拟机最佳实践的更多相关文章
- 4GB以上超大文件上传和断点续传服务器的实现
随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的 ...
- Java超大文件上传解决办法
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- web超大文件上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python
Atitit 文件上传 架构设计 实现机制 解决方案 实践java php c#.net js javascript c++ python 1. 上传的几点要求2 1.1. 本地预览2 1.2 ...
- php+超大文件上传
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- 怎么实现超大文件上传 2-3GB
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- java+超大文件上传与下载
这里先说下spring mvc 遇到的坑,就是如果文件上传时,后端这样写public String file1(HttpServletRequest request),根据request拿到的东西是 ...
- java+web+超大文件上传
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- Java+超大文件上传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- 用RBG颜色设置自定义颜色
这个是Mac自带的测色计 快捷键shift + command + c即可复制RBG格式的颜色 #DD0000 这个是csdn 的logo里的红色 我们得到的是十六位颜色代码 但是UIColor( ...
- LibSvm介绍---调用方法及参数介绍
libsvm是著名的SVM开源组件,目前有JAVA.C/C++,.NET 等多个版本,本人使用的是2.82 libsvm命名空间下主要使用类: svm_model 为模型类,通过训练或加载训练 ...
- RAC之RMAN恢复
之前整理的RMAN 有关还原的文章: RMAN 系列(五) ---- RMAN 还原 与 恢复 http://blog.csdn.net/tianlesoftware/archive/2010/07/ ...
- LeetCode_Word Ladder
Given two words (start and end), and a dictionary, find the length of shortest transformation sequen ...
- ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
App_Browsers 包含 ASP.NET 用于标识个别浏览器并确定其功能的浏览器定义 (.browser) 文件.有关更多信息,请参见浏览器定义文件架构(browsers 元素)和如何:在 A ...
- MicrosoftSQLServer中的锁模式
在SQL Server数据库中加锁时,除了可以对不同的资源加锁,还可以使用不同程度的加锁方式,即锁有多种模式,SQL Server中锁模式包括: 1.共享锁 SQL Server中,共享锁用于所有的只 ...
- Linux web性能优化
1,
- Android——SQLite实现面向对象CRUD
android中SQLite的使用,事实上倒也不难.可是与JDBC操作数据库相比,这个还是有点不顺手,并且我好久没写底层的封装了,使用SSM框架这些都不须要考虑......好了,废话不多说.以下直接建 ...
- 0..n去掉一个数,给你剩下的数,找出去掉的那个数
转载请注明转自blog.csdn.net/souldak , 微博@evagle 首先,考虑没有去掉那些数,如果n是奇数,n+1个最低位肯定是0101...01,count(0)=count(1),如 ...
- Oracle中drop user和drop user cascade的区别
drop user : 仅仅是删除用户,drop user username cascade :会删除此用户名下的所有表和视图. userSpecify the user to be dropped. ...