在“Bluemix”solr 中索引 nutch 爬网数据时,Indexer IOException 作业失败
Indexer IOException job fail while Indexing nutch crawled data in “Bluemix” solr
我正在尝试为 Bluemix solr 抓取的数据建立索引。我在命令提示符下使用了以下命令:
bin/nutch index -D solr.server.url="https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/CLUSTER-ID/solr/admin/collections -D solr.auth=true -D solr.auth.username="USERNAME" -D solr.auth.password="PASS" Crawl/crawldb -linkdb Crawl/linkdb Crawl/segments/2016*
但是未能完成索引。结果如下:
Indexer: starting at 2016-06-16 16:31:50
Indexer: deleting gone documents: false
Indexer: URL filtering: false
Indexer: URL normalizing: false
Active IndexWriters :
SolrIndexWriter
solr.server.type : Type of SolrServer to communicate with (default 'http' however options include 'cloud', 'lb' and 'concurrent')
solr.server.url : URL of the Solr instance (mandatory)
solr.zookeeper.url : URL of the Zookeeper URL (mandatory if 'cloud' value for solr.server.type)
solr.loadbalance.urls : Comma-separated string of Solr server strings to be used (madatory if 'lb' value for solr.server.type)
solr.mapping.file : name of the mapping file for fields (default solrindex-mapping.xml)
solr.commit.size : buffer size when sending to Solr (default 1000)
solr.auth : use authentication (default false)
solr.auth.username : username for authentication
solr.auth.password : password for authentication
Indexing 153 documents
Indexing 153 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)
我猜它与 solr.server.url 地址有关,也许是它的结尾。我以不同的方式改变了它
例如
(因为它被 Bluemix Solr 用于索引 JSON/CSV/... 文件)。
不过现在没机会了。
有人知道我该如何解决吗?如果问题如我所料,那么任何人都知道 solr.server.url 到底应该是什么?
顺便说一下,"example_collection" 是我的 collections 名字,我正在使用 nutch1.11。
据我所知,不可能通过 nutch 本身提供的索引命令 (bin/nutch index...) 在 Bluemix R&R 中索引 nutch 爬取的数据。
我意识到要在 Bluemix Retrieve and Rank 服务中索引 nutch 爬取的数据,应该:
- 用坚果抓取种子,例如
$:bin/crawl -w 5 urls crawl 25
您可以通过以下方式查看抓取状态:
bin/nutch readdb crawl/crawldb/ -stats
将抓取的数据转储为文件:
$:bin/nutch dump -flatdir -outputDir dumpData/ -segment crawl/segments/
Post 那些可能的,例如 xml 文件到 solr Collection 检索和排名:
Post_url = '"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/%s/solr/%s/update"' %(solr_cluster_id, solr_collection_name)
cmd ='''curl -X POST -H %s -u %s %s --data-binary @%s''' %(Cont_type_xml, solr_credentials, Post_url, myfilename)
subprocess.call(cmd,shell=True)
使用 Bluemix Doc-Conv 服务将其余部分转换为 json:
doc_conv_url = '"https://gateway.watsonplatform.net/document-conversion/api/v1/convert_document?version=2015-12-15"'
cmd ='''curl -X POST -u %s -F config="{\"conversion_target\":\"answer_units\"}" -F file=@%s %s''' %(doc_conv_credentials, myfilename, doc_conv_url)
process = subprocess.Popen(cmd, shell= True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
然后将这些 Json 结果保存在 json 文件中。
Post 这个 json 文件到 collection:
Post_converted_url = '"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/%s/solr/%s/update/json/docs?commit=true&split=/answer_units/id&f=id:/answer_units/id&f=title:/answer_units/title&f=body:/answer_units/content/text"' %(solr_cluster_id, solr_collection_name)
cmd ='''curl -X POST -H %s -u %s %s --data-binary @%s''' %(Cont_type_json, solr_credentials, Post_converted_url, Path_jsonFile)
subprocess.call(cmd,shell=True)
发送查询:
pysolr_client = retrieve_and_rank.get_pysolr_client(solr_cluster_id, solr_collection_name)
results = pysolr_client.search(Query_term)
print(results.docs)
代码在 python 中。
对于初学者:您可以直接在您的CMD 中使用curl 命令。我希望它能帮助别人。
像这样:
nutch index -Dsolr.server.url=http://username:password@localhost:8983/solr/nutch crawl/crawldb/ -linkdb crawl/linkdb/ crawl/segments/20170816191100/ -filter -normalize -deleteGone
有效。
我正在尝试为 Bluemix solr 抓取的数据建立索引。我在命令提示符下使用了以下命令:
bin/nutch index -D solr.server.url="https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/CLUSTER-ID/solr/admin/collections -D solr.auth=true -D solr.auth.username="USERNAME" -D solr.auth.password="PASS" Crawl/crawldb -linkdb Crawl/linkdb Crawl/segments/2016*
但是未能完成索引。结果如下:
Indexer: starting at 2016-06-16 16:31:50
Indexer: deleting gone documents: false
Indexer: URL filtering: false
Indexer: URL normalizing: false
Active IndexWriters :
SolrIndexWriter
solr.server.type : Type of SolrServer to communicate with (default 'http' however options include 'cloud', 'lb' and 'concurrent')
solr.server.url : URL of the Solr instance (mandatory)
solr.zookeeper.url : URL of the Zookeeper URL (mandatory if 'cloud' value for solr.server.type)
solr.loadbalance.urls : Comma-separated string of Solr server strings to be used (madatory if 'lb' value for solr.server.type)
solr.mapping.file : name of the mapping file for fields (default solrindex-mapping.xml)
solr.commit.size : buffer size when sending to Solr (default 1000)
solr.auth : use authentication (default false)
solr.auth.username : username for authentication
solr.auth.password : password for authentication
Indexing 153 documents
Indexing 153 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)
我猜它与 solr.server.url 地址有关,也许是它的结尾。我以不同的方式改变了它 例如
(因为它被 Bluemix Solr 用于索引 JSON/CSV/... 文件)。 不过现在没机会了。
有人知道我该如何解决吗?如果问题如我所料,那么任何人都知道 solr.server.url 到底应该是什么? 顺便说一下,"example_collection" 是我的 collections 名字,我正在使用 nutch1.11。
据我所知,不可能通过 nutch 本身提供的索引命令 (bin/nutch index...) 在 Bluemix R&R 中索引 nutch 爬取的数据。 我意识到要在 Bluemix Retrieve and Rank 服务中索引 nutch 爬取的数据,应该:
- 用坚果抓取种子,例如
$:bin/crawl -w 5 urls crawl 25
您可以通过以下方式查看抓取状态:
bin/nutch readdb crawl/crawldb/ -stats
将抓取的数据转储为文件:
$:bin/nutch dump -flatdir -outputDir dumpData/ -segment crawl/segments/
Post 那些可能的,例如 xml 文件到 solr Collection 检索和排名:
Post_url = '"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/%s/solr/%s/update"' %(solr_cluster_id, solr_collection_name) cmd ='''curl -X POST -H %s -u %s %s --data-binary @%s''' %(Cont_type_xml, solr_credentials, Post_url, myfilename) subprocess.call(cmd,shell=True)
使用 Bluemix Doc-Conv 服务将其余部分转换为 json:
doc_conv_url = '"https://gateway.watsonplatform.net/document-conversion/api/v1/convert_document?version=2015-12-15"' cmd ='''curl -X POST -u %s -F config="{\"conversion_target\":\"answer_units\"}" -F file=@%s %s''' %(doc_conv_credentials, myfilename, doc_conv_url) process = subprocess.Popen(cmd, shell= True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
然后将这些 Json 结果保存在 json 文件中。
Post 这个 json 文件到 collection:
Post_converted_url = '"https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/%s/solr/%s/update/json/docs?commit=true&split=/answer_units/id&f=id:/answer_units/id&f=title:/answer_units/title&f=body:/answer_units/content/text"' %(solr_cluster_id, solr_collection_name) cmd ='''curl -X POST -H %s -u %s %s --data-binary @%s''' %(Cont_type_json, solr_credentials, Post_converted_url, Path_jsonFile) subprocess.call(cmd,shell=True)
发送查询:
pysolr_client = retrieve_and_rank.get_pysolr_client(solr_cluster_id, solr_collection_name) results = pysolr_client.search(Query_term) print(results.docs)
代码在 python 中。
对于初学者:您可以直接在您的CMD 中使用curl 命令。我希望它能帮助别人。
像这样:
nutch index -Dsolr.server.url=http://username:password@localhost:8983/solr/nutch crawl/crawldb/ -linkdb crawl/linkdb/ crawl/segments/20170816191100/ -filter -normalize -deleteGone
有效。