Открыть сервис

Nutch

Nutch — это программная платформа с открытым исходным кодом для построения веб-сканеров (краулеров) и систем поиска, написанная на языке Java. Проект разрабатывается в рамках экосистемы Фонда программного обеспечения Apache (Apache Software Foundation) и является одним из старейших и наиболее широко используемых решений в данной области. Nutch обеспечивает полный цикл обработки веб-документов: от автоматического обхода гиперссылок на веб-страницах до индексации их содержимого и предоставления возможностей полнотекстового поиска.

История

Разработка Nutch была начата в 2002 году американскими учёными и инженерами Дугом Каттингом (Doug Cutting) и Майком Кафарелла (Mike Cafarella). Первоначальной мотивацией для создания проекта стала попытка построить альтернативу коммерческим поисковым системам (таким как Google) на основе открытых технологий. Каттинг, в частности, позднее создал Hadoop, а Nutch послужил одним из полигонов для отработки идей распределённой обработки данных.

В 2004 году Nutch достиг функциональности, позволяющей обрабатывать более 100 миллионов веб-страниц, что было продемонстрировано на поисковом роботе для Open Directory Project. В том же году проект перешёл в инкубатор Apache Software Foundation, а в 2005 году получил статус проекта верхнего уровня.

В 2010 году вышла версия 1.0, ознаменовавшая стабилизацию архитектуры. В последующие годы развитие шло по пути интеграции с экосистемой Hadoop (для распределённой обработки) и Solr/Elasticsearch (для индексации и поиска). В 2017 году вышла версия 2.0, которая представила новую архитектуру на основе Apache Hadoop YARN (Yet Another Resource Negotiator) и AKKA (фреймворка для параллельных вычислений). Однако в сообществе возникли разногласия: часть разработчиков сочла версию 2.x слишком сложной и ресурсоёмкой, что привело к разделению на две основные ветки — 1.x (классическая, ориентированная на одиночные серверы) и 2.x (распределённая, на базе Hadoop). На практике обе ветки продолжают поддерживаться, но версия 1.x (последняя стабильная — 1.19) остаётся более популярной для типовых задач.

Архитектура и устройство

Основные компоненты

Nutch состоит из нескольких независимых модулей, которые могут быть скомпонованы в соответствии с задачами пользователя:

Рабочий процесс (типичный цикл краулинга)

Процесс обхода веб-сайтов в Nutch организован в виде последовательных этапов (циклов), называемых батчами (batches):

  1. Inject — начальная загрузка в базу краулера (CrawlDB) одного или нескольких URL-адресов, с которых начинается обход.
  2. Generate — на основе CrawlDB формируется список страниц для загрузки в текущей итерации. При этом учитывается вежливость (politeness) — задержки между запросами к одному домену.
  3. Fetch — загрузчик получает список URL и выполняет HTTP-запросы к серверам. Загруженные страницы сохраняются во временное хранилище (Content) вместе с HTTP-заголовками и метаданными.
  4. Parse — парсер извлекает из загруженного контента текст, выявляет ссылки на другие страницы (outlinks), а также метаданные (заголовки, ключевые слова, язык страницы).
  5. Updatedb — результаты парсинга (новые ссылки, статусы загрузки) записываются обратно в CrawlDB. Это позволяет системе динамически расширять область поиска.
  6. Index (или Index Dedup) — на основе текстов и метаданных строится поисковый индекс во внешней системе (Solr или Elasticsearch).

Цикл повторяется заданное количество раз (например, 10 или 20 итераций), после чего выполняется окончательная индексация.

Хранение данных

Nutch использует две основные базы данных на базе Hadoop:

Обе базы данных представляют собой последовательные файлы (SequenceFiles) или файлы MapFile, совместимые с экосистемой Hadoop.

Классификация и версии

По состоянию на начало 2025 года поддерживаются две параллельные ветки:

ВерсияБазовая технологияТип развёртыванияРекомендуемый сценарий
1.xStandalone (одиночный сервер)Одиночный сервер или кластер на JavaТиповые задачи среднего объёма (до 10-20 млн страниц), быстрое развёртывание
2.xHadoop YARN / AKKAРаспределённый кластерСверхбольшие объёмы (сотни миллионов страниц), гибкое масштабирование

Версия 1.x является более зрелой, документированной и стабильной. Версия 2.x предлагает лучшую масштабируемость, но требует настройки полноценного кластера Hadoop и имеет больше проблем с совместимостью.

Применение

Основные области использования

Nutch применяется в следующих сценариях:

  1. Корпоративный поиск — построение полнотекстового индекса по документам внутри интранета (веб-сайты, файловые хранилища, wiki-системы).
  2. Академические исследования — сбор датасетов веб-страниц для анализа лингвистических, социальных или экономических феноменов.
  3. Системы анализа контента — автоматический мониторинг новостных сайтов, блогов или форумов.
  4. Создание поисковых систем для специфических доменов — например, для сайтов на русском языке с нестандартной структурой или для сайтов, заблокированных для коммерческих поисковиков.
  5. Архивация веб-сайтов — снятие копий страниц для долговременного хранения.

Ограничения

По сравнению с коммерческими аналогами (Google, Yandex, Bing) Nutch имеет ряд ограничений:

Аналоги и конкуренты

Среди открытых аналогов Nutch выделяются:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →