2017-01-04 9 views
0

Я использую StormCrawler для Live Crawling. Я вставляю домен в ElasticSearch, и искатель отлично сканирует, я определил предел обхода URls для каждого домена (используя Redis в SimpleFetcherBolt).Параллельная обработка нового домена/URL-адреса, вставленного в StormCrawler с использованием ElasticSearch

Сценарий: когда я вставляю домен, StormCrawler начинает сканирование. Теперь введите новый домен в ElasticSeeds, StormCrawler не получит его немедленно.

Он занят в получении страниц предыдущего домена. Если предел высок (скажем, 1000 URL-адресов), для начала сканирования по вновь вставленному домену требуется 20 минут.

Я хочу, чтобы результаты мгновенно, есть ли какой-либо приоритет, который можно установить для нового домена? или StormCrawler начинает сканирование в новом домене. Когда новый домен вставлен? Различная очередь (БД) для каждого домена?

Любые предложения будут оценены.

ответ

1

Я определил лимит ползет адресов для каждого домена (Использование Redis в SimpleFetcherBolt)

могли бы вы объяснить, что вы имеете в виду под этим? Вам не нужно изменять болт Fetcher, для чего нужны фильтры URL.

Какой тип носика вы используете? AggregationSpouts? Сколько экземпляров SimpleFetcherBolt вы используете?

SC должен быстро начать сканирование по новому домену. Установите соответствующий уровень журнала и проверьте журналы, чтобы узнать, были ли носители выпущены кортежи для новых доменов и были ли заблокированы URL-адреса дальше.

EDIT: либо укажите более одного экземпляра SimpleFetcherBolt, либо вместо этого используйте FetcherBolt. С одним экземпляром SFB URL-адреса будут застревать в очереди, тогда как FetcherBolt будет обрабатывать их параллельно.

По ограничению Я подразумевал, что SC только извлекает ограниченные URL-адреса одного домена после этого. Он перестает получать. сказать Лимит 100, SC будет получать 100 Urls каждого домен

Может быть, сделать это как отдельный URL фильтр, это будет намного чище, чем взлом Fetcher класса, он также должен быть более эффективным.

SC использует Agg.Spout по умолчанию правой

Нет, см ESCrawlTopology

+0

По пределу я имел в виду только SC получает ограниченные URLS одного домена после этого он прекращает выборку. например, Limit равен 100, SC получит 100 адресов каждого домена. Я использую defualt ElasticSearchSpout и запускаю один экземпляр SImpleFetcherBolt (SC использует Agg.Spout по умолчанию справа)? Я проверил журналы, и кажется, что SC выбирает новые домены, только он (SimpleFetcherBolt) завершает выборку HTML-содержимого уже в очереди URL. – superB

+0

Спасибо за предложения. Я использую FetcherBolt и AggregateSpout.It довольно быстро и работает параллельно. Быстрые вопросы: в чем разница между SamplerAggregationSpout и AggregationSpout?Как ограничить обход каждого домена в URL-фильтре? – superB

+1

SamplerAggregationSpout полезен для больших обходов, он берет образец результатов перед агрегацией. Это быстрее, но не имеет приоритета, увеличивая nextFetchDate. > Как ограничить обход каждого домена в URL-фильтрах? Вы можете написать собственный фильтр URL, который запрашивает ES для количества URL-адресов для данного домена или использует Redis так, как вы уже делаете, но в пределах фильтра –

 Смежные вопросы

  • Нет связанных вопросов^_^