首页 > 解决方案 > 为什么水槽无法使用启动脚本运行?

问题描述

当我运行命令时,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]#

我在网上找了很久。但是没有用。请帮助或尝试提供一些解决此问题的想法。

标签: apache-sparkflume

解决方案


如果你的情况和我在 Ubuntu 机器上运行的情况类似,你可以试试我试过的方法,成功了。

你可能会删除guava11*.jarflume的lib文件夹中的默认值,对吧?
一般情况下,删除这个jar后,flume会在hadoop中寻找$HADOOP_HOME并使用guava。然后你去复制guava*.jarhadoop到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/profileand /etc/profile.d/*.shand ~/.bashrcand ~/.profileor other文件的加载顺序。Ubuntu 查找环境变量的步骤似乎与 CentOS 不同。我对细节不是很精通。我只知道有这样的顺序。在 CentOS 和 Ubuntu 上更改相同位置的环境变量,ssh 到远程机器执行某个命令,可能一个可以找到该命令,另一个可能找不到该命令。


推荐阅读