Skip to content

KCC2020(한국컴퓨터종합학술대회) 데이터베이스분야 최우수논문

Notifications You must be signed in to change notification settings

Jin0331/SparkVCFtools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔧 SparkVCFTools

기간 : 2020.03 - 2020.06 (약 3개월)

기획/개발 - 1인

프로젝트 환경 - Ubuntu 18.04 LTS Bionic Beaver

KCC2020(한국컴퓨터종합학술대회) 데이터베이스분야 최우수논문

dh

이진우, 원정임, 윤지희, "분산병렬 클러스터 컴퓨팅을 이용한 GVCF(Genome Variant Call Format) 파일의 정렬 및 병합 방법", Journal of KIISE(KCI 우수등재), 2021. (제1저자)

DOI : 10.5626/JOK.2021.48.3.358

🔧 한줄소개

Apache Spark를 이용한 gVCF(genome variant call format) 파일의 정렬과 병합을 신속하게 도와주는 Software


🔧 적용 기술

  • 언어

    Python, Scala

  • 프레임워크

    Apache Hadoop, Apache Spark, Docker, Docker Swarm

  • 오픈 소스

    PySpark

  • 버전 관리

    ​ Git / Github


🔧 개발 배경

  1. 유전자/변이 분석에 일반적으로 사용되는 Broad Institute의 GATK(genome analysis toolkit)는 NGS(차세대 시퀀싱) 데이터 분석 및 처리를 위한 단계별 모듈을 제공
  2. NGS 데이터(FastQ 파일)는 품질 평가 및 정렬 과정을 거쳐 BAM 파일로 변환
  3. “HaplotypeCaller” 모듈은 BAM 파일로부터 변이 추출 연산을 수행하여 그 결과로 GVCF 파일을 생성
  4. “CombineGVCFs” 모듈은 다수의 GVCF 파일을 정렬/병합하여 단일 GVCF 파일을 생성
  5. 생성된 단일 GVCF 파일은 “GenotypeGVCFs” 모듈을 거쳐 최종적인 VCF(variant call format) 파일로 생성되고 이를 통하여 유전자/변이 분석 진행
image-3 image-5

CombineGVCFs 모듈은 개인별로 생성된 다수의 GVCF(genome variant call format) 파일을 정렬 및 병합하여 단일 GVCF 파일을 생성하는 기능을 수행 하지만, 다수의 GVCF 파일에 속한 변이(행)을 순차적으로 접근하여, 비교 분석 후 정렬 및 병합을 진행하기 때문에 다른 모듈에 비하여 매우 긴 시간이 소요

따라서 본 연구에서는 기존 모듈의 실행시간을 단축하기 위하여, 분산병렬 클러스터(Spark)를 이용한 GVCF 파일 정렬/병합 모듈을 제안


🔧 gVCF 파일 형식

  • GATK HaplotypeCaller를 실행할 때 -ERC GVCF (또는 -ERC BP_RESOLUTION) 옵션을 넣고 실행하게 되면 output으로 GVCF 생성

  • GVCF는 VCF의 한 종류로, genomic VCF를 뜻함

  • 대상이 가진 모든 변이를 표현함. 이때 변이는 GVCF 파일에서 row(행)을 나타냄

  • variant site(변이정보 존재)과 non-variant block(변이정보 존재하지 않음)으로 해당 대상의 모든 변이정보를 나타냄

    image-8
    alt text alt text

🔧 개발 아이디어

  • CombineGVCFs의 GVCF 파일 정렬 및 병합 예시 image-11

  • Fixed fields는 변이의 정보를 나타내며, Genotype fields 해당 변이에 대한 각 대상이 가진 유전적 정보를 나타냄.

  • 즉, Fixed fields에 Genotype fields의 정보가 일치되는 형태

  • 따라서 주어진 GVCF 파일의 Fixed fields 열을 정렬 및 병합하고(Phase 1 단계), 정렬 및 병합된 Fixed fields 열에 Genotype fields 열을 정렬 및 병합(Phase 2)하는 두 단계로 진행

    image-7


🔧 핵심 기능

  • 전체 구성도

    image-12
  • Phase 1

    • Phase 1 Fixed fields, FORMAT 열 병합 알고리즘 및 예시

      image-13 image-15
    • Phase 1 Fixed fields, FORMAT 열 정렬 알고리즘 및 예시

      image-16
    • Phase 1 Action

      image-17
  • Phase 2

    • Phase 2 Genotype fields 열 병합 및 정렬 알고리즘

      image-18
      • 예시

        image-19 image-20
    • Phase 1의 병합된 GVCF 파일(Fixed fields + FORMAT 열)과 Phase 2의 병합된 GVCF 파일(Genotype fields 열)과 병합하여 최종적으로 병합된 GVCF 파일을 생성

      image-21
    • Phase 2 Action

      image-22

🔧 성능 평가

  • Docker, Docker Swarm을 이용한 클러스터 구축

    image-23
  • 사용 데이터

    image-24
  • GATK의 CombineGVCFs와의 비교

    image-25

    CombineGVCFs는 GVCF 파일의 개수가 증가할수록 실행시간이 큰 폭 증가​ 반면에 제안하는 모듈은 실행시간이 일정한 폭으로 증가.​ 병합되는 GVCF 파일의 개수에 따라 제안하는 모듈은 CombineGVCFs에 비해 실행시간이 최소 75%에서 최대 87%까지 단축되는 것을 확인​


  • Worker 개수에 따른 GVCF 파일 병합 실행시간 비교

    image-26

    실행시간의 비교는 제안하는 모듈로 진행하며, GVCF 파일 20개에 대한 병합​

    Spark 클러스터에서 사용 가능한 Worker의 수가 증가함에 따라 병합의 실행시간이 감소​

    특히, Worker를 2개 사용했을 때와 10개 사용했을 때의 병합 실행시간은 약 3배 정도의 차이가 발생​


  • Phase 1과 Phase 2의 정렬 및 병합 실행시간 비교image-27

    Worker 개수는 10개이고, Core와 Memory는 50, 250GB으로 설정​

    병합되는 GVCF 파일이 2개부터 10개까지는 Phase 2의 병합 실행시간이 빠른 것으로 나타나지만, 15개부터는 Phase 1보다 병합 실행시간이 느려지는 것을 확인 ​

    또한, Phase 1은 GVCF 파일의 개수가 증가함에 따라 실행시간이 균일하게 증가하지만, Phase 2는 증가함에 따라 실행시간 불규칙적으로 증가​


🔧 결론

  • 분산병렬 클러스터를 이용한 GVCF 파일 정렬 및 병합 모듈을 제안​

    다수의 GVCF 파일 정렬 및 병합 를 위해 Spark 적용​

    GVCF 파일의 특성을 이용하여 Phase 1과 Phase 2로 정렬 및 병합 진행​

    기존 파일 병합 및 모듈인 CombineGVCFs 보다 실행시간이 최소 75%에서 최대 87%까지 단축되는 것을 확인

About

KCC2020(한국컴퓨터종합학술대회) 데이터베이스분야 최우수논문

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published