超大文件上传到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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- 谁在唱衰PC?说出你的理由
在平板电脑的冲击下,PC真的衰落了吗?戴尔消费产品市场副总裁Raymond Wah给出了坚定的回答:“平板电脑没有办法代替PC”. 让他有如此底气做出这一判断的取决于两方面:一方面,PC(了解PC市场 ...
- VC-关于VC++ 6.0的那些事儿
Microsoft Visual C++,(简称Visual C++.MSVC.VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言.VC+ ...
- Ubuntu mysql中文乱码解决
#vim /etc/mysql/my.cnf 找到[mysqld]添加 character-set-server = utf8 重启mysql #restart mysql mysql> sho ...
- HTTP 错误 500.21 - Internal Server Error 处理程序“PageHandlerFactory-ISAPI-4.0_32bit”在其模块
问题: 系统是win7.今天把我做过的项目发布后,在IIS上运行时一直出现一个错误,HTTP 错误500.21-Internal Server Error.处理程序“PageHandlerFactor ...
- tp28xx port pin (open-drain )and (push-pull) 和open collector)
具有开漏(OD)输出的器件是指内部输出和地之间有个N沟道的MOSFET(T1),这些器件可以用于电平转换的应用.输出电压由Vcc'决定.Vcc'可以大于输入高电平电压VCC(up-translate) ...
- 转:完善eclipse+pdt作php开发中的代码提示能力
在eclipse开发中 ,可能由于各种原因导致项目文件(eclipse内置)丢失或错乱, 因而, 失去一些能力.. 以下是经过被痛苦折磨后查阅总结的一点东西 设置完下面内容, 支持以下特性 PHP: ...
- 2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数
最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...
- [转载]Linux编程 sockaddr_in 和sockaddr和in_addr详解
sockaddr sockaddr 是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 sa_family是地址家族,一般都是"AF_xxx& ...
- ps查看内存占用排序
ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n | less 解析一下: ps 都知道,是linux,unix显示进程信息的, -e 是显示所有进程 ...
- Android 开发笔记-Eclipse中文乱码
使用eclipse时经常中文乱码网上搜罗了下解决办法: 使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置 ...