简介

qfetch是一个数据迁移工具,利用七牛提供的fetch功能来抓取指定文件列表中的文件。在文件列表中,你只需要提供资源的外链地址和要保存在七牛空间中的文件名就可以了。

使用该工具进行资源抓取的时候,可以根据需要中断任务的执行,下次重新使用原命令执行的时候,会自动跳过已经抓取成功的资源。

下载

建议下载最新版本

版本 支持平台 链接
qfetch v1.2 Linux, Windows, Mac OSX 下载

使用方法

注意:Windows 系统用户在 开始 菜单栏选择 运行 输入 cmd 回车即可打开 DOS 命令行窗口,然后切换到 qfetch_windows_amd64.exe 的所在磁盘路径。假设你的 qfetch_windows_amd64.exe 存放在 F:\tools\qfetch_windows_amd64.exe ,那么如下几行命令可以切换到 qfetch_windows_amd64.exe 存放的目录:

> F:
> cd tools

如图:

image

该工具是一个命令行工具,需要指定相关的参数来运行。

Usage of qfetch:
  -ak="": qiniu access key
  -sk="": qiniu secret key
  -bucket="": qiniu bucket
  -job="": job name to record the progress
  -file="": resource list file to fetch
  -worker=0: max goroutine in a worker group
  -zone="z0": qiniu zone, z0 or z1
命令 描述 必须指定
ak 七牛账号的AccessKey,可以从七牛的后台获取
sk 七牛账号的SecretKey,可以从七牛的后台获取
bucket 文件抓取后存储的空间,为空间的名字
job 任务的名称,指定这个参数主要用来将抓取成功的文件放在本地数据库中,便于后面核对
file 待抓取资源链接所在文件的本地路径,内容由待抓取的资源外链和对应的保存在七牛空间中的文件名组成的行构成
worker 抓取的并发数量,可以适当地指定较大的并发请求数量来提高批量抓取的效率,可根据目标源站实际带宽和文件平均大小来计算得出
zone 请求发送到的入口机房,可以不指定,默认为z0,即七牛宁波机房;可选设置为z1,即七牛北京机房

模式一:

上面的file参数指定的待抓取资源链接所在文件的行格式如下:

文件链接1\t保存名称1
文件链接2\t保存名称2
文件链接3\t保存名称3
...

其中\t表示Tab分隔符号。

例如:

http://img.abc.com/0/000/484/0000484193.fid 2009-10-14/2922168_b.jpg
http://img.abc.com/0/000/553/0000553777.fid 2009-07-01/2270194_b.jpg
http://img.abc.com/0/000/563/0000563511.fid 2009-03-01/1650739_s.jpg
http://img.abc.com/0/000/563/0000563514.fid 2009-05-01/1953696_m.jpg
http://img.abc.com/0/000/563/0000563515.fid 2009-02-01/1516376_s.jpg

上面的方式最终抓取保存在空间中的文件名字是:

2009-10-14/2922168_b.jpg
2009-07-01/2270194_b.jpg
2009-03-01/1650739_s.jpg
2009-05-01/1953696_m.jpg
2009-02-01/1516376_s.jpg

模式二:

上面的file参数指定的待抓取资源链接所在文件的行格式如下:

文件链接1
文件链接2
文件链接3
...

上面的方式也是支持的,这种方式的情况下,文件保存的名字将从指定的文件链接里面自动解析。

例如:

http://img.abc.com/0/000/484/0000484193.fid
http://img.abc.com/0/000/553/0000553777.fid
http://img.abc.com/0/000/563/0000563511.fid
http://img.abc.com/0/000/563/0000563514.fid
http://img.abc.com/0/000/563/0000563515.fid

其抓取后保存在空间中的文件名字是:

0/000/484/0000484193.fid
0/000/553/0000553777.fid
0/000/563/0000563511.fid
0/000/563/0000563514.fid
0/000/563/0000563515.fid

日志

抓取成功的文件在本地都会写入以job参数指定的值为名称的本地leveldb数据库中。该leveldb名称以.开头,所以在Linux或者Mac系统下面是个隐藏文件。在整个文件索引都抓取完成后,可以使用leveldb工具来导出所有的成功的文件列表,和原来的列表比较,就可以得出失败的抓取列表。上面的方法也可以被用来验证抓取的完整性。

示例

抓取指令为:

qfetch -ak='x98pdzDw8dtwM-XnjCwlatqwjAeed3lwyjcNYqjv' -sk='OCCTbp-zhD8x_spN0tFx4WnMABHxggvveg9l9m07' 
-bucket='image' -file='diff.txt' -worker=300 -job='diff'  | tee diff.log

上面的指令抓取文件索引diff.txt里面的文件,存储到空间piccenter里面,并发请求数量300,任务的名称叫做diff,成功列表日志文件名称是.diff.job。另外由于该命令打印的报警日志输出到终端,所以可以使用tee命令将内容复制一份到日志文件中。

导出成功列表:

leveldb -export='.diff.job' >> list.txt

注意,上面任务的名字是diff,而任务对应的的leveldb的名字是.diff.job

经验

一般来讲,如果是抓取任务的话,不一定需要导出最终成功的列表,只需要检查原始列表文件行数和抓取成功的文件行数一致就可以了。

使用下面方式获取列表行数: $ wc -l diff.txt

使用下面方式获取成功抓取数量: $ leveldb -count='.diff.job'

然后比较一致即可,如果发现数量不一致,可以重新运行原始命令(设置太大并发的情况下,存在失败的可能性)。 只要最后的结果没有错误或者都是404的错误,那么就是抓取成功了。404的错误可以后面跟进解决。


如果有任何问题,请进入 七牛云存储问答社区 或者发送 工单 咨询