2017-02-21 90 views
0

我想将tika解析器包含到我的拓扑中。我已经在配置中将jsoup.treat.non.html.as.error设置为false,并且我已经按照storm crawler文档中的描述设置了tika拓扑。是使用Tika进行递归爬行的Storm Crawler配置

爬网拓扑结构的设置如下:

builder.setSpout("spout", new MemorySpout(testURLs)); 

builder.setBolt("partitioner", new URLPartitionerBolt()).shuffleGrouping("spout"); 

builder.setBolt("fetch", new FetcherBolt()).fieldsGrouping("partitioner", new Fields("key")); 

builder.setBolt("sitemap", new SiteMapParserBolt()).localOrShuffleGrouping("fetch"); 

builder.setBolt("jsoup", new JSoupParserBolt()).localOrShuffleGrouping("sitemap"); 

builder.setBolt("shunt", new RedirectionBolt()).localOrShuffleGrouping("jsoup"); 

builder.setBolt("tika", new ParserBolt()).localOrShuffleGrouping("shunt", "tika"); 

builder.setBolt("indexer", new HBaseIndexerBolt(), numWorkers).localOrShuffleGrouping("shunt") 
        .localOrShuffleGrouping("tika"); 

builder.setBolt("status", new MemoryStatusUpdater()).localOrShuffleGrouping(Constants.StatusStreamName) 
        .localOrShuffleGrouping("sitemap", Constants.StatusStreamName) 
        .localOrShuffleGrouping("shunt", Constants.StatusStreamName) 
        .localOrShuffleGrouping("tika", Constants.StatusStreamName) 
        .localOrShuffleGrouping("indexer", Constants.StatusStreamName); 

return submit("crawl", conf, builder); 

采用这种拓扑结构,我收到无效的拓扑例外。问题似乎是由状态螺栓引起的。因为,当我排除状态螺栓时,我的爬网拓扑没有任何问题。我应该如何配置状态螺栓?

回答

1

第一个连接缺少'fetch',你应该连接'jsoup'而不是'shunt',后者不会发送到状态流的outlinks:它只是发送JSoup无法处理的元组到特定的Tika流使用。有些背景请参阅StatusStream wiki

下面的定义应该工作。

builder.setBolt("status", new MemoryStatusUpdater()). 
    .localOrShuffleGrouping("fetch", Constants.StatusStreamName) 
    .localOrShuffleGrouping("sitemap", Constants.StatusStreamName) 
    .localOrShuffleGrouping("jsoup", Constants.StatusStreamName) 
    .localOrShuffleGrouping("tika", Constants.StatusStreamName) 
    .localOrShuffleGrouping("indexer", Constants.StatusStreamName); 

这假定您的HBaseIndexer扩展AbstractIndexerBolt并将元组发送到状态流。

请注意,MemoryStatusUpdater主要用于测试和调试:如果您有多个工作人员,则不一定会工作,并且如果工作进程重新启动时拓扑结构将丢失数据。

+0

非常感谢。有用。 – isspek