按照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);"这句了吗,你可以到数据库看下这个字段的值:

 hbase(main)::> get 'TCrawl_webpage','com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html','mk'
COLUMN CELL
mk:__prsmrk__ timestamp=, value=-
mk:_ftcmrk_ timestamp=, value=-
mk:_gnmrk_ timestamp=, value=-
mk:_injmrk_ timestamp=, value=y
mk:dist timestamp=, value=
row(s) in 0.1160 seconds

这里面没有"updmark",所以上面的mark结果为null,接着就return出去了。通过纠正后就变成这样了:

 hbase(main)::> get 'TCrawl_webpage','com.163.sports:http/15/0117/09/AG5D88EU00052UUC.html','mk'
COLUMN CELL
mk:_injmrk_ timestamp=, value=y
mk:_updmrk_ timestamp=, value=-
mk:dist timestamp=, value=
row(s) in 0.2070 seconds

你再去solrindex发现可以提交上去了。问题就这样解决了

最新文章

  1. ElasticSearch 5学习(3)——单台服务器部署多个节点
  2. SQL Server Profiler使用教程,通俗易懂才是王道
  3. 在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)
  4. 如何查看MySQL执行计划
  5. 【转】iPhone 6 屏幕揭秘
  6. Python 第十三篇之一:前端页面 js和dome
  7. 51Nod 1256 乘法逆元 扩展欧几里得
  8. 作为一个懒虫,如何优雅的使用windows
  9. Mac上webstorm与git仓库建立连接
  10. JDK1.7 HashMap 导致循环链表
  11. redis 启动停止脚本
  12. 【转】CSRF基本概念
  13. Repository模式与UnitOfWorks模式的运用
  14. MySQL的DML常用语法格式
  15. AspNetPager使用方法
  16. mySQL 教程 第5章 插入 更新与删除数据
  17. tomcat如何利用waf进行防护
  18. 【hive】关于浮点数比较的问题
  19. 《剑指Offer》题五十一~题六十
  20. 【解题报告】[动态规划]RQNOJ - PID82 / 又上锁妖塔

热门文章

  1. C# Graphics中有关绘图质量的几个Mode
  2. python十个博客
  3. hibernate多个主键
  4. Promethus安装指南
  5. 前端中this的用法
  6. malloc realloc calloc free
  7. Python_10-异常处理
  8. Halcon中一些突然想不起来但确实有用的算子
  9. java工具jar包—Lombok
  10. [C++] const and char*