智能云上手指南:如何将历史数据迁移到万象优图

6 月 21 日,腾讯云在 2017「云+未来」峰会上推出了战略新品——智能云,宣布将腾讯积累近 20 年的 AI 能力向政府、企业和开发者开放,其中首批开放计算机视觉、智能语音识别、自然语言处理的三大核心能力。腾讯云技术社区陆续推出了系列文章,向普通开发者分享如何快速接入并使用这三大 AI 能力,节省自身的开发成本,同时极大提升开发效率和用户体验。

本文将为广大云开发者介绍如何将历史数据迁移到腾讯云万象优图

1 历史数据迁移

在使用万象优图以前,您的图片数据可能存在服务器本地文件系统、分布式文件系统以及其他云存储等,我们提供迁移工具,方便您将这些历史图片迁移到万象,目前支持3种存储方式的迁移:

  1. 图片在服务器本地存储,直接将某目录下的所有文件上传到万象优图。
  2. 指定URL列表文件,文件中每一行是一张图片的URL。工具会下载列表文件中的每一张图片并上传到万象优图。
  3. 指定七牛云存储的账号和空间名,迁移该指定空间中的所有文件或部分文件到万象优图。

本工具目前支持类Unix操作系统。推荐在Linux或Mac OS X下使用Python 2.7运行。

1.1 迁移工具下载地址

https://github.com/tencentyun/Cloud-Image-Migration-Tool

1.2 迁移工具安装使用方法

从github上通过git获取,或者下载压缩包解压到linux服务器上,然后进入工具目录

cd Cloud-Image-Migration-Tool/bin

1.2.1 启动迁移

运行start.sh脚本,工具会按照配置文件中的配置开始运行.启动前请修改配置,否则会运行失败。如果要迁移的文件较多,可后台运行,运行命令:

./start.sh &

上传完成后再次运行start.sh会重试失败的任务。

start.sh脚本首先扫描待上传的任务提交到任务列表,然后开始上传。如果第一个过程被打断,下次运行start.sh会重新扫描待上传的任务;如果第二个过程被打断,下次运行start.sh会继续上传。如果需要强制刷新任务列表请运行以下命令:

./start.sh -f &

1.2.2 查看迁移进度

启动后可查看迁移状态,运行stat.sh脚本,会在屏幕上持续输出迁移状态,按Ctrl+c退出查看。

./stat.sh

该脚本输出内容如下图:

数字有三列,第一列:失败的文件数;第二列:成功迁移的文件数;第三列:要迁移的文件总数

1.2.3 停止迁移

若启动后想做配置调整或任何异常发生,可停止迁移,运行stop.sh。

./stop.sh

在迁移过程中运行stop.sh脚本停止迁移,这一过程可能需要等待几秒钟的时间以保证已经开始的任务正常结束并写入日志。如果需要强制停止,运行stop.sh -f。

停止迁移之后如果没有清空日志并且没有修改配置信息,再次启动迁移会继续上次的迁移任务,重试所有失败记录但已经迁移成功的文件不会重传。

1.2.4 获取失败信息

获取迁移失败的文件列表及信息,运行view_failed.sh。

./view_failed.sh

1.2.5 清除日志

若想开始一次新迁移,可清空之前的日志信息,运行clean.sh。请慎用,因为日志文件会作为增量断点续传的参考信息,删除后再执行相同任务所有文件会重新上传。

1.3 修改配置

配置文件为config.ini位于conf目录, 配置文件中section name和option name不区分大小写。

vi Cloud-Image-Migration-Tool/conf/config.ini

1.3.1 迁移类型设置

设置migrate.type 为

Local 表示迁移linux本地文件系统的文件 URLList 表示迁移url列表文件中所有url指向的文件 Qiniu 表示迁移七牛某空间的文件

[MigrateInfo]
migrate.type = Local

1.3.1.1 本地文件系统

若迁移类型为Local,则需要配置上传的本地根目录位置,必须为绝对路径。上传后的file id不包含根目录。例如:

[Local]
local.image_root_path = /root/data/images/

迁移后图片的访问路径:

http: //上传的万象空间域名/图片相对于所配置的根目录的相对路径

比如,设置的本地目录:/data/web/images 有一张图片路径为:/data/web/images/2015/07/17/abc.jpg,上传后访问路径:http: //上传的万象空间域名/2015/07/17/abc.jpg

1.3.2 URL列表文件

若迁移类型为URLList,则需要配置URL列表文件的位置,必须为绝对路径。例如:

[URLList]
url.url_list_file_path = /data/url_list

迁移后图片的访问路径:

http: //上传的万象空间域名/原url的url路径

比如,原url为http: //www .xxx.yyy .com/2015/07/17/abc.jpg,上传后访问路径:http: //上传的万象空间域名/2015/07/17/abc.jpg

注意:若原url中有参数,上传后的文件名是去掉参数后的,比如,原url为http:// www .xxx. yyy. com/2015/07/17/abc.jpg?width=1024&height=1024,上传后访问路径:http: //上传的万象空间域名/2015/07/17/abc.jpg

1.3.3 七牛

若迁移类型为Qiniu,则需要配置七牛云存储账号相关信息。

