Nutch 1.17 веб-сканирование с оптимизацией хранилища

#hadoop #solr #hdfs #nutch #nutch2

#hadoop #solr #hdfs #nutch #nutch2

Вопрос:

Я использую Nutch 1.17 для сканирования более миллиона веб-сайтов. Для этого я должен выполнить следующие действия.

  1. Один раз запустите искатель как глубокий искатель, чтобы он извлек максимальные URL-адреса из заданных (1 миллион) доменов. В первый раз вы можете запускать его максимум 48 часов.
  2. После этого запустите поисковый робот с тем же 1 миллионом доменов через 5-6 часов и выберите только те URL-адреса, которые являются новыми для этих доменов.
  3. После завершения задания индексируйте URL-адреса в Solr
  4. Позже нет необходимости хранить необработанный HTML, следовательно, для сохранения хранилища (HDFS), удаления только необработанных данных и сохранения метаданных каждой страницы, чтобы в следующем задании мы не должны повторно извлекать страницу снова (до запланированного времени).

Нет никакой другой обработки или последующего анализа. Теперь у меня есть выбор использовать кластер Hadoop среднего размера (максимум 30 машин). Каждая машина имеет 16 ГБ оперативной памяти, 12 ядер и 2 ТБ хранилища. Машины Solr также имеют одинаковые пробелы. Теперь, чтобы поддержать вышесказанное, мне интересно следующее:

 a. How to achieve above document crawl rate i.e., how many machines are enough ? 
b. Should I need to add more machines or is there any better solution ?
c. Is it possible to remove raw data from Nutch and keep metadata only ?
d. Is there any best strategy to achieve the above objectives.
  

Ответ №1:

a. Как достичь более высокой скорости сканирования документов, т.Е. Сколько машин достаточно?

Предполагая, что выбрана вежливая задержка между последовательными выборками в один и тот же домен: предположим, что 10 страниц могут быть извлечены на домен и минуту, максимум. скорость сканирования составляет 600 миллионов страниц в час ( 10^6*10*60 ). Кластера с 360 ядрами должно быть достаточно, чтобы приблизиться к этой скорости. Возможно ли полное сканирование одного миллиона доменов в течение 48 часов, зависит от размера каждого из доменов. Имейте в виду, что при упомянутой скорости сканирования 10 страниц на домен и минуту, получение 10*60*48 = 28800 страниц на домен возможно только в течение 48 часов.

c. Возможно ли удалить необработанные данные из Nutch и сохранить только метаданные?

Как только сегмент был проиндексирован, вы можете удалить его. Для определения того, является ли ссылка, найденная на одной из 1 миллиона домашних страниц, новой, достаточно CrawlDb.

  1. После завершения задания индексируйте URL-адреса в Solr

Возможно, индексировать сегменты сразу после каждого цикла.

б. Нужно ли мне добавлять больше машин или есть какое-либо лучшее решение? d. Существует ли какая-либо наилучшая стратегия для достижения вышеуказанных целей.

Многое зависит от того, имеют ли домены одинаковый размер или нет. В случае, если они показывают степенное распределение (что вполне вероятно), у вас есть несколько доменов с несколькими миллионами страниц (вряд ли они сканируются исчерпывающе) и длинный хвост доменов с несколькими страницами (максимум несколько сотен страниц). В этой ситуации вам нужно меньше ресурсов, но больше времени для достижения желаемого результата.

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

1. Спасибо, сэр, как вы рассчитали количество ядер для этой цели? Вы сказали, что 360 ядер достаточно, но как их найти?

2. По моему опыту, используя средство выборки синтаксического анализа (fetcher.parse=true) и учитывая отсутствие других узких мест (диск, оперативная память, сеть или индекс Solr), можно извлекать и обрабатывать 200-250 тыс. страниц за ядро и час. Используя 360 ядер, вы получите 70-90 миллионов страниц в час. Звучит как разумная пропускная способность для 1 миллиона доменов. Я бы даже начал с меньшего кластера — вполне вероятно, что размеры доменов не сбалансированы, что приведет к снижению пропускной способности после первых циклов обхода.