文档首页 > > 最佳实践> 建立并使用个性化定制的分析流程

建立并使用个性化定制的分析流程

分享
更新时间: 2019/12/23 GMT+08:00

本示例通过指导您制作bwa工具镜像,将镜像工具添加至GCS中,创建自定义流程,帮助您学习如何使用自有的基因测序工具完成自定义流程的创建。

镜像制作与上传

在示例流程中,基因容器提供了以下三种工具:

本章以bwa工具为例介绍如何制作并上传镜像。

bwa工具并非只安装了bwa软件,由于bwa软件经常与samtools/htslib/sambamba/bedtools等软件库联合使用,所以制作镜像时同时安装了上述五种软件。

  1. 使用命令行工具SSH远程连接已购买的、绑定了弹性公网IP的节点。请确保该节点已安装docker软件,已有CCE集群下的节点绑定弹性公网IP后即可满足上述要求。
  1. 创建一个bwa-tool目录:

    mkdir bwa-tool

  2. 在bwa-tool目录下编辑Dockerfile文件:

    cd bwa-tool
    vi Dockerfile

    Dockerfile内容如下所示:

    FROM alpine
    
    MAINTAINER HUBQ <huboqiang@huawei.com>
    
    RUN apk add --update --no-cache bash ncurses libbz2 xz zlib  && apk add --virtual=deps --update --no-cache ncurses-dev musl-dev zlib-dev make gcc g++ bzip2-dev xz-dev bzip2 python
    
    ENV bwaver 0.7.12
    ENV samver 1.8
    ENV sambamver v0.6.7
    ENV bedtoolsver 2.17.0
    
    RUN wget -O /tmp/bwa-${bwaver}.tar.gz           https://github.com/lh3/bwa/archive/${bwaver}.tar.gz
    RUN wget -O /tmp/sam-${samver}.tar.gz           https://github.com/samtools/samtools/archive/${samver}.tar.gz
    RUN wget -O /tmp/htslib-${samver}.tar.gz        https://github.com/samtools/htslib/archive/${samver}.tar.gz
    RUN wget -O /tmp/sambamba-${sambamver}.tar.bz2  https://github.com/biod/sambamba/releases/download/${sambamver}/sambamba_${sambamver}_linux.tar.bz2
    RUN wget -O /tmp/bedtools-${bedtoolsver}.tar.gz https://github.com/arq5x/bedtools/archive/v${bedtoolsver}.tar.gz
    
    RUN tar -zxvf /tmp/bwa-${bwaver}.tar.gz
    RUN tar -zxvf /tmp/sam-${samver}.tar.gz
    RUN tar -zxvf /tmp/htslib-${samver}.tar.gz
    RUN tar -jxvf /tmp/sambamba-${sambamver}.tar.bz2
    RUN tar -zxvf /tmp/bedtools-${bedtoolsver}.tar.gz
    
    RUN cd /bwa-${bwaver} && sed -i "s/u_int32_t/uint32_t/g" *.c && sed -i "s/u_int32_t/uint32_t/g" *.h && make && mv /bwa-${bwaver}/bwa /usr/bin
    RUN cd /htslib-${samver} && make
    RUN mv /htslib-${samver} /htslib
    RUN cd /samtools-${samver} && make  && mv /samtools-${samver}/samtools /usr/bin
    RUN mv /sambamba /usr/bin
    RUN cd /bedtools-${bedtoolsver} && sed -i 's/bash/sh/g' /bedtools-${bedtoolsver}/Makefile && ls  && make
    ENV PATH $PATH:/bedtools-${bedtoolsver}/bin/
    RUN mv /htslib/bgzip /htslib/tabix /usr/bin
    
    RUN rm -rf /tmp/* /bwa* /samtools* /htslib*

  1. 将Dockerfile内容写入文件夹目录,使用 docker build -t 名称:版本 文件夹目录 命令,建立镜像:

  1. 制作完成后,可以上传至华为云私有镜像仓库,也可以上传至其他镜像仓库,供Kubernetes集群在执行对应任务时使用。这里介绍上传至华为云私有镜像仓库的方法。

    登录容器镜像服务控制台,单击“登录指令”,复制docker login指令:

    将命令粘贴在命令行中,然后上传镜像:
    sudo docker tag [{镜像名称}:{版本名称}] swr.cn-north-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}
    sudo docker push swr.cn-north-1.myhuaweicloud.com/{组织名称}/{镜像名称}:{版本名称}

  1. 镜像上传成功后,可进入“我的镜像 > 自有镜像”中查看镜像详情。

添加工具

完成镜像上传后,为了在基因容器服务中使用该镜像作为工具,需要进行工具添加。

  1. 登录基因容器控制台,选择左侧导航栏的“工具仓库”,在右侧页面单击“添加工具”

  2. 单击“选择镜像”,选择刚才上传至容器镜像服务的镜像。

    填写工具名称(bwa-sam-sambamba-bed)、工具版本(v0),设置标签(基因组分析基础)。

  3. 添加成功后,您可在“工具仓库 > 私有工具”的“基因组分析基础”标签下找到该工具。在流程编写时您可以使用“bwa-sam-sambamba-bed:v0”字段,调用该工具。

创建自定义流程

流程编写,目前支持以下几种方式:

  • 通过流程设计器创建。
  • 直接编写yaml文件,上传本地流程模板。
  • 使用其他流程管理工具编排模板(如 SJM/SnakeMake 等),将模板转换为基因容器的流程描述文件。您可以自行转换,也可以提交工单联系基因容器团队开发人员,提供现有模板,由开发团队协助转换。

对于初次使用者,我们建议使用流程设计器来编写流程,如图1

图1 通过流程设计器创建流程

具体步骤如下:

  1. 拖拽工具到画布中。

    进入流程设计器,打开私有工具下对应标签(基因组分析基础),拖拽两个工具(bwa-sam-sambamba-bed:v0)到画布中。可以看到这两个工具的tool属性均为bwa-sam-sambamba-bed:v0。

  1. 修改工具名称。

    将这两个工具分别命名为job-a和job-b。

  2. 配置模板参数,用集成的编辑器设置属性值。

    单击需修改属性的工具,更改该工具的 memory(任务所需内存资源大小),cpu(任务所需cpu资源大小),以及commands或command_iter(容器中执行的命令)。其中,commands 为数组形式,数组长度表示并发数量,每个数组成员均对应一个容器中的执行命令。commands_iter支持带变量的shell脚本,多个任务只有少数变量有区别时,可以使用 command_iter 迭代该变量,详见表3 commands_iter属性说明。commands与 command_iter二者语法十分接近,每个工具只能设置其中一种属性,不能同时使用。

  3. 添加连接线,指定工具间的依赖关系。

    从工具空心点连接到其他工具上的连接线代表上游任务依赖下游任务。箭头从job-a指向工具job-b时,代表先完成job-a中的任务,再完成job-b中的任务。拖拽完成后,会在job-b中,自动生成depends字段,代表对应的依赖关系。

  4. 添加volumes字段,声明各个任务挂载了哪些共享存储。

    pvc属性值 ${GCS_REF_PVC}, ${GCS_DATA_PVC},${GCS_SFS_PVC} 为基因容器内置变量,分别表示基因容器提供的参考组OBS桶、基因容器环境关联的OBS桶和基因容器环境关联的SFS卷,mount_path属性中对应的是存储的根目录在容器中的挂载路径。

    如果有额外盘需要挂载,也可在volumes中添加关联的Kubernetes集群中的任意共享存储(PVC)名称。

  5. 校验模板是否正确。

    单击设计器页面顶部的,在界面左侧“操作日志”窗口中若出现“校验流程成功”,表示流程正确。

  6. 保存模板。

    单击设计器页面顶部的,选择“本地文件”,输入文件名称“bwa-sam-sambamba-bed”,单击“保存”。保存成功后您可以在本地查看bwa-sam-sambamba-bed.yaml文件。

使用命令行执行流程

使用命令行执行流程前,需要先按照创建CCE环境中的步骤完成环境的创建。然后下载并配置命令行工具,请参见安装命令行工具

命令行工具配置完成后,输入 gcs get environment,得到如下返回则说明配置完成。

使用命令行执行流程的方法有如下三种:

  1. 提交并执行流程

    需要事先自行通过文本编辑器,或者基因容器服务的流程设计器编写 YAML 格式模板。创建自定义流程中已经使用流程设计器创建了流程,并且流程描述文件bwa-sam-sambamba-bed.yaml已保存到了本地。

    提交并执行流程:

    gcs sub workflow bwa-sam-sambamba-bed.yaml --name bwa-sam-sambamba-bed 

    提交完成后,您可以使用 gcs get execution,获取任务执行状态:

    输入 gcs get execution EXECUTIONID,可以进一步查看具体子任务的执行进度:

  2. 提交单个 shell 脚本,执行单独的一个任务。
    例如以下脚本bwa_help.sh:
    bwa 2> /obs/log.err

    投递时,使用我们之前建立的镜像“bwa-sam-sambamba-bed:v0”即可 ,该镜像中已经安装完成了bwa_help.sh中调用的bwa软件。脚本的使用方法如下:

    gcs sub job --memory 1g --cpu 1 --tool bwa-sam-sambamba-bed:v0 --shell sh bwa_help.sh

    该命令可以将本地脚本bwa_help.sh上传至默认的/obs/gcs-cli路径下,并在容器中调用该执行。--shell 参数可以根据镜像情况使用bash/sh/zsh等,默认是bash。memory和cpu规定了系统cpu、内存占用多少资源。

  1. 在本地提交一组shell脚本,并行执行。

    以多个样本并行执行bwa软件使用方法为例。首先完成上传本地数据文件中的文件上传后,假设需要对上传的原始文件、参考基因组进行基因比对,有如下脚本bwa_mem.sh:

    fastq=$1 
    ref=$2  
    bwa mem $ref $fastq

    此时,如果对这个脚本执行不同参数,可以额外写一个脚本bwa_mem_work.sh。注意这里使用的 /ref 文件夹是由基因窗口提供的hg19.fa公共参考组数据,无需上传。

    sh bwa_mem.sh /obs/sample/R1.fq.gz /ref/reference_files/hg19.fa >/obs/sample1.sam
    sh bwa_mem.sh /obs/sample/R2.fa.gz /ref/reference_files/hg19.fa >/obs/sample2.sam

    若如使用命令行工具执行简单脚本所示,上传的自己本地文件,则这里不使用 /ref 目录,此处bwa_mem_work.sh 应写为:

    sh bwa_mem.sh /obs/sample/R1.fq.gz /obs/reference/hg19.fa >/obs/sample1.sam
    sh bwa_mem.sh /obs/sample/R2.fa.gz /obs/reference/hg19.fa >/obs/sample2.sam

    对这个额外脚本,需要使用 gcs sub repjob 投递。同样这里可以使用“bwa-sam-sambamba-bed:v0”这个工具:

    gcs sub repjob -cpu 1 --memory 1g --tool bwa-sam-sambamba-bed:v0 --shell sh bwa_mem_work.sh

查看报错日志

投递程序出现报错时,需要查看错误日志。错误日志,可以在命令行中,通过在脚本中,加入重定向cmd >log.out 2>log.err,将错误日志重定向在文件中。如果未重定向,也可以通过kubectl命令,远程获取容器内部的输出信息。

如果通过kubectl命令查看报错日志,需要下载kubectl工具。在下载前,需要先给集群绑定弹性IP。查看报错日志的具体步骤如下:

  1. 进入云容器引擎控制台,选择“资源管理 > 集群管理”,单击服务所在集群下的“kubectl”。

  1. 给集群绑定弹性IP:

    绑定成功后,您可以继续在控制台操作,也可以在命令行中直接使用 gcs get kubectl 命令:
    gcs get kubectl

  1. 通过 gcs sub job,提交脚本文件run.sh。如果显示执行错误,则需要查看日志。

  1. 在获取kubectl命令后,您可以通过输入 kubectl get pods -a 命令查看任务。

    kubectl get pods -a

    结果显示“run-49609-0-7f557948fece11e8-646bm”这个任务有错误:

  1. 输入 kubectl logs NAME 查看该错误:

    根据返回结果可知错误原因为路径错误,更改路径即可。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区