qiniu.bucket填写被迁移的空间名;qiniu.domain为七牛域名,需要包含协议类型(如http:// ); 若只迁移一部分则需要提供qiniu.start_offset和qiniu.total_num,qiniu.start_offset从0计;若空间开启了防盗链,需要在qiniu.referer中指定访问来源域名,同样需要包含协议类型(如http:// ); 如果是私有空间,将qiniu.isprivate设置为True,否则设置为False。

[Qiniu]
[Qiniu]
qiniu.bucket = my_bucket_name
qiniu.AccessKey = _17terLxP-ZK7tma9jXgm7MuEOk72yP9OZBIP35G
qiniu.SecretKey = PFw6JivhTAdNKRojaguUkC6tlFHAI9SBrjVYdfya
qiniu.domain = http://abcde.com1.fg.glb.clouddn.com/
qiniu.referer = 
qiniu.isprivate = False

迁移后图片的访问路径:

http: //上传的万象空间域名/原七牛key

比如,原图片下载路径为http:// 7x3m4e .com 1.z0.glb.clouddn.com /2015/07/17/abc.jpg, 上传后访问路径:http: //上传的万象空间域名/2015/07/17/abc.jpg

1.3.4 万象优图账号信息

从万象优图图片空间中查看项目ID和空间名称,分别填写到appinfo.appid和appinfo.bucket;

从万象优图项目设置中查看Secret ID和Secret Key分别填写到appinfo.secretID和appinfo.secretKey。

[AppInfo]
appinfo.appid = 
appinfo.secretID = 
appinfo.secretKey = 
appinfo.bucket =

1.3.5 上传设置

Concurrency控制同时运行的上传进程数目,请根据上行带宽和机器配置适当调整该数值。必须提供一个大于0的整数。

db.commit.interval控制上传结果写回日志的时间间隔,单位为秒,应该提供一个合法的正整数或浮点数或正无穷(inf)。如果进程意外结束,未写回的日志将丢失。此值设置过小将严重影响性能,一般情况下使用默认值即可。

jobqueue.capacity、jobqueue.reload.threshold、buffer.size是控制任务队列和内存缓冲区的选项,一般情况下使用默认值即可。

[ToolConfig]
concurrency = 10
jobqueue.capacity = 2000
jobqueue.reload.threshold = 0.4
buffer.size = 100000
db.commit.interval = 3

fileid.ignore.if使工具在提交任务时忽略file id符合指定条件的任务。

fileid.ignore.unless使工具在提交任务时忽略file id不符合指定条件的任务。

error.ignore.if使工具在重试出错任务时忽略错误日志符合指定条件的任务。

以上三个选项若启用则应提供一个正则表达式,否则留空,语法参考Python re Module Reference。如果同时提供了fileid.ignore.if和fileid.ignore.unless,并且某个file id同时符合两个正则表达式,那么它会被忽略。

如忽略OS X操作系统下的.DS_Store文件,不重试错误码为-1886的任务:

[Advanced]
fileid.ignore.if = .*.DS_Store
fileid.ignore.unless = 
error.ignore.if = .*code: -1886.*

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫与算法进阶

学习Git(一)起步

什么是Git 在Git官网上找到这样一段描述 Git is a free and open source distributed version control...

3186
来自专栏FreeBuf

基于ThinkPHP的2个CMS后台GetShell利用

0x00 前言 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,由于其简单易用,很多cms都基于该框架改写。然而 Thinkphp在缓存使...

3259
来自专栏生信技能树

防止ssh登录服务器的掉线

因为云服务器是我自己的,而要给十几个新手使用,所以我应该使用root权限来选择修改sshd_config文件里面的服务端参数,这样才能做到一次修改,终身受益!!...

564
来自专栏difcareer的技术笔记

最新版MacOS(10.13.2)编译Android 4.4.4源码

网上搜一下Mac编译Android源码,能搜到很多,但最新版的MacOS(10.13.2)编译Android4.4.4的却没有,本文记录我的编译过程。

1134
来自专栏运维技术迷

Shell系列-Shell概述

一、shell环境及特性 1.什么是shell? 负责向内核翻译以及传达用户/程序指令,相当于操作系统的”外壳”.在Linux中默认shell一般为/bin/b...

2665
来自专栏云加头条

小程序测试方案初探

对于小程序如何做测试,依然是一头雾水,直到做了不少的项目,积累的一些经验和开源库之后才理清如何做测试,下面将会介绍如何对小程序做 UI 测试和单元测试。

1.7K3
来自专栏施炯的IoT开发专栏

Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程

    7月29日,微软推出了Windows 10 for PC的正式版,其版本号是Build 10240。近两天官方说已经有4700万的下载安装量,同时这个数...

2247
来自专栏dotnet core相关

WCF入门学习(4)

上一篇的学习中碰到一个问题,用地址http://localhost:8080/mex 访问元数据的时候一直提示400 bad request 错误,因为时间太晚...

794
来自专栏代码小睿

从 art-template 模版维护到动态加载的思考

  自己用 art-template 有些年头了,最近在培养团队学习 art-template 使用,发现有一个痛点比较难解决。

1060
来自专栏自动化测试

手机APP自动化之小白进阶_python

导语 本文介绍用python实现登录微信并发送公众号留言的几种方式,包括遇到的一些问题及解决方法,也附录了一些觉得很全面有用的资料,供想了解app自动化测...

1704

扫码关注云+社区