Skip to content

yangyingli/qfetch

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

#qfetch

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

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

###适用场景

该工具适用的场景需要满足如下条件:

  1. 资源所在的源站必须具有较大的可用带宽,这样可以在业务低峰期进行资源抓取
  2. 根据源站可用带宽和文件的平均大小,以及能够进行抓取的时间段,计算出数据迁移所需要的时间是否满足需求

###下载

建议下载最新版本

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

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

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

模式一:

上面的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

注意: Windows系统下面使用该工具时,指定的参数两边不需要单引号。

上面的指令抓取文件索引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的错误可以后面跟进解决。

###帮助 如果您遇到任何问题,可以加QQ:2037014430,我将乐意帮助您,非技术问题勿扰。

About

七牛资源批量抓取工具,根据指定URL列表抓取资源并存储到七牛云空间。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 86.8%
  • Shell 13.2%