Blast Error: mdb_env_open: Function not implemented 错误

最近在使用RepeatMasker时产生这个错误:

Building general libraries in: ~/soft/RepeatMasker/Libraries/CONS-Dfam_withRBRM_3.7/general
RepeatMasker::createLib(): Error invoking ~/soft/rmblast-2.14.0/bin/makeblastdb on file ~/soft/RepeatMasker/Libraries/CONS-Dfam_withRBRM_3.7/general.working/is.lib.

查看makeblastdb.log文件时,发现是BLAST Database creation error: mdb_env_open: Function not implemented,当我单独使用rmblast中的makeblastdb和ncbi-blast+中的makeblastdb时都会发生上述错误,我的blast++版本是2.10.0,但使用blast++ 2.7版本就不会出现上述问题,可能是系统C++版本和blast++编译的C++版本不一致导致的,解决的方法有两种,一种是直接使用低版本的blast++如2.7版本,也可以使用blast++的源代码进行编译安装,可以参考RMBlast 官网的方法,不过时间有点长。

  1. Download NCBI Blast+ and rmblast patch file:
    ncbi-blast-2.14.1+-src.tar.gz
    isb-2.14.1+-rmblast.patch.gz
  2. Install Dependencies:
    You will need a C++ compiler and essential build tools such as make and autotools.
    • Debian and derivatives (Ubuntu, Mint, etc.): apt install build-essential
    • Fedora: yum groupinstall “Development Tools”
    Other missing dependencies might be detected by the configure step later, depending on your operating system.
  3. Unpack Distribution:
    Unpack the distribution in your home directory or in a temporary location ( i.e. /tmp ).
    • cd /mytmp/location/
    • tar zxvf ncbi-blast-2.14.1+-src.tar.gz
    • gunzip isb-2.14.1+-rmblast.patch.gz
  4. Patch:
    • cd ncbi-blast-2.14.1+-src
    • patch -p1 < ../isb-2.14.1+-rmblast.patch
  5. Build:
    To compile the programs for installation in /usr/local/rmblast run:
    • cd ncbi-blast-2.14.1+-src/c++
    • ./configure –with-mt –without-debug –without-krb5 –without-openssl –with-projects=scripts/projects/rmblastn/project.lst –prefix=/usr/local/rmblast
    • make
      • make -j can be used to parallelize the build on multiprocessor systems, e.g. make -j2 to dedicate two cores to the build process.
    • make install
  6. Configure RepeatMasker/RepeatModeler:
    To use the new search engine with RepeatMasker or RepeatModeler, run/re-run the configure program in the RepeatMasker directory and the configure program in the RepeatModeler directory.

Blast+本地化及使用方法

原来一直用blast的,但NCBI已停止了对blast的更新,而强力推荐使用blast+,这次因为要做blast的数据量比较大,所以试了一下blast+,同时也用blast做了一下,发现blast+果然要快得多,看来习惯要改变了。其实blast+和blast的原理差不多,只不过程序参数和名称有了点变化而已,现简要介绍一下其本地化的方法:
1、下载最新版的程序,根据自己的系统选择合适的版本。
2、解压后进入程序目录……ncbi-blast-2.2.31+/bin,各个程序的功能说明可以参考我的另外一篇博客
3、各程序的参数说明可以用自带的help,例如想查blastx的参数说明可以用: ./blastx -help
4、做blast前一般要先格式化数据库,除非只是几个序列之间的比对,例如格式化一个蛋白数据库可以用下列参数:
$HOME/……/ncbi-blast-2.2.31+/bin/makeblastdb -in uniprot_sport -dbtype prot -input_type fasta -parse_seqids -hash_index
主要几个程序的使用例子:
blastp -query protein.fa -out /protein.output -db dbname -outfmt 0 -evalue 1e-3 -max_target_seqs 20
blastn -query nucl.fa -out output -db dbname -outfmt 6 -evalue 1e-5 -num_descriptions 10
blastx -query nucl.fa -out output -db dbname -outfmt 6 -evalue 1e-5 -num_descriptions 10
参数说明:
-query: 输入文件路径及文件名
-out:输出文件路径及文件名
-db:格式化了的数据库路径及数据库名
-outfmt:输出文件格式,2.2.31版共有14种格式,6是tabular格式对应BLAST的m8格式
-evalue:设置输出结果的e-value值
-max_target_seqs:找到的最大的目标的数目,也可用-num_descriptions,tabular格式输出结果的条数

最新blast本地化

原来做过本地blast,但那是三年前的事了,这次来新单位后要重新自己构建blast,才发现NCBI中blast已经有了很多变化,默认连接的下载页面变成了blast+,blast+中主要程序描述如下:

Program Function
blastdbcheck 检查数据库完整性
blastcmd 从blast数据库中检索序列或其它信息
blast_aliastool 创建数据库别名
blastn 核酸序列与核酸数据库比较
blastp 蛋白质序列与蛋白质数据库比较
blastx 核酸序列与蛋白持数据库比较
blast_formatter 使用指定的ID格式化网络blast结果
convert2blastmask 转换小写的masking成makeblastdb可读格式
dustmasker 过滤掉低重复序列
lagacy_blast.pl 转换一个legacy blast search程序为blast+配对并执行
makeblastdb 格式化一个FASTA文件为一个blast数据库
makembindex 为一个存在的核酸数据库建立一个megablast索引
psiblast 查找蛋白质家族,计算提供的蛋白质的遗传距离或者建立位置特异性矩阵
rpsblast 从一个蛋白质保守区域数据库中检索蛋白序列的功能区域
rpsblast 将核酸序列以六种阅读框的形式转换成蛋白序列后从蛋白保守区域数据库中检索蛋白功能区域
segmasker 过滤掉低重复序列并转换成蛋白序列
tblastn 在核酸数据库中检索蛋白序列
tblastx

核酸与核酸数据库在蛋白质水平比较

update_blastdb.pl 在NCBI中下载blast数据库

这个blast+程序虽然功能强大了,但一下子还用不习惯,而且平时用得最多的比较两个序列的程序也没有,于是想找原来的blast,阅读了大量的说明,花了我半天的时间终于找到了,地址为:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/release/LATEST ,下载与系统匹配的就可以了,一般如果是windows XP 系统就下载win32的,windows 7或windows 8 64位的就下载win64,而我的系统为ubuntu 64位系统就下载了blast-2.2.26-x64-linux.tar.gz,解压后在解压文件的/bin/文件夹就可以看到熟悉的blastall,formatdb,bl2seq等程序了,具体功能描述如下(原始说明):

Program Function
bl2seq Directly comparing two FASTA sequences
blastall legacy blast containing the subfunction of blastn, blastp, blastx, tblastn, and tblastx
blastclust Clusters input FASTA sequences into related groups
blastpgp Standalone PSI-BLAST for search of distantly related protein sequences and generate position-specific matrices
copymat Copies blastpgp output for input to makemat
fastacmd Retrieves specific sequence or dumps the sequences from a formatted blast database
formatdb Convert FASTA formatted seqeucne file into BLAST database
formatrpsdb Format scoremat files into an RPSBLAST database
impala protein profile search program, mostly replaced by rpsblast
makemat Convert the copymat files into scoremat format, no loger needed by new blastpgp output
megablast Faster batch blastn program that uses greedy-algorithm. Works in contiguous or more sensitive discontiguous mode
rpsblast reverse PSI-BLAST program for searching against conserved domain database
seedtop Pattern search program

关于程序调用方法网上有很多资料,就不多在这里重复,这里只举个简单的例子,如调用bl2seq,“./bl2seq -i seq1.fa -j seq2.fa”。