首页 > 代码库 > Nutch2.2.1 问题一:索引不能提交
Nutch2.2.1 问题一:索引不能提交
按照bin/nutch下的脚步一步一步的执行抓取:Inject,Generate,Fetcher,Parse,Updatedb,Solrindex,SolrDump.
每部其实都可以打出 “bin/nutch $commands”命令来进行命令的提示,
例如:"bin/nutch Inject" 注入URL,"bin/nutch Generate"生成抓取列表 。。。。。
对于一个不太熟悉nutch的人来说,似乎可以按照这个步骤一步一来走,最终将索引提交给solr。
但是,这个里面有个坑爹的事:bin/nutch updatedb ,你在执行的时候它其实没有提示你"bin/nutch updatedb -crawlId DBNAME",所以运行后,如果你
不仔细看输出的日志,就以为update成功 了。呵呵,恭喜你进入坑里面了。。。在后面提交索引的时候怎么都提交不上去,让人头疼。。
通过跟踪代码可以看到在solrindex的时候在org.apache.nutch.indexer.IndexerJob下的IndexerMapper类中的方法map代码如下:
public void map(String key, WebPage page, Context context) throws IOException, InterruptedException { LOG.info("lvyf:begin indexmapper...."); ParseStatus pstatus = page.getParseStatus(); LOG.info("lvyf:parseStatus:"+String.valueOf(pstatus.getMinorCode())); LOG.info("lvyf结果 :"+(pstatus == null || !ParseStatusUtils.isSuccess(pstatus) || pstatus.getMinorCode() == ParseStatusCodes.SUCCESS_REDIRECT)); if (pstatus == null || !ParseStatusUtils.isSuccess(pstatus) || pstatus.getMinorCode() == ParseStatusCodes.SUCCESS_REDIRECT) { return; // filter urls not parsed } Utf8 mark = Mark.UPDATEDB_MARK.checkMark(page); LOG.info("lvyf:mark结果:"+mark); if (!batchId.equals(REINDEX)) { LOG.info("lvyf:不相等"); if (!NutchJob.shouldProcess(mark, batchId)) { if (LOG.isDebugEnabled()) { LOG.debug("Skipping " + TableUtil.unreverseUrl(key) + "; different batch id (" + mark + ")"); } return; } } LOG.info("lvyf:开始索引"); NutchDocument doc = indexUtil.index(key, page); if (doc == null) { LOG.info("lvyf:索引结果为null"); return; } if (mark != null) { LOG.info("lvyf:mark不为空"); Mark.INDEX_MARK.putMark(page, Mark.UPDATEDB_MARK.checkMark(page)); store.put(key, page); } LOG.info("lvyf:开始输出索引结果"); context.write(key, doc); } }
看到"Utf8 mark = Mark.UPDATEDB_MARK.checkMark(page);"这句了吗,你可以到数据库看下这个字段的值:
1 hbase(main):002:0> get ‘TCrawl_webpage‘,‘com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html‘,‘mk‘2 COLUMN CELL3 mk:__prsmrk__ timestamp=1422123943536, value=http://www.mamicode.com/1422043649-4372247864 mk:_ftcmrk_ timestamp=1422044493751, value=http://www.mamicode.com/1422043649-4372247865 mk:_gnmrk_ timestamp=1422043713328, value=http://www.mamicode.com/1422043649-4372247866 mk:_injmrk_ timestamp=1422042207187, value=http://www.mamicode.com/y7 mk:dist timestamp=1422042207187, value=http://www.mamicode.com/08 5 row(s) in 0.1160 seconds
这里面没有"updmark",所以上面的mark结果为null,接着就return出去了。通过纠正后就变成这样了:
1 hbase(main):003:0> get ‘TCrawl_webpage‘,‘com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html‘,‘mk‘2 COLUMN CELL3 mk:_injmrk_ timestamp=1422042207187, value=http://www.mamicode.com/y4 mk:_updmrk_ timestamp=1422177748005, value=http://www.mamicode.com/1422043649-4372247865 mk:dist timestamp=1422042207187, value=http://www.mamicode.com/06 3 row(s) in 0.2070 seconds
你再去solrindex发现可以提交上去了。问题就这样解决了
Nutch2.2.1 问题一:索引不能提交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。