Не могу заставить Apache Nutch сканировать - разрешения и JAVA_HOME подозреваются

Я пытаюсь запустить базовое сканирование в соответствии с NutchTutorial:

bin/nutch crawl urls -dir crawl -depth 3 -topN 5

Итак, у меня все Nutch установлен и настроен с помощью Solr. Я установил свой $JAVA_HOME в моем .bashrc в /usr/lib/jvm/java-1.6.0-openjdk-amd64,

Я не вижу никаких проблем, когда я бегу bin/nutch из домашнего каталога NUTCH, но когда я пытаюсь запустить сканирование, как описано выше, я получаю следующую ошибку:

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /usr/share/nutch/logs/hadoop.log (Permission denied)
        at java.io.FileOutputStream.openAppend(Native Method)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
        at org.apache.log4j.FileAppender.setFile(FileAppender.java:290)
        at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:164)
        at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:216)
        at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:133)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:97)
        at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:689)
        at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:647)
        at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:544)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:440)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:476)
        at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
        at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
        at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
        at org.apache.nutch.crawl.Crawl.<clinit>(Crawl.java:43)
log4j:ERROR Either File or DatePattern options are not set for appender [DRFA].
solrUrl is not set, indexing will be skipped...
crawl started in: crawl
rootUrlDir = urls
threads = 10
depth = 3
solrUrl=null
topN = 5
Injector: starting at 2013-06-28 16:24:53
Injector: crawlDb: crawl/crawldb
Injector: urlDir: urls
Injector: Converting injected urls to crawl db entries.
Injector: total number of urls rejected by filters: 0
Injector: total number of urls injected after normalization and filtering: 1
Injector: Merging injected urls into crawl db.
Exception in thread "main" java.io.IOException: Job failed!
        at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1357)
        at org.apache.nutch.crawl.Injector.inject(Injector.java:296)
        at org.apache.nutch.crawl.Crawl.run(Crawl.java:132)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.nutch.crawl.Crawl.main(Crawl.java:55)

Я подозреваю, что это может быть связано с правами доступа к файлам, так как я должен запустить sudo почти на всем на этом сервере, но если я запускаю ту же команду сканирования с sudo Я получил:

Error: JAVA_HOME is not set.

Так что я чувствую, что у меня здесь ситуация с ловушкой-22. Должен ли я быть в состоянии выполнить эту команду с sudoили есть что-то еще, что мне нужно сделать так, чтобы мне не нужно было запускать это с sudo и это сработает, или здесь что-то еще происходит?

2 ответа

Решение

Кажется, что, как обычный пользователь, у вас нет разрешения на запись в /usr/share/nutch/logs/hadoop.log, что имеет смысл как функция безопасности.

Чтобы обойти это, создайте простой скрипт bash:

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
bin/nutch crawl urls -dir crawl -depth 3 -topN 5

Сохранить как nutch.shзатем запустите sudo:

sudo sh nutch.sh

Ключом к решению этой проблемы является добавление JAVA_HOME переменная к вашему sudo среда. Например, введите env а также sudo env и вы увидите, что JAVA_HOME не установлен для sudo, Чтобы исправить это, вам нужно будет добавить путь.

  1. Бежать sudo visudo отредактировать свой /etc/sudoers файл. (Не используйте стандартный текстовый редактор. Это специальный текстовый редактор vi, который проверяет синтаксис перед тем, как сохранить его.)
  2. Добавьте эту строку:

    Defaults env_keep+="JAVA_HOME"
    

    в конце Defaults env_keep раздел.

  3. перезагружать
Другие вопросы по тегам