直压到亚马逊AWS平台,阿里云OSS平台或者腾讯云COS平台

时间:2021-05-25 12:09:23

GTX Compressor (直压上云技术预览版)

Powered by GTXLab of Genetalks.

技术预览版本下载地址: https://github.com/Genetalks/gtz/archive/0.2.2h_tech_preview.tar.gz

English Manual.

系统简介

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

GTX Compressor可以在AWS C4.8xlarge机器(或同配置服务器),以超过114MB/s的速度,将接近200GB大小的33个质量数的FASTQ文件(NA12878_1.fastq),在13分钟内压缩到原大小的19%,而对于X10等只有 7个质量数的FASTQ数据,其压缩率更可以达到5.5%

GTX Compressor提供“直压上云”功能。考虑商业使用时,用户不仅需要将测序产生的海量数据存储于本地,更迫切地寻求将数据快速稳定传输至云端的能力。 GTX Compressor的数据压缩引擎允许用户直接将fastq文件压缩存储到亚马逊AWS平台,阿里云OSS平台或者腾讯云COS平台,并保持与本地压缩相同的压缩速度与压缩效率。普通100Mbits Intenet线路,可以在短短30分钟内稳定地将200GB Fastq文件的直压上云。

系统亮点

该数据打包压缩系统的特点:

  • 高压缩比 采用Context Model压缩技术,配合多种优化的预测模型,平衡系统并发度与内存资源消耗后,能达到极高的压缩率。对FASTQ文件,压缩率最高可达5.58%。

  • 高性能: GTX compressor充分发挥了CPU的并发性以及新型Haswell CPU体系结构与AVX2、BMI2等指令集的计算能力,使得在普通服务器上的压缩速度,最高能够以接近114MB/s的输入流量输入数据并压缩完毕。

  • 高速直压上云: GTX compressor支持直压上云和从云端直接解压下载功能。普通的20核服务器,通过百兆Intenet线路,可以在短短30分钟内稳定地将200GB Fastq文件的直压上云。 

系统环境要求

  • 64位 Linux 系统(CentOS 6.5以上或Ubuntu 12.04以上,推荐Ububtu 14.04及以上64位操作系统)

  • 4核以上,最小8GB内存的主机系统(若要达到最大并发性,推荐32核 64GB内存,或与AWS C4.8xlarge机器相同配置)

安装说明

本系统采用开包即用的打包原则,不依赖当前系统其他任何库。

下载包内包含ubuntu版本和centos版本的两个tar.gz的包。选择对应tar.gz的包,解压后,gtz命令就在当前解压的gtz_0.2.2b_ubuntu_tech_preview目录或gtz_0.2.2b_centos_tech_preview目录中,直接使用即可。

命令行说明

执行 ./gtz -h,输出命令行帮助说明。

