收藏  |   举报 2017-05-21 15:49   回答:1

和Scrapy等相比较,StormCrawler有什么特点?

已关闭 悬赏分:0


举报 2017-05-21 15:51
StormCrawler是基于我开发Apache Nutch的经验开发的,很大程度上要归功于它,主要是一些概念(比如FetcherBolt、URL和解析过滤器的设计)和早期实现。StormCrawler实现了Nutch的功能,并且像Nutch 2.x版一样,可以使用不同的后端数据库(HBase、Cassandra等等)。

StormCrawler和Nutch之间的主要区别是,后者基于(并且催生了)Apache Hadoop项目,而且是批量驱动的。URL提取、内容解析和生成索引都是作为单独的步骤完成的。这会导致当提取URL的时候,CPU和磁盘的使用率相对较低,而网络流量高。而当解析或生成索引时则反之,CPU和磁盘的使用率高,网络流量低。

与它相反,StormCrawler基于流处理框架Apache Storm实现的,并且所有的操作都可以在同一时间进行:URL提取、解析和生成索引都不断地并行进行。这就使整个爬取过程更加高效,而且没有长尾的工作量,而这是面向批处理方法的常见问题。与Nutch不同,处理内容不一定要保存在磁盘上(但如果必要的话也可以保存在磁盘上)。也可以用StormCrawler更容易地实现更丰富的用例,比如需要低延迟的时候,或者当URL成为流不断到达的时候(比如用户生成的事件,像访问页面等)。

把两者之间进行对比,我们可以发现StormCrawler运行在一个分布式的、可扩展的环境中,而Scrapy是单进程的,即使有像Frontera那样的项目去做分布式爬虫,。
StormCrawler代表了Apache Storm的分布式和可靠性(再加上其他的功能,比如用户界面、指标框架和日志等)。

Scrapy和StormCrawler都在力图实现用户友好性和为数据抓取提供好的解决方案。
总之我认为,StormCrawler是Nutch的可扩展性和Scrapy的用户友好性的结合体。