apache-spark - 为什么水槽无法使用启动脚本运行?
问题描述
当我运行命令时,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]#
我在网上找了很久。但是没有用。请帮助或尝试提供一些解决此问题的想法。
解决方案
如果你的情况和我在 Ubuntu 机器上运行的情况类似,你可以试试我试过的方法,成功了。
你可能会删除guava11*.jar
flume的lib文件夹中的默认值,对吧?
一般情况下,删除这个jar后,flume会在hadoop中寻找$HADOOP_HOME
并使用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
and /etc/profile.d/*.sh
and ~/.bashrc
and ~/.profile
or other文件的加载顺序。Ubuntu 查找环境变量的步骤似乎与 CentOS 不同。我对细节不是很精通。我只知道有这样的顺序。在 CentOS 和 Ubuntu 上更改相同位置的环境变量,ssh 到远程机器执行某个命令,可能一个可以找到该命令,另一个可能找不到该命令。
推荐阅读
- java - java-每隔一段时间调用一个函数
- python - 向用户询问文件名,然后将该文件名作为参数传递?
- python - 如何处理 ValueError?
- javascript - Angular 循环依赖解决方案
- python - pd.read_html 读取复杂表
- android - android.intent.action.VIEW 和 mimeType 在清单中有“缺少 URL”错误
- visual-studio-2017 - 为什么我不能在 Windows 通用应用程序中引用 .Net Core 1.0 程序集?
- amazon-web-services - 单个 t2.micro 可以处理 40 多个用户的 nextcloud 吗?
- ms-access - Access 2016 代码正在插入重复记录
- c - Getopt:与多个 optargs 一起使用的标志