将nutch 1.11与solr 6.0.1云集成

时间:2016-06-09 16:12:31

标签: solr nutch

这类似于solr5.3.15-nutch here,但有一些额外的皱纹。首先,作为背景,我尝试了solr 4.9.1和nutch没有问题。然后升级到solr 6.0.1。集成作为一个独立的工作很好,并得到后端代码解析json等。但是,最终,我们需要安全性,并且不想使用Kerberos。根据Solr安全文档,基本的auth和基于规则的auth(这是我们想要的)仅在云模式下工作(顺便说一句,如果有人建议让非Kerberos安全性在独立模式下工作,那么它将起作用好)。所以,通过Solr-Cloud-Ref的文档,使用交互式启动并获取所有默认值,除了我作为" nndcweb"的集合的名称。而不是"开始"。我采取的配置是 data_driven_schema_configs 。为了整合nutch,我做了许多尝试的排列。根据我迄今为止能够找到的内容,我只会给出最近的两个似乎最接近的内容。从早期的堆栈溢出引用,我尝试的最后一个是(注意所有URL都有http://,但Stackoverflow的发布系统是抱怨,所以我为了这篇文章把它们拿出来):

  

bin / nutch index crawl / crawldb -linkdb crawl / linkdb -D solr.server.url = localhost:8939 / solr / nndcweb / -Dsolr.server.type = cloud -D solr.zookeeper.url = localhost:9983 / -dir crawl / segments / * -normalize

我最后遇到了上一个提到的线程中提到的问题:即

  

线程中的异常" main" java.lang.IllegalArgumentException:java.net.URISyntaxException:索引15处的方案名称中的非法字符:solr.server.url = localhost:8939 / solr / nndcweb       在org.apache.hadoop.fs.Path.initialize(Path.java:206)       在org.apache.hadoop.fs.Path。(Path.java:172)       在org.apache.nutch.indexer.IndexingJob.run(IndexingJob.java:217)       在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)       在org.apache.nutch.indexer.IndexingJob.main(IndexingJob.java:231)   引起:java.net.URISyntaxException:索引15处的方案名称中的非法字符:solr.server.url = localhost:8939 / solr / nndcweb       在java.net.URI $ Parser.fail(URI.java:2848)       在java.net.URI $ Parser.checkChars(URI.java:3021)       在java.net.URI $ Parser.parse(URI.java:3048)       在java.net.URI。(URI.java:746)       在org.apache.hadoop.fs.Path.initialize(Path.java:203)

我也尝试过:

  

bin / nutch solrindex localhost:8983 / solr / nndcweb crawl / crawldb -linkdb crawl / linkdb -Dsolr.server.type = cloud -D solr.zookeeper.url = localhost:9983 / -dir crawl / segments / * - 正常化

并得到同样的东西。在solrindex上提供帮助表示使用-params和"&"分离选项(与使用-D相反)。但是,这只会告诉我的Linux系统尝试在后台运行一些奇怪的东西,当然。

有人对下一步尝试有什么建议吗?谢谢!

更新 我更新了上面使用的命令,以反映我所犯的一个愚蠢的错误。请注意,实际上,所有url引用都有http://前缀,但我必须将它们取出才能发布。尽管有这个问题,但我仍然得到了同样的例外(我用它来取代原来的一个例子,再次使用http:// cut out..which会让事情变得混乱......对不起关于那......)。

又一次更新 所以..这很有趣。使用solrindex选项,我只是从zookeeper url ..just localhost(带有http://前缀)中取出端口。 15个字符。 URISyntaxException表示问题出在索引18(来自org.apache.hadoop.fs.Path.initialize(Path.java:206))。这恰好匹配" ="在" solr.zookeeper.url ="。所以,似乎hadoop.fs.Path.intialize()将整个字符串作为url。那么也许我没有正确设置?或者这是hadoop中的一个错误?这很难相信。

几乎有更新 好了......给出了最后一次尝试的结果,我决定将solr.type of cloud和zookeeper.url放在nutch-site.xml配置文件中。然后做了:

  

bin / nutch solrindex http://localhost:8983/solr/nndcweb crawl / crawldb -linkdb crawl / linkdb -dir crawl / segments -normalize

(很棒..现在没有关于来自StackOverflow的网址的投诉)。没有uri例外了。现在,我得到的错误是:

(在顶部削减措辞)

Indexing 250 documents
Indexer: java.io.IOException: Job failed!
at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:836)
at org.apache.nutch.indexer.IndexingJob.index(IndexingJob.java:145)
at org.apache.nutch.indexer.IndexingJob.run(IndexingJob.java:222)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.nutch.indexer.IndexingJob.main(IndexingJob.java:231)

深入研究nutch日志,我看到以下内容:

  

请求时未指定Collection Param,并且未设置默认集合。

显然,Nutch邮件列表中提到了这一点,与Nutch 1.11和solr 5(云模式)有关。有人提到它不会起作用,但会上传补丁(这是在2016年1月回来的)。在荷兰开发网站上挖掘,我在这个问题上没有遇到过任何问题......对于nutch 1.13来说有点类似,这显然没有正式发布。还在挖掘,但如果有人真的以某种方式工作,我很想听听你是怎么做的..

编辑2016年7月12日

因此,在几个星期转移到另一个不相关的项目后,我回到了这个。在看到下面的S. Doe的回复之前,我决定尝试给ElasticSearch一个尝试......这是一个全新的项目,我们还没有任何关系。到现在为止还挺好。 Nutch正在使用它,尽管使用分布式二进制文件我必须将Elasticsearch版本降低到1.4.1。 Haven尚未尝试安全方面。出于好奇,我将最终尝试使用Solr的S. Doe的建议,并将发布后来的内容......

2 个答案:

答案 0 :(得分:1)

您没有指定连接到Solr的协议:您需要指定http://的{​​{1}}部分,并且您使用了错误的语法来指定要连接的端口,正确的URL应该是是:solr.server.url

答案 1 :(得分:1)

关于使用solr索引时URL的问题:我遇到了同样的问题,我知道这听起来很愚蠢但是由于某些原因我无法获得,你可以通过使用URL的Encode来修复它(将“:”替换为“ %3A“,”/“与”%2F“和......)相反。(至少对我来说这解决了这个问题。) 在你的情况下:

  

bin / nutch solrindex -D solr.server.url = http%3A%2F%2Flocalhost%3A8983%2Fsolr%2Fnndcweb crawl / crawldb -linkdb crawl / linkdb -dir crawl / segments -normalize

我希望它有所帮助。 顺便说一句,现在我遇到了和你一样的问题(索引器:java.io.IOException:作业失败了!)