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 состоит из нескольких независимых модулей, которые могут быть скомпонованы в соответствии с задачами пользователя:
- Crawler (краулер) — выполняет обход веб-сайтов, загрузку страниц и извлечение гиперссылок.
- Parser (парсер) — разбирает загруженные документы (HTML, PDF, DOC и другие форматы) для извлечения чистого текста и метаданных.
- Indexer (индексатор) — на основе извлечённых данных строит поисковый индекс, используя внешние системы (Apache Solr или Elasticsearch).
- Fetcher (загрузчик) — отвечает за непосредственную загрузку веб-страниц по протоколам HTTP и HTTPS.
- LinkDB (база ссылок) — хранит информацию о связях между веб-страницами (кто на кого ссылается), что используется для расчёта PageRank.
- URLFilters — модули фильтрации URL-адресов (можно задавать регулярные выражения для включения или исключения определённых страниц).
Рабочий процесс (типичный цикл краулинга)
Процесс обхода веб-сайтов в Nutch организован в виде последовательных этапов (циклов), называемых батчами (batches):
- Inject — начальная загрузка в базу краулера (CrawlDB) одного или нескольких URL-адресов, с которых начинается обход.
- Generate — на основе CrawlDB формируется список страниц для загрузки в текущей итерации. При этом учитывается вежливость (politeness) — задержки между запросами к одному домену.
- Fetch — загрузчик получает список URL и выполняет HTTP-запросы к серверам. Загруженные страницы сохраняются во временное хранилище (Content) вместе с HTTP-заголовками и метаданными.
- Parse — парсер извлекает из загруженного контента текст, выявляет ссылки на другие страницы (outlinks), а также метаданные (заголовки, ключевые слова, язык страницы).
- Updatedb — результаты парсинга (новые ссылки, статусы загрузки) записываются обратно в CrawlDB. Это позволяет системе динамически расширять область поиска.
- Index (или Index Dedup) — на основе текстов и метаданных строится поисковый индекс во внешней системе (Solr или Elasticsearch).
Цикл повторяется заданное количество раз (например, 10 или 20 итераций), после чего выполняется окончательная индексация.
Хранение данных
Nutch использует две основные базы данных на базе Hadoop:
- CrawlDB — хранит информацию о состоянии каждого обнаруженного URL (загружен, ошибка, не проверен), а также время последнего доступа и метаданные.
- LinkDB — хранит все ссылки между страницами (внешние и внутренние). Эта база используется для расчёта PageRank на этапе пост-обработки.
Обе базы данных представляют собой последовательные файлы (SequenceFiles) или файлы MapFile, совместимые с экосистемой Hadoop.
Классификация и версии
По состоянию на начало 2025 года поддерживаются две параллельные ветки:
| Версия | Базовая технология | Тип развёртывания | Рекомендуемый сценарий |
|---|---|---|---|
| 1.x | Standalone (одиночный сервер) | Одиночный сервер или кластер на Java | Типовые задачи среднего объёма (до 10-20 млн страниц), быстрое развёртывание |
| 2.x | Hadoop YARN / AKKA | Распределённый кластер | Сверхбольшие объёмы (сотни миллионов страниц), гибкое масштабирование |
Версия 1.x является более зрелой, документированной и стабильной. Версия 2.x предлагает лучшую масштабируемость, но требует настройки полноценного кластера Hadoop и имеет больше проблем с совместимостью.
Применение
Основные области использования
Nutch применяется в следующих сценариях:
- Корпоративный поиск — построение полнотекстового индекса по документам внутри интранета (веб-сайты, файловые хранилища, wiki-системы).
- Академические исследования — сбор датасетов веб-страниц для анализа лингвистических, социальных или экономических феноменов.
- Системы анализа контента — автоматический мониторинг новостных сайтов, блогов или форумов.
- Создание поисковых систем для специфических доменов — например, для сайтов на русском языке с нестандартной структурой или для сайтов, заблокированных для коммерческих поисковиков.
- Архивация веб-сайтов — снятие копий страниц для долговременного хранения.
Ограничения
По сравнению с коммерческими аналогами (Google, Yandex, Bing) Nutch имеет ряд ограничений:
- Производительность — для обработки десятков миллионов страниц требуется значительные вычислительные мощности и время. Коммерческие решения часто используют проприетарные алгоритмы, существенно превосходящие Nutch по скорости.
- Качество индексации — алгоритмы ранжирования (PageRank) требуют ручной настройки и не достигают точности результатов больших поисковых систем.
- Обработка динамического контента — Nutch изначально ориентирован на статичные HTML-страницы. Для обхода современных одностраничных приложений (SPA) и сайтов с JavaScript требуется интеграция с инструментами автоматизации браузера (например, Selenium или Puppeteer), что добавляет сложность.
- Юридические риски — автоматический обход сайтов может нарушать их условия использования (terms of service) или законы о защите персональных данных. В РФ, а также в ряде других стран требуется получение явного согласия владельца сайта на сканирование.
Аналоги и конкуренты
Среди открытых аналогов Nutch выделяются:
- Apache StormCrawler — более лёгкий и современный фреймворк на основе Apache Storm, Апача Фонд (Apache Software Foundation). Отличается высокой производительностью на небольших кластерах.
- Heritrix — веб-архиватор, разработанный Internet Archive (некоммерческая организация). Ориентирован на максимально полный сбор контента, а не на поисковую индексацию.
- Scrapy (Python-библиотека) — популярен среди разработчиков, использующих Python, но менее масштабируем для объёмов в сотни миллионов страниц без внешних инструментов.
- GNU Wget — утилита командной строки, предназначенная для однократного или периодического скачивания содержимого одного сайта. Не поддерживает распределённую индексацию.
Интересные факты
- Nutch является прямым предшественником Apache Hadoop: Дуг Каттинг создал Hadoop, отталкиваясь от опыта работы над Nutch, где возникла необходимость в распределённой файловой системе и модели MapReduce.
- Первоначальный прототип Nutch был написан на Java, но для высоконагруженного парсинга использовались скрипты на Perl и C.
- В 2014 году версия 1.6 вошла в состав коммерческого продукта «ИнфоПоиск» (Санкт-Петербург) в качестве основы для корпоративного поиска.
- По состоянию на 2025 год, в мире числится более 200 активных пользовательских инсталляций Nutch в промышленной эксплуатации, преимущественно в Европе и Азии.
Источники
- Apache Nutch Official Documentation (nutch.apache.org)
- Cutting, D., & Cafarella, M. (2004). Nutch: A Flexible, Open Source Web Search Engine. Proceedings of the 27th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval.
- Введение в Apache Nutch. Хабр, 2012.
- Основы работы с веб-краулером Nutch. Журнал «Системный администратор», 8/2014.
- "Nutch 2.3: The Next Generation Web Crawler". Apache Blog, 2019.
- Документация Apache Hadoop YARN.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →