SparkBWA
Acelerar la alineación de datos de secuenciación de ADN de alto rendimiento
¿De qué trata SparkBWA?
SparkBWA es una herramienta que integra Burrows-Wheeler Aligner--[BWA][1] en un marco [Apache Spark][4] que se ejecuta sobre [Hadoop][2]. La versión actual de SparkBWA (v0.2, octubre de 2016) es compatible con los siguientes algoritmos de BWA:
- BWA-MEM
- BWA-backtrack
- BWA-SW
Todos funcionan con lecturas individuales y 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.
Hay una versión para Hadoop disponible aquí.
Estructura
Desde la versión 0.2, el proyecto mantiene una estructura Maven estándar. El código fuente está en la carpeta src/main. Dentro de ella podemos encontrar dos subcarpetas:
- java - Aquí se almacena el código Java.
- native - Aquí se almacenan el código nativo de BWA (C) y la lógica de enlace para JNI.
Configuración de Spark
Desde la versión 0.2 no es necesario configurar ningún parámetro de Spark. El único requisito es que los contenedores YARN dispongan de al menos 10 GB de memoria (para el caso del genoma humano).
Ejecución de SparkBWA
SparkBWA requiere un clúster Hadoop operativo. Los usuarios deben tener en cuenta que se necesitan al menos 10 GB de memoria por contenedor de mapa/YARN (cada mapa carga en memoria el índice de bwa - genoma de referencia). Además, hay que tener en cuenta que SparkBWA utiliza espacio en disco en la carpeta /tmp o en la carpeta temporal configurada para Hadoop o Spark.
Este es un ejemplo de cómo ejecutar SparkBWA con el algoritmo BWA-MEM y lecturas de extremos pareados. El ejemplo supone que el índice está almacenado en todos los nodos del clúster en /Data/HumanBase/ . El índice se puede obtener con BWA mediante «bwa index».
Primero, obtenemos las lecturas FASTQ de entrada desde el 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, hay que descomprimir los archivos descargados:
gzip -d ERR000589_1.filt.fastq.gz gzip -d ERR000589_2.filt.fastq.gz
y cargarlos 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 ejecutar SparkBWA en el clúster. De nuevo, suponemos 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
Opciones utilizadas:
- -m - Algoritmo de alineamiento de secuencias.
- -p - Usar lecturas de extremos pareados.
- -w "args" - Se puede utilizar para pasar argumentos directamente a BWA (p. ej., «-t 4» para
especificar el número de hilos que se utilizarán por instancia de BWA).
- --index index_prefix - Se especifica el prefijo del índice. El índice debe estar disponible en la misma ubicación en todos los nodos del clúster.
- Los tres últimos argumentos son los archivos HDFS de entrada y salida.
Después de la ejecución, para mover la salida al sistema de archivos local, utiliza:
hdfs dfs -copyToLocal Output_ERR000589/* ./
Si no se utiliza un reductor, la salida se dividirá en varias partes (archivos). Si queremos unirlas, podemos utilizar «samtools merge».
Para consultar todas las opciones disponibles, ejecuta el comando:
spark_dir/bin/spark-submit --class com.github.sparkbwa.SparkBWA SparkBWA-0.2.jar -h
El resultado es:
SparkBWA realiza alineamiento genómico utilizando bwa en un clúster Hadoop/YARN uso: spark-submit --class com.github.sparkbwa.SparkBWA SparkBWA-0.2.jar [-a | -b | -m] [-f | -k] [-h] [-i <Prefijo del índice>] [-n <Número de particiones>] [-p | -s] [-r] [-w <"Argumentos de BWA">] <Archivo FASTQ 1> [Archivo FASTQ 2] <Archivo SAM de salida> Opciones de ayuda: -h, --help Muestra esta ayuda
Opciones de lecturas FASTQ de entrada: -p, --paired Se utilizarán lecturas pareadas como lecturas FASTQ de entrada -s, --single Se utilizarán lecturas individuales como lecturas FASTQ de entrada
Opciones de ordenación: -f, --hdfs Se utiliza HDFS para ordenar las lecturas FASTQ de entrada -k, --spark se utiliza el motor Spark para ordenar las lecturas FASTQ de entrada
Opciones de algoritmo de BWA: -a, --aln Se utilizará el algoritmo ALN -b, --bwasw Se utilizará el algoritmo bwasw -m, --mem Se utilizará el algoritmo MEM
Opciones del índice: -i, --index <Prefijo del índice> Prefijo del índice creado por bwa que se va a utilizar - setIndexPath(string)
Opciones de Spark: -n, --partitions <Número de particiones> Número de particiones en las que dividir la entrada - setPartitionNumber(int)
Opciones del reductor: -r, --reducer El programa combinará todos los resultados finales en una fase de reducción
Opciones de los argumentos de BWA: -w, --bwa <"Argumentos de BWA"> Argumentos pasados directamente a BWA
Precisión
SparkBWA debería ser tan preciso como ejecutar BWA normalmente. A continuación se muestran los benchmarks de alineamiento de GCAT que lo demuestran.
MEM
- Lecturas individuales (400 bp)
- Lecturas de extremos pareados (100 bp)
- Lecturas de extremos pareados (150 bp)
BWA-backtrack
BWA-SW
Preguntas frecuentes (FAQ)
- No puedo compilar la herramienta porque falta jni_md.h o jni.h.