Наконец, я запустил задания Nutch MapReduce (Injector, Generator и Fetcher), используя скрипт bin / hadoop без изменений по отношению к Nutch.Проблема связана с классом org.apache.hadoop.util.RunJar
(классом, который запускает jar задания hadoop при вызове hadoop jar <jobfile> jobClass
), который добавляет к classpath из файла jar задания только подкаталоги classes/
и lib/
, а задания Nutch имеют plugins
подпапка также содержит плагины, используемые во время выполнения.Я попытался переопределить свойство mapreduce.job.jar.unpack.pattern
до значения (?:classes/|lib/|plugins/).*
, чтобы класс RunJar добавил также плагины к пути к классам, но это не сработало.
После просмотра кода Nutch я увидел, что он использует свойство plugin.folders
, которое определяет, где можно найти плагины.Итак, что я сделал, и это сработало, скопировав подпапку плагинов из jar задания на общий диск и установив свойство plugin.folders
для этого пути каждый раз, когда я запускаю задание Nutch.Например:
hadoop jar <path to nutch job file> org.apache.nutch.fetcher.Fetcher -conf ../conf/nutch-default.xml -Dplugin.folders=<path to plugins folder> <segment path>
В файле conf/nutch-default.xml
я установил некоторые свойства, такие как имя агента, хост и порт прокси, время ожидания, ограничение содержимого и т. Д.
Iтакже попытался создать Jar Job Nar с подпапкой plugins в подпапке lib, а затем установить для свойства plugin.folders
значение lib/plugins
, но это не сработало ....