SparkBWA
Acelerar a aliñación de datos de secuenciación de ADN de alto rendemento
De que trata SparkBWA?
SparkBWA é unha ferramenta que integra o Burrows-Wheeler Aligner--[BWA][1] nun marco [Apache Spark][4] que se executa sobre [Hadoop][2]. A versión actual de SparkBWA (v0.2, outubro de 2016) é compatible cos seguintes algoritmos de BWA:
- BWA-MEM
- BWA-backtrack
- BWA-SW
Todos funcionan con lecturas individuais e lecturas de extremos pareados.
José M. Abuin, Juan C. Pichel, Tomás F. Pena and Jorge Amigo. ["SparkBWA: Speeding Up the Alignment of High-Throughput DNA Sequencing Data"][5]. PLoS ONE 11(5), pp. 1-21, 2016.
Hai unha versión para Hadoop dispoñible aquí.
Estrutura
A partir da versión 0.2, o proxecto segue unha estrutura Maven estándar. O código fonte está no cartafol src/main. Nel podemos atopar dous subcartafoles:
- java - Aquí se almacena o código Java.
- native - Aquí se almacena o código nativo de BWA (C) e a lóxica de conexión para JNI.
Configuración de Spark
A partir da versión 0.2 non é necesario configurar ningún parámetro de Spark. O único requisito é que os contedores YARN dispoñan de polo menos 10 GB de memoria (no caso do xenoma humano).
Execución de SparkBWA
SparkBWA require un clúster Hadoop operativo. Os usuarios deben ter en conta que se necesitan polo menos 10 GB de memoria por contedor de mapa/YARN (cada mapa carga na memoria o índice de bwa - xenoma de referencia). Ademais, hai que ter en conta que SparkBWA utiliza espazo en disco no cartafol /tmp ou no cartafol temporal configurado para Hadoop ou Spark.
Este é un exemplo de como executar SparkBWA co algoritmo BWA-MEM e lecturas de extremos pareados. O exemplo supón que o índice está almacenado en todos os nodos do clúster en /Data/HumanBase/ . O índice pódese obter con BWA mediante «bwa index».
En primeiro lugar, obtemos as lecturas FASTQ de entrada desde o ftp de [1000 Genomes Project][3]:
wget ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase3/data/NA12750/sequence_read/ERR000589_1.filt.fastq.gz wget ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase3/data/NA12750/sequence_read/ERR000589_2.filt.fastq.gz
A continuación, hai que descomprimir os ficheiros descargados:
gzip -d ERR000589_1.filt.fastq.gz gzip -d ERR000589_2.filt.fastq.gz
e cargalos en HDFS:
hdfs dfs -copyFromLocal ERR000589_1.filt.fastq ERR000589_1.filt.fastq hdfs dfs -copyFromLocal ERR000589_2.filt.fastq ERR000589_2.filt.fastq
Por último, podemos executar SparkBWA no clúster. De novo, supoñemos que Spark está almacenado en spark_dir:
spark_dir/bin/spark-submit --class com.github.sparkbwa.SparkBWA --master yarn-cluster --driver-memory 1500m --executor-memory 10g --executor-cores 1 --verbose --num-executors 32 SparkBWA-0.2.jar -m -r -p --index /Data/HumanBase/hg38 -n 32 -w "-R @RG\tID:foo\tLB:bar\tPL:illumina\tPU:illumina\tSM:ERR000589" ERR000589_1.filt.fastq ERR000589_2.filt.fastq Output_ERR000589
Opcións utilizadas:
- -m - Algoritmo de aliñamento de secuencias.
- -p - Usar lecturas de extremos pareados.
- -w "args" - Pódese utilizar para pasar argumentos directamente a BWA (p. ex. «-t 4» para
especificar o número de fíos que se utilizarán por instancia de BWA).
- --index index_prefix - Especifícase o prefixo do índice. O índice debe estar dispoñible na mesma localización en todos os nodos do clúster.
- Os tres últimos argumentos son os ficheiros HDFS de entrada e saída.
Despois da execución, para mover a saída ao sistema de ficheiros local, utiliza:
hdfs dfs -copyToLocal Output_ERR000589/* ./
Se non se utiliza un redutor, a saída dividirase en varias partes (ficheiros). Se queremos xuntalas, podemos utilizar «samtools merge».
Para consultar todas as opcións dispoñibles, executa o comando:
spark_dir/bin/spark-submit --class com.github.sparkbwa.SparkBWA SparkBWA-0.2.jar -h
O resultado é:
SparkBWA realiza o aliñamento xenómico utilizando bwa nun clúster Hadoop/YARN uso: spark-submit --class com.github.sparkbwa.SparkBWA SparkBWA-0.2.jar [-a | -b | -m] [-f | -k] [-h] [-i <Prefixo do índice>] [-n <Número de particións>] [-p | -s] [-r] [-w <"Argumentos de BWA">] <Ficheiro FASTQ 1> [Ficheiro FASTQ 2] <Ficheiro SAM de saída> Opcións de axuda: -h, --help Mostra esta axuda
Opcións de lecturas FASTQ de entrada: -p, --paired Utilizaranse lecturas pareadas como lecturas FASTQ de entrada -s, --single Utilizaranse lecturas individuais como lecturas FASTQ de entrada
Opcións de ordenación: -f, --hdfs Utilízase HDFS para ordenar as lecturas FASTQ de entrada -k, --spark utilízase o motor Spark para ordenar as lecturas FASTQ de entrada
Opcións de algoritmo de BWA: -a, --aln Utilizarase o algoritmo ALN -b, --bwasw Utilizarase o algoritmo bwasw -m, --mem Utilizarase o algoritmo MEM
Opcións do índice: -i, --index <Prefixo do índice> Prefixo do índice creado por bwa que se vai utilizar - setIndexPath(string)
Opcións de Spark: -n, --partitions <Número de particións> Número de particións nas que dividir a entrada - setPartitionNumber(int)
Opcións do redutor: -r, --reducer O programa combinará todos os resultados finais nunha fase de redución
Opcións dos argumentos de BWA: -w, --bwa <"Argumentos de BWA"> Argumentos pasados directamente a BWA
Precisión
SparkBWA debería ter a mesma precisión que executar BWA normalmente. A continuación móstranse os benchmarks de aliñamento de GCAT que o demostran.
MEM
- Lecturas individuais (400 bp)
- Lecturas de extremos pareados (100 bp)
- Lecturas de extremos pareados (150 bp)
BWA-backtrack
BWA-SW
Preguntas frecuentes (FAQ)
- Non podo compilar a ferramenta porque falta jni_md.h ou jni.h.