BigBWA

Aproximación del alineador Burrows-Wheeler a las tecnologías de Big Data

¿De qué trata BigBWA?

BigBWA es una herramienta para ejecutar el Burrows-Wheeler Aligner--BWA en un clúster de Hadoop. La versión actual de BigBWA (2.1, noviembre de 2016) admite los siguientes algoritmos de BWA:

  • BWA-MEM
  • BWA-backtrack
  • BWA-SW

Todos ellos funcionan con lecturas paired-end y single-end.

José M. Abuin, Juan C. Pichel, Tomás F. Pena and Jorge Amigo. «BigBWA: acercando el alineador Burrows–Wheeler a las tecnologías de Big Data». Bioinformatics 31(24), pp. 4003-4005, 2015.

Hay una versión para Apache Spark disponible aquí.

Estructura

Desde la versión 2.0, 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 almacena el código nativo de BWA (C) y la lógica de conexión para JNI.

Configuración

Desde la versión 2.0 no es necesario configurar ningún parámetro de Hadoop. El único requisito es que los contenedores YARN tengan al menos 7500MB de memoria disponible (para el caso del genoma humano).

Ejecución de BigBWA

BigBWA requiere un clúster de Hadoop operativo. Los usuarios deben tener en cuenta que se necesitan al menos 7500MB de memoria libre por mapa (cada mapa carga el índice de bwa en la memoria). Ten en cuenta que BigBWA utiliza espacio en disco en el directorio tmp de Hadoop.

Aquí tienes un ejemplo de cómo ejecutar BigBWA con el algoritmo paired de BWA-MEM. Este ejemplo supone que nuestro índice está almacenado en todos los nodos del clúster en /Data/HumanBase/ . El índice se puede obtener con BWA, usando «bwa index».

Primero, obtenemos las lecturas Fastq de entrada del ftp del Proyecto 1000 Genomes:

wget ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/NA12750/sequence_read/ERR000589_1.filt.fastq.gz wget ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/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 prepararlos para utilizarlos con BigBWA:

python src/utils/Fq2FqBigDataPaired.py ERR000589_1.filt.fastq ERR000589_2.filt.fastq ERR000589.fqBD

hdfs dfs -copyFromLocal ERR000589.fqBDP ERR000589.fqBDP

Por último, podemos ejecutar BigBWA en el clúster de Hadoop:

yarn jar BigBWA-2.1.jar com.github.bigbwa.BigBWA -D mapreduce.input.fileinputformat.split.minsize=123641127 -D mapreduce.input.fileinputformat.split.maxsize=123641127 -D mapreduce.map.memory.mb=7500 -w "-R @RG\tID:foo\tLB:bar\tPL:illumina\tPU:illumina\tSM:ERR000589 -t 2" -m -p --index /Data/HumanBase/hg19 -r ERR000589.fqBDP ExitERR000589

Opciones:

  • -m - Algoritmo de alineamiento de secuencias.
  • -p - Usar lecturas paired-end.
  • -w "args" - Se puede usar para pasar argumentos directamente a BWA (p. ej., «-t 4» para especificar la cantidad 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 todos los nodos del clúster en la misma ubicación.
  • Los dos últimos argumentos son los archivos HDFS de entrada y salida.

Si quieres consultar todas las opciones disponibles, ejecuta el comando:

yarn jar BigBWA-2.1.jar com.github.bigbwa.BigBWA -h

Los comandos son:

BigBWA realiza alineamiento genómico usando bwa en un clúster Hadoop/YARN uso: yarn jar --class com.github.bigbwa.BigBWA BigBWA-2.1.jar [-a | -b | -m] [-h] [-i <Index prefix>] [-n <Number of partitions>] [-p | -s] [-r] [-w <"BWA arguments">] <FASTQ file> <SAM file output> Opciones de ayuda: -h, --help Muestra esta ayuda

Opciones de lecturas FASTQ de entrada: -p, --paired Se usarán lecturas paired como lecturas FASTQ de entrada -s, --single Se usarán lecturas single como lecturas FASTQ de entrada

Opciones del algoritmo BWA: -a, --aln Se usará el algoritmo ALN -b, --bwasw Se usará el algoritmo bwasw -m, --mem Se usará el algoritmo MEM

Opciones del índice: -i, --index <Index prefix> Prefijo del índice creado por bwa que se va a usar - setIndexPath(string)

Opciones de Spark: -n, --partitions <Number of partitions> Número de particiones en las que dividir la entrada - setPartitionNumber(int)

Opciones del reducer: -r, --reducer El programa combinará todos los resultados finales en una fase reducer

Opciones de los argumentos de BWA: -w, --bwa <"BWA arguments"> Argumentos pasados directamente a BWA

Después de la ejecución, para mover la salida al sistema de archivos local, usa:

hdfs dfs -copyToLocal ExitERR000589/part-r-00000 ./

Si no hay reducer, la salida se dividirá en varias partes. Para unirlas, los usuarios pueden usar una de nuestras utilidades de Python o «samtools merge»:

hdfs dfs -copyToLocal ExitERR000589/Output* ./ python src/utils/FullSam.py ./ ./OutputFile.sam

##Preguntas frecuentes (FAQs)

  1. No puedo compilar la herramienta porque falta jni_md.h o jni.h.

####<a name="building1"></a>1. No puedo compilar la herramienta porque falta jni_md.h o jni.h. Debes configurar correctamente la variable de entorno JAVA_HOME o puedes definirla en Makefile.common.