由于项目需要把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 )
nutch2.2.1安装步骤,需要自己下载以下软件: apache-ant-1.10.5-bin.tar.gz apache-nutch-2.2.1-src.tar.gz apache-tomcat-8.5.39.tar.gz jdk-8u201-linux-x64.tar.gz solr-4.10.3.zip
这是未编译nutch的源码。可以配合这个博客:http://www.cnblogs.com/xxx0624/p/4172601.html
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自带的...
nutch1.2源码,可与hadoop分布式布置,欢迎下载
Nutch+solr + hadoop相关框架搭建教程
nutch2.2.1的未编译的代码包,献给一脸懵逼的小伙伴
1、 通过nutch,诞生了hadoop、tika、gora。 2、 nutch通过ivy来进行依赖管理(1.2之后)。 3、 nutch是使用svn进行源代码管理的。 4、 lucene、nutch、hadoop,在搜索界相当有名。 5、 ant构建之后,生成runtime...
nutch 2.2.1通过ivy.xml无法直接下载的jar包
Nutch的创始人是Doug Cutting,他同时也是Lucene、Hadoop和Avro开源项目的创始人。 Nutch诞生于2002年8月,是Apache旗下的一个用Java实现的开源搜索引擎项目,自Nutch1.2版本之后,Nutch已经从搜索引擎演化为网络...
Hadoop是大数据的核心技术之一,而Nutch集Hadoop之大成,是Hadoop的源头。学习Hadoop,没有数据怎么办?用Nutch抓!学了Hadoop的Map Reduce以及HDFS,没有实用案例怎么办?学习Nutch!Nutch的很多代码是用Map Reduce...
提高nutch运行效率的原理与方法,nutch的运行过程相对来说还是很慢的,对于一些特殊的应用来说,必须对nutch做很多修改来达到提高速度的目的,本人在这方面有深入研究,可以提高2-5倍性能。
nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据
讲解如何安装JavaJDK1.8,以及如何选取Nutch,Solr,Hadoop,Hbase的版本,来搭建搜索引擎。
这时会Build失败,查看原因发现是因为没有org.restlet和org.restlet.ext.jackson包(因为前面ivy.xml无法解析,所以注释掉了),因此这时可以到网上下载这两个包文件,并添加到项目中。
[硕士论文]_基于Nutch的垂直搜索引擎的分析与实现.pdf 一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch的搜索引擎技术.pdf 基于开源工具搭建小型搜索引擎.pdf 整合...