Kraken2
In this section:
Description
Kraken2 is a taxonomic classification system for DNA sequences, using k-mers and a database to assign reads to taxa. It is widely used in metagenomics to identify organisms present in samples.
Available Versions
kraken2/2.1.3 (default)
Serial Job Submission
submit_kraken2.sh
#!/bin/bash
#SBATCH -J kraken2
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=32G
export INPUT="reads.fastq"
export OUTPUT="kraken_output.txt kraken_report.txt"
module load kraken2/2.1.3
job-nanny kraken2 --db /path/to/kraken2_database \
--threads 1 \
--output kraken_output.txt \
--report kraken_report.txt \
reads.fastq
OpenMP Job Submission
submit_kraken2_omp.sh
#!/bin/bash
#SBATCH -J kraken2_omp
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 06:00:00
#SBATCH --mem=64G
export INPUT="reads.fastq"
export OUTPUT="kraken_output.txt kraken_report.txt"
module load kraken2/2.1.3
job-nanny kraken2 --db /path/to/kraken2_database \
--threads $SLURM_CPUS_PER_TASK \
--output kraken_output.txt \
--report kraken_report.txt \
reads.fastq
Paired-end Classification
submit_kraken2_paired.sh
#!/bin/bash
#SBATCH -J kraken2_paired
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=64G
export INPUT="reads_1.fastq reads_2.fastq"
export OUTPUT="kraken_output.txt kraken_report.txt"
module load kraken2/2.1.3
job-nanny kraken2 --db /path/to/kraken2_database \
--threads $SLURM_CPUS_PER_TASK \
--paired \
--output kraken_output.txt \
--report kraken_report.txt \
reads_1.fastq reads_2.fastq
Database Building
submit_kraken2_build.sh
#!/bin/bash
#SBATCH -J kraken2_build
#SBATCH -N 1
#SBATCH -c 28
#SBATCH -t 72:00:00
#SBATCH --mem=256G
export INPUT="library/"
export OUTPUT="custom_db/"
module load kraken2/2.1.3
job-nanny kraken2-build --download-taxonomy --db custom_db
job-nanny kraken2-build --download-library bacteria --db custom_db
job-nanny kraken2-build --download-library viral --db custom_db
job-nanny kraken2-build --build --db custom_db --threads $SLURM_CPUS_PER_TASK
Pre-built Databases
# Available databases (usually in /opt/gridunesp/databases/kraken2/)
ls /opt/gridunesp/databases/kraken2/
# Database examples:
# - standard: bacteria, archaea, viruses, human
# - minikraken2: reduced version for testing
# - pluspf: bacteria, archaea, viruses, plasmids, fungi
Job Array for Multiple Samples
submit_kraken2_array.sh
#!/bin/bash
#SBATCH -J kraken2_array
#SBATCH --array=1-20
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=64G
SAMPLES=(
"sample_01" "sample_02" "sample_03" "sample_04" "sample_05"
"sample_06" "sample_07" "sample_08" "sample_09" "sample_10"
"sample_11" "sample_12" "sample_13" "sample_14" "sample_15"
"sample_16" "sample_17" "sample_18" "sample_19" "sample_20"
)
SAMPLE=${SAMPLES[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="${SAMPLE}_R1.fastq ${SAMPLE}_R2.fastq"
export OUTPUT="${SAMPLE}_kraken/"
module load kraken2/2.1.3
mkdir -p ${SAMPLE}_kraken
cd ${SAMPLE}_kraken
job-nanny kraken2 --db /opt/gridunesp/databases/kraken2/standard \
--threads $SLURM_CPUS_PER_TASK \
--paired \
--output ${SAMPLE}_kraken.out \
--report ${SAMPLE}_report.txt \
../${SAMPLE}_R1.fastq ../${SAMPLE}_R2.fastq
Post-processing
process_kraken_output.sh
#!/bin/bash
#SBATCH -J process_kraken
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=8G
export INPUT="kraken_output.txt"
export OUTPUT="filtered/"
module load kraken2/2.1.3
mkdir -p filtered
# Extract reads classified at species level
awk '$1 == "C" && $4 == "S" {print $2}' kraken_output.txt > classified_reads.txt
# Extract reads from a specific taxonomy (e.g., Escherichia coli - 562)
grep -w "562" kraken_output.txt > ecoli_reads.txt
# Generate detailed report with krakentools (if available)
# kreport2mpa.py -r kraken_report.txt -o mpa_report.txt
Visual Analysis with Krona
submit_krona.sh
#!/bin/bash
#SBATCH -J krona
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G
export INPUT="kraken_report.txt"
export OUTPUT="krona.html"
module load kraken2/2.1.3
# Convert to Krona format
cat kraken_report.txt | cut -f2-3 | tail -n +2 > kraken.krona
# Generate Krona plot (requires KronaTools installed)
# ktImportText kraken.krona -o krona.html
References
Documentation: https://github.com/DerrickWood/kraken2/wiki
Manual: https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown
Databases: https://benlangmead.github.io/aws-indexes/k2
See also
BLAST - Homology search
MetaPhlAn - Alternative for metagenomic profiling
Running Simulations - How to submit jobs