Я построил кластер Hadoop, в котором 1 главный-ведомый узел, а другой — подчиненный. А теперь я хочу построить канал, чтобы получить весь журнал кластера на главной машине. Однако, когда я пытаюсь установить flume из архива, я всегда получаю: Ошибка: не удалось найти или загрузить основной класс org.apache.flume.node.Application Итак, пожалуйста, помогите мне найти ответ или лучший способ установить flume на моем кластере. огромное спасибо!
Ошибка: не удалось найти или загрузить основной класс org.apache.flume.node.Application — установите flume на версии 1.2.1 для Hadoop.
Ответы (7)
Это в основном из-за FLUME_HOME..
Попробуйте эту команду
$ сбросить FLUME_HOME
Я знаю, что для этого вопроса прошел почти год, но я его видел!
Когда вы устанавливаете свой agnet с помощью sudo bin/flume-ng.... обязательно укажите файл, в котором находится конфигурация агента.
--conf-file flume_Agent.conf -> -f conf/flume_Agent.conf
Это помогло!
похоже, что вы запускаете flume-ng в папке /bin flume после сборки в /flume-ng-dist/target/apache-flume-1.5.0.1-bin /apache-flume-1.5.0.1-bin запустите flume-ng в этом
Я полагаю, вы пытаетесь запустить flume из cygwin на окнах? Если это так, то у меня была аналогичная проблема. Проблема может быть связана со скриптом flume-ng.
Найдите следующую строку в bin/flume-ng:
$EXEC java $JAVA_OPTS $FLUME_JAVA_OPTS "${arr_java_props[@]}" -cp "$FLUME_CLASSPATH" \
-Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" $*
и замените его на это
$EXEC java $JAVA_OPTS $FLUME_JAVA_OPTS "${arr_java_props[@]}" -cp `cygpath -wp "$FLUME_CLASSPATH"` \
-Djava.library.path=`cygpath -wp $FLUME_JAVA_LIBRARY_PATH` "$FLUME_APPLICATION_CLASS" $*
Обратите внимание, что пути были заменены каталогами Windows. Java не сможет найти пути к библиотекам из путей cygdrive, и нам придется преобразовать их в правильные пути Windows, где это применимо.
Возможно, вы используете исходные файлы, вам сначала следует скомпилировать исходный код и сгенерировать двоичный код, а затем внутри каталога двоичных файлов вы можете выполнить: bin/flume-ng agent --conf ./conf/ -f conf/flume.conf -Dflume.root.logger=DEBUG,console -n agent1. Вы можете следить за всей этой информацией: https://cwiki.apache.org/confluence/display/FLUME/Getting+Started
code
- person Richard Erickson; 30.04.2015
У меня была такая же проблема раньше, это просто из-за того, что FLUME_CLASSPATH не установлен
лучший способ отладки — просмотреть запущенную команду java и убедиться, что flume lib включена в CLASSPATH
(-cp
),
Как и в следующей команде, он ищет /lib/*
, где находятся flume-ng-*.jar
, но это неверно, потому что в /lib
ничего нет, в этой строке -cp '/staging001/Flume/server/conf://lib/*:/lib/*'
. Должно быть ${FLUME_HOME}/lib
.
usr/lib/jvm/java-1.8.0-ibm-1.8.0.3.20-1jpp.1.el7_2.x86_64/jre/bin/java -Xms100m -Xmx500m $'-Dcom.sun.management.jmxremote\r' \
-Dflume.monitoring.type=http \
-Dflume.monitoring.port=34545 \
-cp '/staging001/Flume/server/conf://lib/*:/lib/*' \
-Djava.library.path= org.apache.flume.node.Application \
-f /staging001/Flume/server/conf/flume.conf -n client
Итак, если вы посмотрите на flume-ng
скрипт, Есть установка FLUME_CLASSPATH
, которая если отсутствует, то это установка на основе FLUME_HOME
.
# prepend $FLUME_HOME/lib jars to the specified classpath (if any)
if [ -n "${FLUME_CLASSPATH}" ] ; then
FLUME_CLASSPATH="${FLUME_HOME}/lib/*:$FLUME_CLASSPATH"
else
FLUME_CLASSPATH="${FLUME_HOME}/lib/*"
fi
Поэтому убедитесь, что установлена любая из этих сред. С набором FLUME_HOME
(у меня systemd
)
Environment=FLUME_HOME=/staging001/Flume/server/
Вот рабочий java exec.
/usr/lib/jvm/java-1.8.0-ibm-1.8.0.3.20-1jpp.1.el7_2.x86_64/jre/bin/java -Xms100m -Xmx500m \
$'-Dcom.sun.management.jmxremote\r' \
-Dflume.monitoring.type=http \
-Dflume.monitoring.port=34545 \
-cp '/staging001/Flume/server/conf:/staging001/Flume/server/lib/*:/lib/*' \
-Djava.library.path= org.apache.flume.node.Application \
-f /staging001/Flume/server/conf/flume.conf -n client