超大文件上传到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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- JS 浮点计算BUG
最近做项目的时候遇到一个比较纠结的js浮点计算问题. 当时是做利率计算,因为利率大多数涉及到小数点,精度要求也很高. 0.6+0.1+0.1=? 结果出现:0.7999999999999 网上查找了一 ...
- 《Programming WPF》翻译 第7章 2.图形
原文:<Programming WPF>翻译 第7章 2.图形 图形时绘图的基础,代表用户界面树的元素.WPF支持多种不同的形状,并为它们每一个都提供了元素类型. 7.2.1基本图形类 在 ...
- grok 添加字段
filter { grok { match =>[ "message","%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \&q ...
- jsp中全局变量和局部变量的设置
- OS error set
Failed to resolve/decode supposed IPv4 source addres Failed to resolve/decode supposed IPv4 source a ...
- ListView之ArrayAdapter
ArrayAdapter 普通的显示listView子项,安卓的内置对象 使用方法: /* ListView :列表 通常有两个职责: a.将数据填充到布局 b.处理点击事件 一个ListView创建 ...
- C++里消除Wunused
编译程序时,有一大堆警告总是不爽的.别人的代码也就忍了,不好去改.自己的可没法忍.看看C++里怎么消除Wunused警告. 先来看下面的程序: #include <iostream> in ...
- Linux下用命令格式化U盘
1.找到U盘位置(已挂载) sudo fdisk -l 如图,我的在/dev/sdc4 2.格式化U盘 sudo mkfs -t vfat /dev/sdc4 -t 后面是格式化为哪种文件系统格式,v ...
- StaggeredGridView+universal-image-loader载入网路图片实现瀑布流
StaggeredGridView 开源lib https://github.com/maurycyw/StaggeredGridView 文章demo下载地址 http://download.c ...
- Git 推送分支
1.推送本地分支到远程: git push origin master 推送本地分支 master 到 远程的 origin 上面 git push origin test 将本地分支test推 ...