сканирование URL-адресов на основе их приоритетов в StormCrawler

#web-crawler #stormcrawler

#веб-сканер #stormcrawler

Вопрос:

Я работаю над искателем, основанным на проекте StormCrawler. У меня есть требование сканировать URL-адреса на основе их приоритетов. Например, у меня есть два типа приоритета: ВЫСОКИЙ, НИЗКИЙ. Я хочу сканировать URL-адреса с высоким приоритетом как можно скорее перед URL-адресами с низким приоритетом. Мне нужен метод для решения вышеуказанной проблемы в искателе. Как я могу выполнить это требование в Apache Storm и StormCrawler?

Ответ №1:

Используя Elasticsearch в качестве серверной части, вы можете настроить spouts для сортировки URL-адресов в корзине по любому нужному полю. Поля сортируются в порядке возрастания, поэтому вы должны сохранить значение в метаданных 0 для high и 1 для low и указать имя ключа в conf es.status.bucket.sort.field. (Обратите внимание, что значения HIGH и LOW as также будут работать).

Значения по умолчанию в архетипе ES

es.status.bucket.sort.field:

  • «nextFetchDate»
  • «url»

вы должны сохранить nextFetchDate, чтобы URL-адреса с одинаковым приоритетом сортировались по нему и имели, например

es.status.bucket.sort.field:

  • «metadata.priority»
  • «nextFetchDate»
  • «url»

Обратите внимание, что это не повлияет на то, как сортируются сегменты, только на порядок внутри них.

Комментарии:

1. Большое вам спасибо, мистер Ниош. Ваш подход действительно интересен. Есть ли какой-либо способ контролировать порядок обработки кортежей внутри базы обходчика в зависимости от их приоритетов?

2. В некоторых ситуациях, возможно, было отправлено много кортежей с низким приоритетом, прежде чем мы добавили кортеж с высоким приоритетом из Spout.

3. Кроме того, мы используем Apache Solr для индексации результатов поиска и отправки URL-адресов. Существует ли аналогичный подход для серверной части Apache Solr?

4. Я предполагаю, что вы имеете в виду, что LOW и HIGH могут принадлежать одному и тому же хосту, а HIGH застрянет во внутренних очередях fetcher. Если вы сохраняете количество URL-адресов из каждой корзины на низком уровне, это не должно быть проблемой. У вас также может быть 2 FetcherBolts и добавить пользовательский bolt для перенаправления кортежей на один или другой в зависимости от их значения приоритета.

5. Модуль SOLR сильно отстает от ES, и пользовательская сортировка в настоящее время недоступна. Это не должно быть слишком сложно реализовать, и это будет ценным вкладом в проект, если вам захочется.