1. 問題の説明
コマンドラインにコマンドを入力して Flume を実行して開始します
[root@bigdata111 flume-1.9.0]# bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.logger=info,console
しかし、私が作成したシェルの開始/停止スクリプトを実行すると、機能しません
スクリプトは次のとおりです。
#!/bin/bash
case $1 in
"start"){
for i in bigdata111 bigdata112
do
echo " --------启动 $i 采集flume-------"
ssh $i "nohup /opt/module/flume-1.9.0/bin/flume-ng agent -n a1 -c /opt/module/flume-1.9.0/conf/ -f /opt/module/flume-1.9.0/job/file_to_kafka.conf >/dev/null 2>&1 &"
done
};;
"stop"){
for i in bigdata111 bigdata112
do
echo " --------停止 $i 采集flume-------"
ssh $i "ps -ef | grep file_to_kafka.conf | grep -v grep |awk '{print \$2}' | xargs -n1 kill -9 "
done
};;
esac
理由:
これは大きな問題ではありませんが、環境変数が原因である可能性があります。
Linux 環境変数、ログインするかどうか、および対話的にアクセスするかどうかによって、システムの /etc/profile と /etc/profile.d/*.sh と ~/.bashrc と ~/.profile のロード順序が決まります。または他のファイル。
centos と ubuntu の同じ場所にある環境変数を変更し、ssh でリモート マシンに接続して特定のコマンドを実行すると、一方はコマンドを見つけることができ、もう一方はコマンドを見つけることができない場合があります。
2、解決策
Flume の lib フォルダーに移動し、デフォルトの guava-11*.jar 依存関係を削除します。
[root@bigdata111 lib]# rm -fr guava-11.0.2.jar
通常の状況では、この jar を削除した後、flume は hadoop の $HADOOP_HOME で使用されている guava を探します。
次に、Hadoop の guava*.jar を Flume の lib ファイルにコピーします。
[root@bigdata111 lib]# cp /opt/module/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar /opt/module/flume-1.9.0/lib/
スクリプトを再度実行し、成功したことを確認します