BigBWA

Achegamento do aliñador Burrows-Wheeler ás tecnoloxías de Big Data

De que trata BigBWA?

BigBWA é unha ferramenta para executar o Burrows-Wheeler Aligner--BWA nun clúster de Hadoop. A versión actual de BigBWA (2.1, novembro de 2016) admite os seguintes algoritmos de BWA:

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

Todos eles funcionan con lecturas paired-end e single-end.

José M. Abuin, Juan C. Pichel, Tomás F. Pena and Jorge Amigo. "BigBWA: achegando o aliñador Burrows–Wheeler ás tecnoloxías de Big Data". Bioinformatics 31(24), pp. 4003-4005, 2015.

Hai unha versión para Apache Spark dispoñible aquí.

Estrutura

Desde a versión 2.0, o proxecto mantén unha estrutura Maven estándar. O código fonte está no cartafol src/main. Dentro del, 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

Desde a versión 2.0 non é necesario configurar ningún parámetro de Hadoop. O único requisito é que os contedores YARN teñan polo menos 7500MB de memoria dispoñible (no caso do xenoma humano).

Execución de BigBWA

BigBWA require un clúster de Hadoop operativo. Os usuarios deben ter en conta que se necesitan polo menos 7500MB de memoria libre por mapa (cada mapa carga o índice de bwa na memoria). Cómpre ter en conta que BigBWA utiliza espazo en disco no cartafol tmp de Hadoop.

Aquí hai un exemplo de como executar BigBWA co algoritmo paired de BWA-MEM. Neste exemplo, dáse por feito que o noso índice está almacenado en todos os nodos do clúster en /Data/HumanBase/ . O índice pódese obter con BWA mediante «bwa index».

Primeiro, obtemos as lecturas Fastq de entrada do ftp do Proxecto 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, hai que descomprimir os ficheiros descargados:

gzip -d ERR000589_1.filt.fastq.gz gzip -d ERR000589_2.filt.fastq.gz

e preparalos para usalos 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 executar BigBWA no 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

Opcións:

  • -m - Algoritmo de aliñamento de secuencias.
  • -p - Usar lecturas paired-end.
  • -w "args" - Pódese usar para pasar argumentos directamente a BWA (por exemplo, «-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 en todos os nodos do clúster na mesma localización.
  • Os dous últimos argumentos son os ficheiros HDFS de entrada e saída.

Se queres consultar todas as opcións dispoñibles, executa o comando:

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

Os comandos son:

BigBWA realiza aliñamento xenómico mediante bwa nun 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> Opcións de axuda: -h, --help Mostra esta axuda

Opcións para as lecturas FASTQ de entrada: -p, --paired Usaranse lecturas paired como lecturas FASTQ de entrada -s, --single Usaranse lecturas single como lecturas FASTQ de entrada

Opcións do algoritmo BWA: -a, --aln Usarase o algoritmo ALN -b, --bwasw Usarase o algoritmo bwasw -m, --mem Usarase o algoritmo MEM

Opcións do índice: -i, --index <Index prefix> Prefixo do índice creado por bwa que se vai usar - setIndexPath(string)

Opcións de Spark: -n, --partitions <Number of partitions> Número de particións nas que dividir a entrada - setPartitionNumber(int)

Opcións do reducer: -r, --reducer O programa combinará todos os resultados finais nunha fase reducer

Opcións dos argumentos de BWA: -w, --bwa <"BWA arguments"> Argumentos pasados directamente a BWA

Despois da execución, para mover a saída ao sistema de ficheiros local, usa:

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

Se non hai reducer, a saída dividirase en varias partes. Para xuntalas, os usuarios poden utilizar unha das nosas ferramentas de Python ou «samtools merge»:

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

##Preguntas frecuentes (FAQs)

  1. Non podo compilar a ferramenta porque falta jni_md.h ou jni.h.

####<a name="building1"></a>1. Non podo compilar a ferramenta porque falta jni_md.h ou jni.h. Debes configurar correctamente a variable de contorno JAVA_HOME ou podes definila en Makefile.common.