How to Use Nutch From Java, Not From the Command Line

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Apache Nutch - это фреймворк с открытым исходным кодом, написанный на Java. Его целью является помощь в индексации набора веб-сайтов (или всемирной паутины), получение контента и его подготовка для индексации, скажем, Solr. Довольно полезный фреймворк, если спросите меня, однако он разработан в основном для использования из командной строки. Вы скачиваете архив, разархивируете его и запускаете двоичный файл. Он выполняет обход и вы получаете данные. Однако у меня есть проект, в котором этот обход должен быть встроен в мое собственное Java-приложение. Я понял, что полное отсутствие документации по этому вопросу. Вот почему я написал этот блог. В нем объясняется, как использовать Nutch из Java, а не из командной строки.

Я буду говорить о Nutch 1.15. Есть более поздняя версия 2+, но я не смог заставить ее работать. Если вы знаете, как это сделать, оставьте свой комментарий ниже.

Я бы рекомендовал вам прочитать этот учебник сначала, чтобы понять, как Nutch работает из командной строки. Ну, мне он в любом случае помог.

Теперь посмотрим, как мы можем использовать Nutch без командной строки. Во-первых, вам понадобятся следующие зависимости в вашем pom.xml (Nutch использует Apache Hadoop, вот почему нам нужна вторая зависимость):

Далее, это ваш код на Java, который выполняет всю работу:

Обратите внимание, что Path здесь не является Path из JDK. Это Path из Hadoop. Не спрашивайте меня, почему.

Этот алгоритм кажется достаточно простым, однако есть одна хитрость. Чтобы Nutch работал, ему нужно несколько плагинов, которые являются отдельными JAR-пакетами и не включены в его стандартный JAR. Они находятся в его бинарном дистрибутиве и имеют довольно большой размер (более 250 МБ в Nutch 1.15). Nutch ожидает, что вы скачаете весь дистрибутив, распакуете его и запустите бинарный файл nutch, который будет работать с предоставленными плагинами.

Что можно сделать, когда мы находимся в Java, а не в командной строке? Вот что я предлагаю:

Этот плагин Maven будет загружать полную двоичную дистрибуцию Nutch и извлекать ее в target/apache-nutch-1.15. Плагины будут находиться в target/apache-nutch-1.15/plugins. Единственное, что нам остается сделать, это установить системное свойство для модульного теста:

На самом деле, у нас есть еще одна вещь, которую мы должны сделать: скопировать содержимое каталога conf из их двоичного распределения в наш каталог src/main/resources. Там много файлов, включая самый важный nutch-default.xml. Все они должны быть доступны в classpath, в противном случае Nutch будет жаловаться во многих местах и не сможет загрузить Configuration.

Вы можете увидеть, как все это работает вместе в этом репозитории GitHub, созданном мной для иллюстрации примера: yegor256/nutch-in-java.

Если у вас есть вопросы или предложения, не стесняйтесь отправлять pull request или комментировать здесь.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-15 at 06:39

sixnines availability badge   GitHub stars