почему не удалось запустить flume со сценарием запуска?

#apache-spark #flume

#apache-spark #flume

Вопрос:

Flume успешно запускается при запуске command

 /opt/module/flume/bin/flume-ng agent --conf /opt/module/flume/conf --conf-file /opt/module/flume/conf/file_flume_kafka.conf --name a1 -Dflume.root.logger=INFO,console
  
 [root@master bin]# jps
12193 Application
10259 QuorumPeerMain
12310 Jps
10751 Kafka
  

Но когда я запускаю сценарий запуска, который я написал, он не работает. Сценарий выглядит следующим образом:

 #! /bin/bash
case $1 in
"start"){
        for i in master slaves01
        do
                echo " --------启动 $i 采集flume-------"
                ssh $i "/opt/module/flume/bin/flume-ng agent --conf /opt/module/flume/conf --conf-file /opt/module/flume/conf/file_flume_kafka.conf --name a1 -Dflume.root.logger=INFO,console"
                echo "-------运行完命令-----------"
            done
};;
"stop"){
        for i in master slaves01
        do
                echo " --------停止 $i 采集flume-------"
                ssh $i "ps -ef | grep file_flume_kafka | grep -v grep |awk '{print $2}' | xargs kill"
        done
};;
esac
  

Дисплей консоли:

 [root@master flume]# f1.sh start
    --------启动 master 采集flume-------
Info: Sourcing environment configuration script /opt/module/flume/conf/flume-env.sh
Info: Including Hive libraries found via () for Hive access
  exec /opt/module/jdk1.8.0_144/bin/java -Xmx20m -Dflume.root.logger=INFO,console -cp '/opt/module/flume/conf:/opt/module/flume/lib/*:/lib/*' -Djava.library.path= org.apache.flume.node.Application --conf-file /opt/module/flume/conf/file_flume_kafka.conf --name a1
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Lists
        at org.apache.flume.node.Application.main(Application.java:346)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Lists
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more
-------运行完命令-----------
    --------启动 slaves01 采集flume-------
Info: Sourcing environment configuration script /opt/module/flume/conf/flume-env.sh
Info: Including Hive libraries found via () for Hive access
  exec /opt/module/jdk1.8.0_144/bin/java -Xmx20m -Dflume.root.logger=INFO,console -cp '/opt/module/flume/conf:/opt/module/flume/lib/*:/lib/*' -Djava.library.path= org.apache.flume.node.Application --conf-file /opt/module/flume/conf/file_flume_kafka.conf --name a1
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Lists
        at org.apache.flume.node.Application.main(Application.java:346)
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.Lists
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more
-------运行完命令-----------
  

Введите «jps»:

 [root@master bin]# jps
10259 QuorumPeerMain
12539 Jps
10751 Kafka
[root@master bin]#
  

Я долго ищу в сети. Но бесполезно. Пожалуйста, помогите или попробуйте дать несколько идей, как это решить.

Ответ №1:

Если ваша ситуация похожа на мою, запущенную на компьютере с Ubuntu, вы можете попробовать метод, который я успешно опробовал.

Вы могли бы удалить значение по умолчанию guava11*.jar в папке lib flume, верно?
При обычных обстоятельствах, после удаления этого jar, flume будет искать $HADOOP_HOME и использовать guava в hadoop. затем вы переходите к копированию guava*.jar в hadoop в flume,

 cp /opt/module/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/module/flume-1.9.0/lib/
  

все должно быть в порядке, это может быть проблема переменных среды.


Переменные среды Linux, для входа в систему и для интерактивного доступа, определяют порядок загрузки /etc/profile и /etc/profile.d/*.sh и ~/.bashrc и ~/.profile или других файлов. Шаги для Ubuntu по поиску переменных среды, похоже, отличаются от CentOS. Я не очень разбираюсь в специфике. Я просто знаю, что есть такая последовательность. Измените переменную среды в том же месте на CentOS и Ubuntu, подключившись по ssh к удаленному компьютеру для выполнения определенной команды, возможно, один сможет найти команду, другой может не найти команду.