USAGE: 
./gtz [--list] [-e <string>] [-f] [--endpoint <string>] [--appid <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> ...


通用选项说明:

  • -h:输出以上命令行帮助信息
  • --version:输出gt_compress程序的版本号
  • --access-key-id : 指定云平台用户ID
  • --secret-access-key: 指定云平台用户密钥
  • --endpoint : 指定阿里云OSS平台或者腾讯云COS平台的访问域名和数据中心
  • --appid : 指定腾讯云COS平台的用户ID

压缩选项说明:

  • -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:需要压缩的文件, 若不指定,则从标准输入中读入数据

示例:

配置环境变量:

export access_key_id=xxxxxx

export secret_access_key=xxxxxx

export endpoint=xxxxxx (该环境变量只有上传至OSS或者COS时才需设置)

export appid=xxxxxx (该环境变量只有上传至COS时才需设置)

压缩举例

直压阿里OSS:

./gtz  -o oss://gtz/out.gtz   source.fastq  (or source.fastq.gz, gtz支持对fastq.gz的重新压缩)

或者
# zcat 通过管道将fastq的数据送入gtz加压,zcat解压出来的fastq数据流在 out.gtz 中将以stdin这个文件名存在
zcat source.fastq.gz | ./gtz -o oss://gt-compress/out.gtz

直压腾讯COS:

./gtz  -o cos://gtz/out.gtz   source.fastq  (or source.fastq.gz, gtz支持对fastq.gz的重新压缩)

或者
# zcat 通过管道将fastq的数据送入gtz加压,zcat解压出来的fastq数据流在 out.gtz 中将以stdin这个文件名存在
zcat source.fastq.gz | ./gtz -o cos://gt-compress/out.gtz

直压AWS S3:

./gtz  -o s3://gtz/out.gtz   source.fastq   (or source.fastq.gz, gtz支持对fastq.gz的重新压缩)

或者:
# zcat 通过管道将fastq的数据送入gtz加压,zcat解压出来的fastq数据流在 out.gtz 中将以stdin这个文件名存在
zcat source.fastq.gz | ./gtz -o s3://gt-compress/out.gtz

压缩到本地:

./gtz  -o gtz/out.gtz   source.fastq  (or source.fastq.gz, gtz支持对fastq.gz的重新压缩)

或者
# zcat 通过管道将fastq的数据送入gtz加压,zcat解压出来的fastq数据流在 out.gtz 中将以stdin这个文件名存在
zcat source.fastq.gz | ./gtz -o gtz/out.gtz

海量小文件与tar配合进行快速压缩和上传:

为了大量小型文件(500MB以下)快速压缩或传输上云,支持使用管道方式与 tar 配合进行打包压缩, 对于海量小型数据,压缩和传输速度将非常好。(注意,这种方式下,GTZ使用的针对普通二进制数据的压缩算法,不会对tar包里面的fastq进行特殊处理)。
tar -cf - ./you_dir_or_file | gtz -o /dest.gtz

或者直接打包上云:

tar -cf - ./you_dir_or_file | gtz -o s3://bucket/dest.gtz

tar -cf - ./you_dir_or_file | gtz -o oss://bucket/dest.gtz

tar -cf - ./you_dir_or_file | gtz -o cos://bucket/dest.gtz

直接传输回来解包:

gtz -c -d s3://bucket/dest.gtz | tar -xf -

当然,大型文件(500MB以上)或大型文件所在的目录,尤其是 fastq或fastq.gz文件或其所在的目录,还是建议直接使用 GTZ 进行打包压缩直传,速度更快。

追加文件进压缩包

./gtz -a -o oss://gtz/out.gtz /A/source2.fastq  # -a 指当前是追加模式

./gtz -a -o cos://gtz/out.gtz /A/source2.fastq # -a 指当前是追加模式

./gtz -a -o s3://gtz/out.gtz /A/source2.fastq # -a 指当前是追加模式

./gtz -a -o gtz/out.gtz /A/source2.fastq # -a 指当前是追加模式

查看压缩包里包含的文件

./gtz_0.2.0_ubuntu_release/gtz --list -d oss://gtz/out.gtz

./gtz_0.2.0_ubuntu_release/gtz --list -d cos://gtz/out.gtz

./gtz_0.2.0_ubuntu_release/gtz --list -d s3://gtz/out.gtz

./gtz_0.2.0_ubuntu_release/gtz --list -d gtz/out.gtz

解压举例

从阿里 OSS 解压:

./gtz  -d oss://gtz/out.gtz

或者 单独抽取几个文件:
# -e 代表抽取文件,后面要抽取的文件名称间,用 ":" 隔开
./gtz -e source.fastq:/A/source2.fastq -d oss://gtz/out.gtz

或者某个文件到管道:
# -c 代表输出到console, -e 代表抽取其中的某个文件
./gtz -c -e source.fastq -d oss://gtz/out.gtz > myfile.txt
或者
./gtz -c -e source.fastq -d oss://gtz/out.gtz | gzip -c > source.gz

从腾讯 COS 解压:

./gtz  -d cos://gtz/out.gtz

或者 单独抽取几个文件:
# -e 代表抽取文件,后面要抽取的文件名称间,用 ":" 隔开
./gtz -e source.fastq:/A/source2.fastq -d cos://gtz/out.gtz

或者某个文件到管道:
# -c 代表输出到console, -e 代表抽取其中的某个文件
./gtz -c -e source.fastq -d cos://gtz/out.gtz > myfile.txt
或者
./gtz -c -e source.fastq -d cos://gtz/out.gtz | gzip -c > source.gz

从AWS S3 解压:

./gtz  -d s3://gtz/out.gtz

或者 单独抽取几个文件:
# -e 代表抽取文件,后面要抽取的文件名称间,用 ":" 隔开
./gtz -e source.fastq:/A/source2.fastq -d s3://gtz/out.gtz

或者某个文件到管道:
# -c 代表输出到console, -e 代表抽取其中的某个文件
./gtz -c -e source.fastq -d s3://gtz/out.gtz > myfile.txt
或者
./gtz -c -e source.fastq -d s3://gtz/out.gtz | gzip -c > source.gz

从本地文件:

./gtz  -d ./gtz/out.gtz

或者 单独抽取几个文件:
# -e 代表抽取文件,后面要抽取的文件名称间,用 ":" 隔开
./gtz -e source.fastq:/A/source2.fastq -d gtz/out.gtz

或者某个文件到管道:
# -c 代表输出到console, -e 代表抽取其中的某个文件
./gtz -c -e source.fastq -d gtz/out.gtz > myfile.txt
或者
./gtz -c -e source.fastq -d gtz/out.gtz | gzip -c > myfastq.gz