Frage:
Führen Sie Hunderte kleiner BAM-Dateien zu einer einzigen BAM-Datei zusammen
Scott Gigante
2017-05-19 10:50:24 UTC
view on stackexchange narkive permalink

Ich arbeite mit über einer Million (langen) Lesevorgängen und richte sie auf ein großes Genom aus. Ich denke darüber nach, meine Ausrichtungsjobs parallel auszuführen und horizontal auf Hunderte von Knoten zu verteilen, anstatt zu versuchen, einen einzelnen Job mit Dutzenden von Kernen auszuführen.

Ich möchte die sortierten BAM-Dateien für eine weitere nachgelagerte Analyse zusammenführen . Was ist der effizienteste Weg, um einen gültigen Datei-Header beizubehalten und die Tatsache zu nutzen, dass die Eingabe-BAM-Dateien bereits sortiert sind?

Zwei antworten:
#1
+13
Devon Ryan
2017-05-19 12:06:36 UTC
view on stackexchange narkive permalink

samtools merge fusioned.bam * .bam ist effizient genug, da die Eingabedateien sortiert sind. Mit Sambamba und / oder Biobambam können Sie etwas schneller werden, aber sie sind normalerweise noch nicht installiert und E / A wird ohnehin schnell zu einem Engpass.

Irgendeine Idee, wie dies im Vergleich zu bamtools merge ist?
Samtools sind in der Regel etwas langsamer als andere Tools, da es sich um die Referenzimplementierung handelt. Daher würde ich erwarten, dass bamtools etwas schneller ist.
Bamtools ist normalerweise langsamer, da es nicht optimiert und jetzt nicht mehr gewartet wird. Sambamba usw. wurden mit dem spezifischen Ziel entwickelt, schneller zu sein.
#2
+8
John Marshall
2017-05-19 12:18:49 UTC
view on stackexchange narkive permalink

Das Zusammenführen sortierter Dateien ist eine lineare Operation, sodass alle gut implementierten Tools, die dies tun, dies mit ungefähr derselben Effizienz tun. samtools merge (verwenden Sie die aktuellste Version, da die Handhabung von Merge-Headern in den Versionen 1.3.x und 1.4.x verbessert wurde), picard MergeSamFiles usw.

Diese Tools müssen alle BAM-Eingabedateien gleichzeitig geöffnet halten. Je nachdem, wie viele hundert Eingabedateien Sie haben, können Sie daher auf das Systemlimit für offene Dateideskriptoren stoßen. Verwenden Sie ulimit , um dies zuerst zu maximieren. Wenn immer noch zu viele vorhanden sind, müssen Sie möglicherweise die ersten 500 Dateien zusammenführen und dann die nächsten 500 in diese zusammenführen usw. Samtools führt dies nicht intern aus. Ich bin mir nicht sicher, ob eine der anderen Merge-Implementierungen dies tut.

Vielleicht könnte das schrittweise Zusammenführen, wie Sie in Ihrem zweiten Absatz erwähnt haben, die Dinge beschleunigen, und man trifft nicht auf E / A-Einschränkungen?
Nein, einige der Daten werden jetzt mehr als einmal geschrieben und gelesen, daher müssen sie langsamer sein. Durch den geschickten Einsatz von Pipes und die Substitution von Prozessen (`samtools merge… <(samtools merge…)…`) kann dies minimiert werden und ein Auftreffen auf die Festplatte vermieden werden, sodass die Verlangsamung trivial sein kann (auf Kosten der Verwendung einiger weiterer Kerne).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...