빅데이터분석

Docker를 이용한 Bioinformatics 플랫폼

hongiiv 2015. 4. 29. 13:09
반응형

한때? 학회세션이나 기타 개인적인 요청 등으로 유전체 데이터에 대해서 빅데이터의 관점에서 어떻게 클라우드를 활용하느냐?에 대한 이야기를 하고 돌아다니기도 했습니다. 뭐 여러 측면에서 클라우드라는 장점이 있을 수 있겠습니다만 여기서는 가상화 또는 컨테이너 기술을 기반으로 어떻게 활용될 수 있을지에 대해서 알아보겠습니다. 도커라는 컨테이너 기술을 이용한 유전체 데이터 분석에 관한 내용입니다.


Flow-based programming (FBP)

구글의 Polymer나 React, KLay Layered, NeoFlow의 기술을 이용한 the-graph를 이용하면 어플리케이션에서 프로세스를 블랙박스화하여 아래처럼 일련의 과정을 정의할 수 있습니다. 이미 이분야에서는 이를 파이프라인이라는 이름으로 부르며 데이터 분석을 위해 이러한 파이프라인을 이용합니다. 우리가 잘 알고 있는 GATK Best Practices도 하나의 파이프라인으로 표현이 가능하죠.



컨테이너를 이용한 모듈의 블랙박스화

그럼 FBP에서의 프로세스(위 그림의 네모칸에 해당)를 어떻게 구현하느냐에 대해서는 좀 복잡합니다. 일반적인 어플리케이션의 경우 표준화된 (가령 스프링 프레임워크라든지) 환경에서 작성되고 운영되지만 이쪽 분야의 경우 각가의 프로세스가 운영되는 환경이 제각각이라는 겁니다. BWA가 도는 환경 GATK가 도는 환경, GATK라도 Java의 버전에 따라 영향을 받는다던가. 암튼 하나의 컴퓨터에서 단일 환경으로 돌리기엔 무리라는 겁니다. 


그러면 각각의 네모를 네모만의 환경을 구축해주는 것입니다. 만약 BWA를 돌리는 네모라면 BWA만을 돌릴 수 있는 환경인 A를 만들어주고 GATK 2.x를 돌리는 네모라면 GATK 2.x를 최적으로 구동할 수 있는 환경 B를 만들어 주면 됩니다. 여기에 각 네모의 이름, input, output과 함께 네모를 구동할때 필요한 파라메터를 정의해 주게 됩니다.


Docker를 이용한 모듈 실행 환경 만들어주기

우선 표준 도커 이미지를 이용하여 컨테이너를 하나 만들고 이 컨테이너 안에 samtools를 설치합니다. apt-get install samtools 정도면 되겠습니다. 이제 samtools를 돌리기 위한 wrapping 작업을 수행합니다. wrapping시 필요한 input, output, 파라메터를 정의합니다. Inputs() 클래스는 tool(samtools)의 입력을 정의하는 것으로 각각 input은 define.input을 사용하며 name, descrition, required, list의 인자를 가질 수 있습니다. execute는 실제 실행 부분으로 Proces를 이용하여 실행할 명령을 입력합니다. 'test_'로 시작되는 test_sam_to_bam은 테스트를 위한 것으로 input으로 /sbgenomics/test-data/mock.sam을 이용하여 samtools wrapper를 테스트합니다.


뭐 중요한 것은 Bioinformatics를 이용한 분석 플랫폼을 구축하는데에 도커만큼 유용한 것도 없습니다. 현재 도커를 이용한 플랫폼에는 SevenBridges Genomics, BGI의 BGI Online이 있습니다.

 

반응형