GTX直压上云技术实践

update:测试时出现二进制文件大小恰好为256M整数倍时解压不退出的bug,提交至维护人员后已经解决,不得不说反馈速度真的是快,从我提出到解决总共用了不到1天时间。给点个赞,棒棒哒
GTX Compressor(直压上云技术)调研,由于现业务存在大规模业务数据上传云存储,云厂商提供接口具有一些局限性,现在尝试gtz这个工具。该工具目前支持阿里云及AWS非常符合业务场景,具有高压缩比、高性能、高速直压云等特点,且有数据校验机制,而且开包即用,不依赖当前系统其他任何库

介绍:GTX Compressor是Genetalks公司GTX Lab实验室开发的面向大型数据(数GB甚至数TB数据,尤其是生物信息数据)上云,而量身定制的复杂通用数据压缩打包系统,可以对任意基因测序数据以及数据目录进行高压缩率的快速打包,形成单个压缩数据文件,以方便存储档与远程传输、校验。区别于以往的压缩工具,GT Compressor系统着力于 高压缩率,高速率,方便的数据抽取 。
——————摘自Github上该项目官方介绍

环境要求

  • 64位 Linux 系统(CentOS 6.5以上或Ubuntu 12.04以上,推荐Ububtu 14.04及以上64位操作系统)
  • 4核以上,最小8GB内存的主机系统(若要达到最大并发性,推荐32核 64GB内存,或与AWS C4.8xlarge机器相同配置)
  • 我的测试环境为:Centos7.3_x64

安装及使用

安装非常简单暴力,直接就是开包即用,下载对应系统版本即可

  • 安装

    1
    2
    3
    wget https://github.com/Genetalks/gtz/archive/master.zip
    unzip xvf master.zip
    tar xvf gtz_0.2.2b_centos_pre_release.tgz
  • 使用方法

    1
    2
    3
    4
    5
    6
    USAGE:
    ./gtz [--list] [-e <string>] [-f] [--endpoint <string>] [--timeout <string>]
    [--secret-access-key <string>] [--access-key-id <string>] [-b
    <string>] [-s <string>] [-c] [-n <string>] [-l <string>] [-i]
    [-d] [--delete] [-a] [-g <number>] [-o <string>] [--] [--version]
    [-h] <file names> ...
  • 压缩解压选项解释

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ### 通用选项
    -h:输出以上命令行帮助信息
    --version:输出gt_compress程序的版本号
    --access-key-id : 指定云平台用户ID
    --secret-access-key: 指定云平台用户密钥
    --endpoint : 指定阿里云OSS平台的访问域名和数据中心
    ### 压缩选项参数
    -f, --force : 强制删除容器内的object
    --timeout : 指定上传超时阀值
    -i:压缩时增加索引,主要用于在压缩文件中快速检索fastq文件的某段内容,该选项会降低压缩速度
    -a:追加模式,本次压缩的内容会追加到压缩文件中
    -g:分组加速压缩,分组越多,需要的cpu和内存越多,压缩速度越快。不指定该值时,程序会根据cpu和内存自动选择最优值
    -o:指定压缩文件名,不指定时,默认为out.gtz
    file_name:需要压缩的文件或目录, 若不指定,则从标准输入中读入数据
    ### 解压选项参数
    -d,--decode : 解压模式 --list : 列出压缩包中所有的压缩文件名,与-d参数一起使用 -e, --extract : 解压压缩包中指定的压缩文件,文件名之间用冒号:分割,与-d参数一起使用
    --timeout : 指定下载超时阀值
    -c,--stdout : 解压数据输出至标准输出, 只能与 -d 参数一起使用
    -o:指定输出文件名,使用-n或-l时需要指定该选项,否则不需要该选项
    file_name:需要压缩的文件, 若不指定,则从标准输入中读入数据

使用范例

注意:使用时可以使用命令行参数指定key变量和endpoint变量,也可以使用export声明,如
export access_key_id=xxxxxx
export secret_access_key=xxxxxx
export endpoint=xxxxxx (该环境变量只有上传至OSS时才需设置)

  • 本地压缩解压

    1
    2
    3
    4
    5
    6
    7
    8
    ####----压缩----
    #直接压缩,1G的数据压到68k了,不过源数据不具备参考性,dd出来的数据
    ./gtz -o test.gtz up_data_test/gtz-test3.log
    #通过zcat和管道压缩,支持二进制文件
    zcat up_data_test/gtz-test3.log |./gtz -o test2.gtz
    ####----解压----
    #解压单个文件,解压路径为压缩时的路径
    ./gtz -d ./test.gtz
  • 压缩上传AWS例子
    上传文件在S3上显示为目录gtz-test4.name,该目录里面下面为原文件同名目录及一个gtz.meta文件,如图
    1

    1
    2
    3
    4
    5
    6
    7
    export AWS_ACCESS_KEY_ID='your_key'
    export AWS_SECRET_ACCESS_KEY='Your_key'
    export AWS_DEFAULT_REGION='your_region'
    #上传单个文件,上传1G的测试数据需要50s左右
    ./gtz -o s3://arvon-gtz-test/gtz-test4.name up_data_test/gtz-test4.db
    #追加文件到压缩包,如果不加-a参数会覆盖原来的文件
    ./gtz -o s3://arvon-gtz-test/ up_data_test/gtz-test3.log
  • 解压缩AWS上S3到本地

    1
    ./gtz -d s3://arvon-gtz-test/test3

官方文档

Github项目地址