Nutch2.1通过gora对存储层进行了扩展,可以选择使用HBase、Accumulo、Cassandra 、MySQL 、DataFileAvroStore、AvroStore中任何一种来存储数据,但其中一些并不成熟。在我的反复测试中发现,整体来说,Nutch2.1比起Nutch1.6的性能要差得多,最重要的是不能长期稳定运行。Nutch1.6使用Hadoop Distributed File System (HDFS)来作为存储,稳定可靠。下面分别说说每一种存储方式的情况:
HBase(column stores),支持输入分割,以Region为最小分割单位。随着数据规模的增大,并行处理的优势就体现出来了,所以适合大数据应用。不过对HBase集群的维护是一大问题,比HDFS复杂得多,内存消耗也很恐怖。
Accumulo(key/value store )抓取3轮之后就异常退出,提示UnsupportedOperationException。
Cassandra(column stores),需要注意的是/etc/hosts中localhost不能映射到127.0.0.1。Cassandra最大的问题在于不支持输入分割,就算数据规模再大也只有一个map,完全失去了并行性。
MySQL (RDBMS),只有一台服务器作为数据源,那么随着数据规模的增大,MySQL 要怎么面对呢?所以MySQL对于小规模的简单的垂直搜索之类的应用比较合适。
DataFileAvroStore(data serialization system ),Injection job throws NullPointerException,见
https://issues.apache.org/jira/browse/NUTCH-1477 。
AvroStore(data serialization system ),和DataFileAvroStore同样的问题。
从上面的分析来看,目前gora还亟待改进。对于追求性能极致的朋友来说,nutch2.1还不稳定,建议使用nutch1.6,利用HDFS和MapReduce的数据本地化及天然的并行性,可以优化到非常快的速度。