问题标签 [stormcrawler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-crawler - StormCrawler 从 1.6 升级到 1.8
我在尝试切换到 SC 1.8 时遇到以下错误(我之前在 1.6 上)。我已按照推荐安装了 Storm 1.2.1、ES 6.2.2,调整了 ES 配置和我的 ES 种子注入器拓扑。但是,当我启动它时,这是我得到的:
有没有人遇到过类似的问题?谢谢!
web-crawler - 在 StormCrawler 中不跟踪 url.path 有什么影响?
我们正在使用StormCrawler并将我们的Status
索引存储在 elasticsearch 中。这个索引变得相当大(几乎 30 亿个文档!),所以分片也很大,可以备份等。
我正在考虑删除url.path
文档中的元数据数组元素。看起来我可以用metadata.track.path
.
如果我不再为此编制索引并删除我拥有的内容,会有什么影响?
web-crawler - Stormcrawler:用于解析 PDF 属性的 Apache Tika
我添加了 Tika 作为对我的 StormCrawler 实现的引用,它可以在爬网中获取 PDF 文档。但是,Title、Authors和其他属性不会被解析。我尝试使用不同的组合来' index.md.mapping :' 并将相应的属性添加到ES_IndexInit,但 PDF 文档的 Kibana(索引)中的内容字段始终为空。一切都适用于 HTML 页面。如果我遗漏了什么或者我可以看一个例子,你能否提供一些指示?
es-crawler.flux:
name: "crawler"
includes:
- resource: true
file: "/crawler-default.yaml"
override: false
spouts:
- id: "spout"
className: "com.digitalpebble.stormcrawler.elasticsearch.persistence.AggregationSpout"
parallelism: 10
bolts:
- id: "partitioner"
className: "com.digitalpebble.stormcrawler.bolt.URLPartitionerBolt"
parallelism: 1
- id: "fetcher"
className: "com.digitalpebble.stormcrawler.bolt.FetcherBolt"
parallelism: 1
- id: "sitemap"
className: "com.digitalpebble.stormcrawler.bolt.SiteMapParserBolt"
parallelism: 1
- id: "parse"
className: "com.digitalpebble.stormcrawler.bolt.JSoupParserBolt"
parallelism: 5
- id: "index"
className: "com.digitalpebble.stormcrawler.elasticsearch.bolt.IndexerBolt"
parallelism: 1
- id: "status"
className: "com.digitalpebble.stormcrawler.elasticsearch.persistence.StatusUpdaterBolt"
parallelism: 1
- id: "status_metrics"
className: "com.digitalpebble.stormcrawler.elasticsearch.metrics.StatusMetricsBolt"
parallelism: 4
- id: "redirection_bolt"
className: "com.digitalpebble.stormcrawler.tika.RedirectionBolt"
parallelism: 1
- id: "parser_bolt"
className: "com.digitalpebble.stormcrawler.tika.ParserBolt"
parallelism: 1
streams:
- from: "spout"
to: "partitioner"
grouping:
type: SHUFFLE
from: "spout" to: "status_metrics" grouping: type: SHUFFLE
from: "partitioner" to: "fetcher" grouping: type: FIELDS args: ["key"]
from: "fetcher" to: "sitemap" grouping: type: LOCAL_OR_SHUFFLE
from: "sitemap" to: "parse" grouping: type: LOCAL_OR_SHUFFLE
from: "parse" to: "index" grouping: type: LOCAL_OR_SHUFFLE
from: "fetcher" to: "status" grouping: type: FIELDS args: ["url"] streamId: "status"
from: "sitemap" to: "status" grouping: type: FIELDS args: ["url"] streamId: "status"
from: "parse" to: "status" grouping: type: FIELDS args: ["url"] streamId: "status"
from: "index" to: "status" grouping: type: FIELDS args: ["url"] streamId: "status"
from: "parse" to: "redirection_bolt" grouping: type: LOCAL_OR_SHUFFLE
from: "redirection_bolt" to: "parser_bolt" grouping: type: LOCAL_OR_SHUFFLE
from: "redirection_bolt" to: "index" grouping: type: LOCAL_OR_SHUFFLE
from: "parser_bolt" to: "index" grouping: type: LOCAL_OR_SHUFFLE
es-injector.flux:
name: "injector"
includes:
- resource: true
file: "/crawler-default.yaml"
override: false
components:
- id: "scheme"
className: "com.digitalpebble.stormcrawler.util.StringTabScheme"
constructorArgs:
- DISCOVERED
spouts:
- id: "spout"
className: "com.digitalpebble.stormcrawler.spout.FileSpout"
parallelism: 1
constructorArgs:
- "."
- "seeds.txt"
- ref: "scheme"
bolts:
- id: "status"
className: "com.digitalpebble.stormcrawler.elasticsearch.persistence.StatusUpdaterBolt"
parallelism: 1
- id: "parser_bolt"
className: "com.digitalpebble.stormcrawler.tika.ParserBolt"
parallelism: 1
streams:
- from: "spout"
to: "status"
grouping:
type: FIELDS
args: ["url"]
pom.xml:
http://maven.apache.org/maven-v4_0_0.xsd">
web-crawler - Storm-Crawler 中的重定向处理
使用 SC,我应该能够在不发出外链的情况下遵循重定向吗?重定向的 URL 是否应该作为“发现”注入我的后端?似乎不是来自我使用以下设置的小实验:
最后,当一个页面被视为重定向到另一个页面时,它是否会通过该页面的其余拓扑(我的意思是无论是在 fetcher 中的什么)?
elasticsearch - Stormcrawler:写入弹性集群问题
下载后的SC具有localhost ES--local
的设置,可与和完美配合--remote
。当我将其更改为写入 Dev Elastic Search 服务器(cluster)并且我已经更新时,ES_IndexInit.sh和es_conf.yaml(es.indexer.addresses和cluster.name)具有正确的属性值。ES_IndexInit按预期在该服务器上创建索引,但这永远不会写入该服务器。我在日志中看不到任何错误,并且我看到URL显示为已发现在日志中。这甚至不写入状态索引。我不确定我错过了什么?
web-crawler - 带有 SQL 外部模块的 Stormcrawl 在爬虫时获取 ParseFilters 异常
我将 Stromcrawler 与 SQL 外部模块一起使用。我已将 pop.xml 更新为:
我使用与 ES 设置类似的注入器/爬取程序:
我已经创建了 mysql 数据库crawl
、表urls
并成功地将我的网址注入其中。例如,如果我这样做select * from crawl.urls limit 5;
,我可以看到 url、状态和其他字段。由此,我得出结论,在这个阶段,爬虫连接到数据库。
Sql-injector 看起来像这样:
当我运行时:
我在 Parse 螺栓处遇到以下异常:
java.lang.RuntimeException:从 com.digitalpebble.stormcrawler.parse.ParseFilters.fromConf(ParseFilters.java:67) 处 com.digitalpebble.stormcrawler.bolt.JSoupParserBolt.prepare(JSoupParserBolt.prepare(JSoupParserBolt. java:116) at org.apache.storm.daemon.executor$fn__5043$fn__5056.invoke(executor.clj:803) at org.apache.storm.util$async_loop$fn__557.invoke(util.clj:482) at clojure .lang.AFn.run(AFn.java:22) at java.lang.Thread.run(Thread.java:745) 原因:java.io.IOException: Unable to build JSON object from file at com.digitalpebble.stormcrawler .parse.ParseFilters.(ParseFilters.java:92) at com.digitalpebble.stormcrawler.parse.ParseFilters.fromConf(ParseFilters.java:62) ... 5 更多原因:com.fasterxml.jackson.core.JsonParseException: Unexpected字符('}'(代码 125)):期待双引号开始字段名称...
sql-crawler.flux:
看起来StringUtils
ParseFilters.java:60 的对象是空白的。
web-crawler - 列“nextfetchdate”的 StormCrawler SQL 错误
我的设置与此相同。当我在爬取模式下运行爬虫时,出现以下错误:
[Thread-130-status-executor[109 109]] 错误 cdspAbstractStatusUpdaterBolt - 存储 com.mysql.jdbc.MysqlDataTruncation 时捕获的异常:数据截断:不正确的日期时间值:'2099-12-31 00:00:00' 列' nextfetchdate' 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3964) 的第 1 行 ~[stromcrawler-1.0-SNAPSHOT.jar:?] 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902 ) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.mysql.jdbc.MysqlIO .sqlQueryDirect(MysqlIO.java:2673) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549) ~[stromcrawler-1.0-SNAPSHOT.jar:?]在 com.mysql.jdbc.PreparedStatement。executeInternal(PreparedStatement.java:1861) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1192) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.digitalpebble.stormcrawler.sql.StatusUpdaterBolt.store(StatusUpdaterBolt.java:132) ~[stromcrawler-1.0-SNAPSHOT.jar:?] at com.digitalpebble.stormcrawler.persistence.AbstractStatusUpdaterBolt.execute(AbstractStatusUpdaterBolt.java:196) [ stromcrawler-1.0-SNAPSHOT.jar:?] at org.apache.storm.daemon.executor$fn__5043$tuple_action_fn__5045.invoke(executor.clj:739) [storm-core-1.2.1.jar:1.2.1] at org .apache.storm.daemon.executor$mk_task_receiver$fn__4964.invoke(executor.clj:468) [storm-core-1.2.1.jar:1.2.1] at org.apache.storm.disruptor$clojure_handler$reify__4475.onEvent (disruptor.clj:41)[storm-core-1.2。1.jar:1.2.1] 在 org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:509) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.utils .DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:487) [storm-core-1.2.1.jar:1.2.1] at org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:74) [storm-core- 1.2.1.jar:1.2.1] 在 org.apache.storm.daemon.executor$fn__5043$fn__5056$fn__5109.invoke(executor.clj:861) [storm-core-1.2.1.jar:1.2.1]在 org.apache.storm.util$async_loop$fn__557.invoke(util.clj:484) [storm-core-1.2.1.jar:1.2.1] 在 clojure.lang.AFn.run(AFn.java:22 ) [clojure-1.7.0.jar:?] 在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]java:509) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:487) [storm-core-1.2.1.jar:1.2 .1] 在 org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:74) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.daemon.executor$fn__5043$ fn__5056$fn__5109.invoke(executor.clj:861) [storm-core-1.2.1.jar:1.2.1] at org.apache.storm.util$async_loop$fn__557.invoke(util.clj:484) [storm -core-1.2.1.jar:1.2.1] 在 clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 在 java.lang.Thread.run(Thread. java:745) [?:1.8.0_121]java:509) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:487) [storm-core-1.2.1.jar:1.2 .1] 在 org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:74) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.daemon.executor$fn__5043$ fn__5056$fn__5109.invoke(executor.clj:861) [storm-core-1.2.1.jar:1.2.1] at org.apache.storm.util$async_loop$fn__557.invoke(util.clj:484) [storm -core-1.2.1.jar:1.2.1] 在 clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 在 java.lang.Thread.run(Thread. java:745) [?:1.8.0_121]org.apache.storm.daemon.executor$fn__5043$fn__5056$fn__5109.invoke(executor.clj: 861) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.util$async_loop$fn__557.invoke(util.clj:484) [storm-core-1.2.1.jar:1.2 .1] 在 clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_121 ]org.apache.storm.daemon.executor$fn__5043$fn__5056$fn__5109.invoke(executor.clj: 861) [storm-core-1.2.1.jar:1.2.1] 在 org.apache.storm.util$async_loop$fn__557.invoke(util.clj:484) [storm-core-1.2.1.jar:1.2 .1] 在 clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?] 在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_121 ]?] 在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]?] 在 java.lang.Thread.run(Thread.java:745) [?:1.8.0_121]
请,建议在哪里寻找修复它
web-crawler - StormCrawler:集群的最佳拓扑
我正在使用stormcrawler 抓取40k 个站点,max_depth=2,我想尽可能快地完成它。我有 5 个风暴节点(具有不同的静态 IP)和 3 个弹性节点。目前我最好的拓扑是:
和爬虫配置:
问题:1)我应该使用 AggreationsSpout 还是 CollapsingSpout,有什么区别?我尝试了 AggregationSpout,但性能等于默认配置的 1 台机器的性能。
2)这种并行配置是否正确?
3) 当我从 1 个节点跳到 5 个节点配置时,我发现“FETCH ERROR”增加了约 20%,并且很多站点没有正确获取。可能是什么原因?
更新:
es-conf.yaml:
web-crawler - 指向 HdfsBolt 的 URL 内容
在 ES 拓扑中,我想在 ElasticSearch 中索引 url 并将 (url, [title, content]) 的元组转发到 Hdfs 存储。我发现 Apache-storm 有一个合适的 Hdfs bolt,它看起来像一个简单的实现。我想知道在 ES 爬行拓扑中在哪里寻找这个元组。你能指出哪个螺栓有这些数据吗?