Ошибка при запуске примера навеса в mahout

Я хочу запустить пример сени в mahout, но я получаю сообщение об ошибке:

Предупреждение: $HADOOP_HOME устарела. Запуск на hadoop с использованием /usr/local/hadoop/bin/hadoop и HADOOP_CONF_DIR= MAHOUT-JOB: /usr/local/mahout-distribution-0.7/examples/target/mahout-examples-0.7-> job.jar Предупреждение: $HADOOP_HOME устарела.

Исключение в потоке "main" java.lang.NoClassDefFoundError: com/google/common/io/Closeables в org.apache.mahout.driver.MahoutDriver.loadProperties(MahoutDriver.java:214) в org.apache.mahout.driver.MahoutD Домен) в java.lang.reflect.Method.invoke(Method.java:597) в org.apache.hadoop.util.RunJar.main(RunJar.java:160) Причина: java.lang.ClassNotFoundException: com.google.common.io.Closeables на java.net.URLClassLoader$1.run(URLClassLoader.java:202) на java.security.AccessController.doPrivileged(собственный метод) на java.net.URLClassLoader.findClass(URLClassLoader.java:190) на java.lang.ClassLoader.loadClass(ClassLoader.java:306) в sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) в java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... еще 7

в этом случае в файле /usr/local/mahout-distribution-0.7/examples/target/dependency есть файл guava-r09.jar, в который входит класс com / google / common / io / Closeables и его зависимость находится в файле pom.xml.

что я могу сделать, чтобы решить эту ошибку?

1 ответ

К сожалению, Hadoop и Mahout - беспорядок. Вы, вероятно, в банке ада.

Я не думаю, что на самом деле стоит много пробовать. Если у вас нет данных масштаба Google, реализация, не относящаяся к Mapreduce, вероятно, будет намного быстрее. То есть: пока ваши данные помещаются в память одного узла, предпочитайте одноузловое решение.

В моих экспериментах кластер Mahout с 10-15 процессорами будет примерно в 5 раз медленнее, чем хорошая реализация с одним процессором. Потому что все эти "фреймворки" и диско-ориентированные операции Hadoop и Mahout сопряжены со значительными затратами. Так что, если ваши данные не размером с терабайт, не используйте их.

Теперь к более точному ответу:

Вы находитесь в распределенном мире. Недостаточно, если этот файл.jar доступен на вашем компьютере. Из-за дизайна Hadoop он должен быть загружен на каждый хост, который участвует в ваших вычислениях. mahout Предполагается, что команда позаботится об этом (определит и загрузит все необходимые файлы.jar), но иногда она не может правильно определить путь к классам. И, к сожалению, этот процесс беспорядок, и его трудно понять или отладить.

Предупреждение: $HADOOP_HOME устарела.

Относитесь к этому предупреждению серьезно. Как в настоящее время правильно определить путь к классам?

Другие вопросы по тегам