超大文件上传到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版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
随机推荐
- 读mongoose api 记录
mongoose 需要在Schemas基础上进行使用 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blo ...
- github在eclipse中的配置
http://www.cnblogs.com/yejiurui/archive/2013/07/29/3223153.html http://blog.csdn.net/shehun1/article ...
- 【POJ3299】Humidex(简单的数学推导)
公式题中已经给出,直接求解即可. #include <iostream> #include <cstdlib> #include <cstdio> #include ...
- 《Two Days DIV + CSS》读书笔记——CSS控制页面方式
1.1 你必须知道的知识 (其中包括1.1.1 DIV + CSS的叫法解释:1.1.2 DIV + CSS 名字的误区:以及1.1.3 W3C简介.由于只是背景知识,跳过该章.) 1.2 你必须掌握 ...
- POJ 1631 Bridging signals DP(最长上升子序列)
最近一直在做<挑战程序设计竞赛>的练习题,感觉好多经典的题,都值得记录. 题意:给你t组数据,每组数组有n个数字,求每组的最长上升子序列的长度. 思路:由于n最大为40000,所以n*n的 ...
- poj 2385 Apple Catching(dp)
Description It and ) in his field, each full of apples. Bessie cannot reach the apples when they are ...
- 黑马程序员 Java正则表达式,详解反斜线在Java中的作用
---------------------- ASP.Net+Android+IO开发S. .Net培训.期待与您交流! ---------------------- 在程序设计过程中,经常需要对获取 ...
- OpenStack中给wsgi程序写单元測试的方法
在 OpenStack 中, 针对web应用, 有三种方法来写单元測试 1) 使用webob生成模拟的request from __future__ import print_function imp ...
- iOS开发之让你的应用“动”起来
概览在 iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互 式绘图,如何通过核心动画创建基础动画.关键帧动 ...
- Git 提供篇
1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...