为什么flume不能用启动脚本运行?

4sup72z8  于 2021-05-19  发布在  Spark
关注(0)|答案(1)|浏览(768)

运行命令时Flume运行成功

/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]#

我在网上找了很久。但没用。请帮助或尝试给出一些解决方法。

zlhcx6iw

zlhcx6iw1#

如果你的情况和我在ubuntu机器上运行的情况相似,你可以尝试我成功尝试的方法。
您可以删除默认值 guava11*.jar 在flume的lib文件夹里,对吗?
在正常情况下,删除这个jar之后,flume会查找 $HADOOP_HOME 在hadoop中使用Guava。然后你去复印 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到远程机器上执行某个命令,可能一个可以找到该命令,另一个可能找不到该命令。

相关问题