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);"这句了吗,你可以到数据库看下这个字段的值:
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发现可以提交上去了。问题就这样解决了
Nutch2.2.1 问题一:索引不能提交的更多相关文章
- Git历险记(四)——索引与提交的幕后故事
我想如果看过<Git历险记>的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了:知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(c ...
- SiteMap 提交,并使用正确的方式提交给搜索引擎
原创Sitemap收录介绍 对于网站中原创内容的网页url,站长可以将其制作成标准的Sitemap(站点地图)文件. 站长提交Sitemap文件后,好搜会使用Sitemap中的内容来了解网站结构等信息 ...
- Lucene学习总结之三:Lucene的索引文件格式(1)
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- git学习四:eclipse使用git提交项目
支持原创:http://blog.csdn.net/u014079773/article/details/51595127 准备工作: 目的:eclipse使用git提交本地项目,提交至远程githu ...
- Elasticsearch-深入理解索引原理
最近开始大面积使用ES,很多地方都是知其然不知其所以然,特地翻看了很多资料和大牛的文档,简单汇总一篇.内容多为摘抄,说是深入其实也是一点浅尝辄止的理解.希望大家领会精神. 首先学习要从官方开始地址如下 ...
- 深入Lucene索引机制
Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...
- Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...
- Solr增删改查索引
一.添加索引,提交文档 1.如图,我的xml文档有predicate.object字段,这些在Solr配置文档里没有,所以xml文档提交不了 2.在F:\solr-4.10.0\example\sol ...
- eclipse使用git提交项目
eclipse使用git提交项目有2种方式:一种是git命令窗口,另一种是eclipse自带git插件(跟svn插件一样使用) 一.使用git命令窗口提交项目 1.首先官网下载git并安装,然后配置用 ...
随机推荐
- leetcode535
public class Codec { const string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW ...
- leetcode445
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNo ...
- 关于BigDecimal类型在jsp页面中进行除法运算问题
出自:http://blog.csdn.net/u011910290/article/details/52935337 问题描述: 在项目编写过程中,发现BigDecimal在jsp中进行除法运算时, ...
- 详解Vue2.0生命周期
网上已经有很多关于vue生命周期的文章,我的这篇文章的由来,其实是我对官网上描述的一句话的思考与理解:“el被新创建的vm.$el替换”,所以文章更多的内容可能是在对vue生命周期中“created ...
- (halcon) derivate_vector_field
derivate_vector_field: Convolve a vector field with derivatives of the Gaussian 用高斯导数卷积向量场 derivate_ ...
- MyBatis 学习记录4 MyBatis的一级缓存
主题 分享记录一下MyBatis的一级缓存相关的学习. Demo public static void firstLevelCache() { init("mybatis-config.xm ...
- 如何有效地学习《空中英语教室》&《彭蒙惠英语》
读者定位: <大家说英语>是学习美式口语入门书,内容全部是情境会话,定位为“初级美式生活会话”. <空中英语教室>以浅显英语提供从新闻.旅游到时尚等流行话题,丰富会话材料,定位 ...
- ubuntu 18.04 - server版 开机启动脚本
ubuntu 18.04 不再使用 inited 管理系统,改用 systemd systemd 默认读取 /etc/systemd/system 下的文件,该目录下的文件会链接/lib/system ...
- SPI子系统分析之二:数据结构
内核版本:3.9.5 spi_master struct spi_master用来描述一个SPI主控制器,我们一般不需要自己编写spi控制器驱动. /*结构体master代表一个SPI接口,或者叫一个 ...
- Alpha混合
ShaderLab syntax: Blending 混合 Blending is used to make transparent objects. 混合是用来制作透明物体的. When graph ...