对象存储

  • 数据迁移工具(qfetch)

    最近更新时间:2017-08-16 14:46:37

    qfetch

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

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

    适用场景

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

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

    下载

    建议下载最新版本

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

    模式一:

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

    导出成功列表:

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

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

    Tips:

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

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

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

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

    以上内容是否对您有帮助?
  • Icon free helper
    Close