Stormcrawl с внешним модулем SQL получает исключение ParseFilters при сканировании - PullRequest
0 голосов
/ 23 мая 2018

Я использую Stromcrawler с внешним модулем SQL.Я обновил свой pop.xml:

<dependency>
        <groupId>com.digitalpebble.stormcrawler</groupId>
        <artifactId>storm-crawler-sql</artifactId>
        <version>1.8</version>
</dependency>

Я использую процедуру инжектора / сканирования аналогично тому, как в случае с настройкой ES:

storm jar target/stromcrawler-1.0-SNAPSHOT.jar  org.apache.storm.flux.Flux --local sql-injector.flux --sleep 864000

Я создал базу данных MySQL crawl, таблица urls и успешно ввел мои URL в него.Например, если я наберу select * from crawl.urls limit 5;, я смогу увидеть URL, статус и другие поля.Из этого я делаю вывод, что на этом этапе сканер подключается к базе данных.

Sql-injector выглядит следующим образом:

name: "injector"

includes:
- resource: true
  file: "/crawler-default.yaml"
  override: false

- resource: false
  file: "crawler-conf.yaml"
  override: true

- resource: false
  file: "sql-conf.yaml"
  override: true

- resource: false
  file: "my-config.yaml"
  override: true

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.sql.StatusUpdaterBolt"
parallelism: 1

streams:
 - from: "spout"
to: "status"
grouping:
  type: CUSTOM
  customClass:
    className: "com.digitalpebble.stormcrawler.util.URLStreamGrouping"
    constructorArgs:
      - "byHost"

Когда я запускаю:

storm jar target/stromcrawler-1.0-SNAPSHOT.jar  org.apache.storm.flux.Flux --remote sql-crawler.flux

Я получил следующее исключение в разборе:ParseFilters.java:67) в com.digitalpebble.stormcrawler.bolt.JSoupParserBolt.prepare (JSoupParserBolt.java:116) в org.apache.storm.daemon.executor $ fn__5043 $ fn__5056.inclj:.apache.storm.util $ async_loop $ fn__557.invoke (util.clj: 482) в clojure.lang.AFn.run (AFn.java:22) в java.lang.Thread.run (Thread.java:745) вызваноby: java.io.IOException: Невозможно построить объект JSON из файла в com.digitalpebble.stormcrawler.parse.ParseFilters. (ParseFilters.java:92) в com.digitalpebble.stormcrawler.parse.ParseFilters.fromConf (ParseFilters.jpg).62) ... еще 5 причин: com.fasterxml.jackson.core.JsonParseException: неожиданный символ ('}' (код 125)): ожидалось двойная кавычка для начала имени поля ...

Снимок экрана StormUI

sql-crawler.flux:

name: "crawler"

includes:
- resource: true
  file: "/crawler-default.yaml"
  override: false

- resource: false
  file: "crawler-conf.yaml"
  override: true

- resource: false
  file: "sql-conf.yaml"
  override: true

- resource: false
  file: "my-config.yaml"
  override: true

spouts:
- id: "spout"
className: "com.digitalpebble.stormcrawler.sql.SQLSpout"
parallelism: 100

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: 1
- id: "status"
className: "com.digitalpebble.stormcrawler.sql.StatusUpdaterBolt"
parallelism: 1


streams:
- from: "spout"
to: "partitioner"
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: "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"

Похоже, что объект StringUtils в ParseFilters.java:60 пуст.

1 Ответ

0 голосов
/ 23 мая 2018

Проверьте содержимое src / main / resources.parsefilters.json (или любое значение, которое вы могли установить для parsefilters.config.file ), судя по сообщению об ошибке,JSON, который он содержит, недействителен.Не забудьте восстановить Uber Jar с mvn clean package

...