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

2017-10-18 16:34:47 浏览数 (1)

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服务器上,然后进入工具目录

代码语言:javascript复制
cd Cloud-Image-Migration-Tool/bin

1.2.1 启动迁移

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

代码语言:javascript复制
./start.sh &

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

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

代码语言:javascript复制
./start.sh -f &

1.2.2 查看迁移进度

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

代码语言:javascript复制
./stat.sh

该脚本输出内容如下图:

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

1.2.3 停止迁移

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

代码语言:javascript复制
./stop.sh

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

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

1.2.4 获取失败信息

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

代码语言:javascript复制
./view_failed.sh

1.2.5 清除日志

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

1.3 修改配置

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

代码语言:javascript复制
vi Cloud-Image-Migration-Tool/conf/config.ini

1.3.1 迁移类型设置

设置migrate.type 为

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

代码语言:javascript复制
[MigrateInfo]
migrate.type = Local

1.3.1.1 本地文件系统

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

代码语言:javascript复制
[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列表文件的位置,必须为绝对路径。例如:

代码语言:javascript复制
[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。

代码语言:javascript复制
[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。

代码语言:javascript复制
[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是控制任务队列和内存缓冲区的选项,一般情况下使用默认值即可。

代码语言:javascript复制
[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的任务:

代码语言:javascript复制
[Advanced]
fileid.ignore.if = .*.DS_Store
fileid.ignore.unless = 
error.ignore.if = .*code: -1886.*

0 人点赞