问题标签 [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.

0 投票
2 回答
61 浏览

web-crawler - StormCrawler 从 1.6 升级到 1.8

我在尝试切换到 SC 1.8 时遇到以下错误(我之前在 1.6 上)。我已按照推荐安装了 Storm 1.2.1、ES 6.2.2,调整了 ES 配置和我的 ES 种子注入器拓扑。但是,当我启动它时,这是我得到的:

有没有人遇到过类似的问题?谢谢!

0 投票
1 回答
39 浏览

web-crawler - 在 StormCrawler 中不跟踪 url.path 有什么影响?

我们正在使用StormCrawler并将我们的Status索引存储在 elasticsearch 中。这个索引变得相当大(几乎 30 亿个文档!),所以分片也很大,可以备份等。

我正在考虑删除url.path文档中的元数据数组元素。看起来我可以用metadata.track.path.

如果我不再为此编制索引并删除我拥有的内容,会有什么影响?

0 投票
1 回答
214 浏览

web-crawler - Stormcrawler - 在本地主机上运行 -- 远程

我已经设置了所有 SC 步骤,并且能够索引和爬网,但是当我尝试运行以下命令时--remote,它会失败并出现错误。

我得到的错误是:

必须使用“风暴”客户端提交拓扑... 错误图片

这就是没有填充风暴 UI 拓扑摘要的原因。 Storm-UI

您能否提供一些指示和我可以查看的内容?我已经检查了我当地的 Storm 设置,看起来还不错。

0 投票
1 回答
600 浏览

web-crawler - Stormcrawler:用于解析 PDF 属性的 Apache Tika

我添加了 Tika 作为对我的 StormCrawler 实现的引用,它可以在爬网中获取 PDF 文档。但是,TitleAuthors和其他属性不会被解析。我尝试使用不同的组合来' 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">

0 投票
1 回答
155 浏览

web-crawler - Storm-Crawler 中的重定向处理

使用 SC,我应该能够在不发出外链的情况下遵循重定向吗?重定向的 URL 是否应该作为“发现”注入我的后端?似乎不是来自我使用以下设置的小实验:

最后,当一个页面被视为重定向到另一个页面时,它是否会通过该页面的其余拓扑(我的意思是无论是在 fetcher 中的什么)?

0 投票
2 回答
147 浏览

elasticsearch - Stormcrawler:写入弹性集群问题

下载后的SC具有localhost ES--local的设置,可与和完美配合--remote。当我将其更改为写入 Dev Elastic Search 服务器cluster)并且我已经更新时,ES_IndexInit.shes_conf.yamles.indexer.addressescluster.name)具有正确的属性值。ES_IndexInit按预期在该服务器上创建索引,但这永远不会写入该服务器。我在日志中看不到任何错误,并且我看到URL显示为已发现日志中。这甚至不写入状态索引。我不确定我错过了什么?

0 投票
1 回答
114 浏览

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)):期待双引号开始字段名称...

StormUI 截图

sql-crawler.flux:

看起来StringUtilsParseFilters.java:60 的对象是空白的。

0 投票
1 回答
91 浏览

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]

请,建议在哪里寻找修复它

0 投票
1 回答
349 浏览

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:

0 投票
1 回答
26 浏览

web-crawler - 指向 HdfsBolt 的 URL 内容

在 ES 拓扑中,我想在 ElasticSearch 中索引 url 并将 (url, [title, content]) 的元组转发到 Hdfs 存储。我发现 Apache-storm 有一个合适的 Hdfs bolt,它看起来像一个简单的实现。我想知道在 ES 爬行拓扑中在哪里寻找这个元组。你能指出哪个螺栓有这些数据吗?