由于项目需要把nutch运行在hadoop2.2.0上,但是官方网站上给出的版本为hadoop1.2.0,于是需要做版本兼容,
我们选取的nutch版本为2.2.1,以为最大的版本是最新的,后来发现无知了,这也是后来痛苦经历的根源。
先说结论,nutch1.8直接可以运行在hadoop2.2.0上,不用为版本兼容做任何修改。
但是不知道这一结论之前我为了兼容nutch 2.2.1和hadoop2.2.0及hbase0.96做了如下工作:
1、修改gora-core,将里面依赖hbase和hadoop的内容都改为高版本的,修正编译错误重新编译
2、修改gora-hbase,重复跟gora-core一样的动作
3、修改nutch的build.xml文件,将所有依赖的低版本也改为高版本,然后在maven库中将gora-core和gora-hbase也替换为我们重新编译过的。
4、修改gora-core和gora-hbase的ivy文件,去掉对低版本hadoop包和hbase包机avro包的依赖
5、重新编译nutch,这是会欣喜的发现,inject命令可以执行了
6、但是执行generate的时候会出现一个空指针,粘一部分
java.lang.Exception: java.lang.NullPointerException: null of string in field baseUrl of org.apache.nutch.storage.WebPage
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:403)
Caused by: java.lang.NullPointerException: null of string in field baseUrl of org.apache.nutch.storage.WebPage
at org.apache.avro.generic.GenericDatumWriter.npe(GenericDatumWriter.java:97)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:91)
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:61)
at org.apache.hadoop.io.serializer.avro.AvroSerialization$AvroSerializer.serialize(AvroSerialization.java:105)
经过多方调查得到如下结论:
1)空指针是由于hadoop2.2.0时使用的GenericDatumWriter,而1.0.1时使用的是PersistentDatumWriter
2)而产生上述问题的原因是用于hadoop2.2.0时使用是AvroSerializer,而1.0.1时使用的是PersistentSerializer
3)而产生上述问题的原因是在hadoop的MapTask类中,会选取对value的序列化类(2.2.0的hadoop-mapreduce-client-core中MapTask的第985行),而序列化类是由Serialization类包装的
4)组合Serialization类的代码在2.2.0的hadoop-common的SerializationFactory构造函数中即第56行开始,而hadoop1.0中对应的代码时不一样的,比较一下
hadoop2.2.0:
public SerializationFactory(Configuration conf) {
super(conf);
for (String serializerName : conf.getStrings(
CommonConfigurationKeys.IO_SERIALIZATIONS_KEY,
new String[]{WritableSerialization.class.getName(),
AvroSpecificSerialization.class.getName(),
AvroReflectSerialization.class.getName()})) {
add(conf, serializerName);
}
}
hadoop 1.0.1:
public SerializationFactory(Configuration conf) {
super(conf);
for (String serializerName : conf.getStrings("io.serializations",
new String[]{"org.apache.hadoop.io.serializer.WritableSerialization"})) {
LOG.error("serializerName"+serializerName);
add(conf, serializerName);
}
}
CommonConfigurationKeys.IO_SERIALIZATIONS_KEY这个变量跟下面是一样的,本人在1.0.1上打log看了,就是包含后来PersistentSerializer的PersistentSerialization,由于半天没配好2.2.0的编译环境,所以后来2.2.0那边就没查了,然后就发现1.8直接能用了。。。
自此痛苦的调查告一段落,期望后来人不要向我一样走弯路,也给期望继续做nutch2.2.1和合hadoop2.2.0兼容的人留一点意见。
再次重复hadoop2.2.0和nutch1.8是可以兼容的!
分享到:
相关推荐
nutch1.8最新版2014.6.10part2
nutch1.8最新版2014.6.10part1
Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 本版本为html版,在离线情况下也可以方便使用。目前(2014.5.5)为最新版本的2.2.1。
nutch2.3+hbase0.94.14+hadoop1.2.1安装文档.txt )
Nutch与Apache Lucene紧密集成,利用其强大的全文检索能力。 6. **Link Analysis**:Nutch使用PageRank算法进行链接分析,计算网页的重要性,提升搜索结果的相关性。 7. **配置文件**:Nutch的配置文件非常重要,...
找到 `/home/nutch/apache-nutch-2.2.1/ivy/ivy.xml` 文件,这里可能需要调整 Gora 和 MySQL 的依赖版本,确保与你的 MySQL 驱动版本兼容。例如,添加 `mysql-connector-java` 依赖项,以便 Nutch 可以连接到 MySQL ...
如果你打算编译和运行Nutch 2.2.1,你需要安装Java环境、Ant、Hadoop和Apache Maven。然后按照以下步骤操作: 1. 修改`conf`目录下的配置文件以适应你的环境。 2. 在命令行中导航到项目根目录,运行`ant runtime`来...
apache-nutch-2.2.1(Eclipse直接运行版)今天刚做的,发现有很多坑,分享给大家实验,JDK1.7 Win10。我分享的两个压缩卷一起下载才可以用,资源限制太小了 002地址:...
Nutch 1.8, you can try it on other Nutch version or refactor the source codes as your design. 主要特性 常规的HTML页面抓取: 对于常规的例如新闻类没有AJAX特性的页面可以直接用Nutch自带的...
通过 Nutch 脚本,我们可以将 Apache-nutch-1.6.job 提交给 Hadoop 的 JobTracker 进行执行。 【Solr】 Apache Solr 是一个基于 Lucene 的全文搜索引擎服务器,用于高效地存储和检索大量文本数据。在 Nutch 框架中...
这个库在Nutch中的作用可能是用于与外部RESTful服务通信,例如数据交换或爬虫调度。 `org.restlet.ext.jackson.jar` 是Restlet框架的一个扩展,它整合了Jackson库。Jackson是Java中非常流行的一个JSON处理库,可以...
Nutch与Hadoop紧密结合,利用分布式计算能力处理大规模数据,适合构建大规模的搜索引擎系统。 二、Nutch工作流程 1. **种子URL**:启动Nutch时,需要提供一批起始URL(种子URL),Nutch将从这些URL开始抓取。 2. **...
本文将详细探讨提高Nutch运行效率的原理与方法。 首先,我们要理解Nutch的运行过程。Nutch主要由四个主要阶段组成:抓取(Crawling)、解析(Parsing)、索引(Indexing)和搜索(Searching)。每个阶段都可能成为...
Nutch与多个其他开源项目有着紧密的联系,其中包括: - LuceneCore,一个全文检索库,为Nutch提供了强大的检索能力; - Solr,一个企业级的搜索平台,基于Lucene,提高了搜索的性能; - Elasticsearch,一个支持...
#### 一、Nutch与Hadoop、Tika、Gora的关系 **Nutch**是一个开源的Web抓取框架,它不仅能够帮助开发者抓取网络上的数据,还促进了多个重要开源项目的诞生和发展。通过Nutch项目,衍生出了几个在大数据处理领域非常...
3. Hadoop:Nutch可以与Hadoop协同工作,虽然不是必须的,但如果你打算处理大量数据,推荐安装Hadoop 2.x版本。 **二、获取Nutch源码** 1. 访问Apache Nutch官方网站(http://nutch.apache.org/releases.html),...
2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System(NDFS)分别被纳入到 Hadoop 项目中,Hadoop 就此正式诞生,标志着大数据时代来临。 Hadoop 三大发行版本:Apache、Cloudera、Hortonworks。Apache ...
Nutch的创始人是Doug Cutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。 Nutch诞生于2002年8月,是Apache旗下的一个用Java实现的开源搜索引擎项目,自Nutch1.2版本之后,Nutch已经从搜索引擎演化为网络...
“工具”标签则暗示这份资料可能包含了一些辅助工具或者插件的使用,比如如何使用Nutch与Solr或Elasticsearch集成来构建搜索引擎,或者如何使用Nutch的命令行工具进行数据处理。 压缩包中的“Nutch.pdf”可能是...
### 一、理解Nutch与Eclipse的结合 Nutch是一个基于Hadoop的框架,用于构建可扩展且高性能的网络爬虫。它不仅能够抓取网页,还能进行内容分析、链接分析以及全文搜索。然而,Nutch的安装和配置可能对初学者来说有些...