一、引言
该文档的flume版本是1.9.0。同时为了快速上手使用flume,该文将着重讲解一些安装部署配置、后台启动及日志查看,对于Flume组件不做讲解。
二、安装部署
1、配置文件修改
建议将conf/目录下的带.template的文件,拷贝生成对应没有.template的文件(该案例没有修改配置文件的任何内容,这样修改只是为了flume的可读性与后期维护)
cp flume-conf.properties.template flume-conf.properties
cp flume-env.sh.template flume-env.sh
cp flume-env.ps1.template flume-env.ps1
2、flune启动及常用参数
# 启动
bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
commands:
help 显示本帮助信息
agent 启动一个agent进程
avro-client 启动一个用于测试
avro source的客户端(能够发送avro序列化 流)
version 显示当前flume的版本信息
global options: 全局通用选项
--conf,-c <conf> 指定flume的系统配置文件所在目录
--classpath,-C <cp> 添加额外的jar路径
--dryrun,-d 不去真实启动flume agent,而是打印当前命令
--plugins-path <dirs> 指定插件(jar)所在路径
-Dproperty=value 传入java环境参数
-Xproperty=value 传入所需的JVM配置参数
agent options:
--name,-n <name> agent的别名(在用户采集方案配置文件中)
--conf-file,-f <file> 指定用户采集方案配置文件的路径
--zkConnString,-z <str> 指定zookeeper的连接地址
--zkBasePath,-p <path> 指定用户配置文件所在的zookeeper path,比 如:/flume/config
--no-reload-conf 关闭配置文件动态加载
--help,-h display help text
avro-client options:
--rpcProps,-P <file> RPC client properties file with server connection
params
--host,-H <host> avro序列化数据所要发往的目标主机(avro source所在机器)
--port,-p <port> avro序列化数据所要发往的目标主机的端口号
--dirname <dir> 需要被序列化发走的数据所在目录(提前准备好测试数据放在一个文件中)
--filename,-F <file> 需要被序列化发走的数据所在文件(default: std input)
--headerFile,-R <file> 存储header key-value的文件 --help,-h 帮助信息
Either
--rpcProps or both
--host and
--port must be specified.
Note that if <conf> directory is specified, then it is always included first in the classpath.
三、运行方式
1、普通运行方式:
其中-Dflume.root.logger=INFO,console 就表示将运行日志输出到控制台
#该命令是在flume安装目录下与conf同级的目录,建的脚本命令目录执行的
../bin/flume-ng agent -n a1 -c ../conf -f “agent脚本” -Dflume.root.logger=INFO,console
2、常见后台运行
(1)网上常见执行。nohup加在原命令头,&加在原命令尾部
nohup ../bin/flume-ng agent -n a1 -c ../conf -f “agent脚本” -Dflume.root.logger=INFO,console &
- 若是只加 & 也可以后台启动,只是不能生成日志文件了
- 若在原命令头添加上nohup,就可以把原本在console输出的运行日志输出在nohup.out中。
(2)推荐后台运行命令(☆)
../flume-ng agent -c ../conf -f “agent脚本文件” --name a1 &
- 由于在flume在conf 目录中已经有了日志配置文件log4j.properties,里面已经配置了flume启动日志输出位置、日志文件名称、日志级别等输出的日志信息。所以,我们大可不必在通过nohup来输出flume的日志。日志输出的文本的配置在log4j.properties中的下图配置(默认日志的输出路径是在conf/logs中,由于个人习惯将日志修改到与conf同级的目录中,即../logs)。
- 我们可以通过直接修改log4j.properties中的flume.root.logger=INFO,LOGFILE来指定打印日志的输出级别如修改为flume.root.logger=DEBUG,LOGFILE
- 有时候为了方便,也可以直接在启动命令中直接指定输出的日志级别,(注意:设置-Dflume.root.logger的参数与普通运行输出到控制台不同,应是INFO,LOGFILE,而非INFO,console)代码如下:
../bin/flume-ng agent -c ../conf/ -f “Agent脚本文件” --name a1 -Dflume.root.logger=DEBUG,LOGFILE &
四、自定义脚本
1、脚本编写与执行(借鉴该文)
为了执行方便,我们也可以通过自定义脚本实现flume后台的运行(实际上,该脚本就是执行的命令../flume-ng agent -c ../conf -f “agent脚本文件” --name a1 &)。同时方便flume脚本自启动等功能的修改。
#!/bin/bash
#echo "begin start flume..."
#flume的安装根目录(根据自己情况,修改为自己的安装目录)
path=/home/software/apache-flume-1.9.0-bin
echo "flume home is :$path"
#flume的进程名称,固定值(不用修改)
JAR="flume"
#flume的配置文件名称(根据自己的情况,修改为自己的flume配置文件名称)
Flumeconf="Agent"
#定义的soure名称
agentname="a1"
function start(){
echo "begin start flume process ...."
#查找flume运行的进程数
num=`ps -ef|grep java|grep $JAR|wc -l`
#判断是否有flume进程运行,如果有则运行执行nohup命令
if [ "$num" = "0" ] ;then
$path/bin/flume-ng agent -c $path/conf -f $path/data/$Flumeconf --name $agentname &
echo "start success...."
echo "日志路径: $path/logs/flume.log"
else
echo "进程已经存在,启动失败,请检查....."
exit 0
fi
}
function stop(){
echo "begin stop flume process.."
num=`ps -ef|grep java|grep $JAR|wc -l`
#echo "$num...."
if [ "$num" != "0" ];then
#正常停止flume
ps -ef|grep java|grep $JAR|awk '{print $2;}'|xargs kill
echo "进程已经关闭..."
else
echo "服务未启动,无须停止..."
fi
}
function restart(){
#echo "begin stop flume process .."
#执行stop函数
stop
#判断程序是否彻底停止
num='ps -ef|grep java|grep $JAR|wc -l'
#stop完成之后,查找flume的进程数,判断进程数是否为0,如果不为0,则休眠5秒,再次查看,直到进程数为0
while [ $num -gt 0 ];do
sleep 5
num='ps -ef|grep java|grep $JAR|wc -l'
done
echo "flume process stoped,and starting..."
#执行start
start
echo "started...."
}
#case 命令获取输入的参数,如果参数为start,执行start函数,如果参数为stop执行stop函数,如果参数为restart,执行restart函数
case "$1" in
"start")
start
;;
"stop")
stop
;;
"restart")
restart
;;
*)
;;
esac
以上脚本命名成.sh文件,例如我命名为 flume.sh ,存放路径为 /sysware。同时注意修改脚本权限,建议修改chmod -R 755 flume.sh
- 调用start 函数:
sh /sysware/flume.sh start
- 调用 stop命令
sh /sysware/flume.sh stop
- 调用重启命名
sh /sysware/flume.sh restart
以上脚本即可完成flume的start,stop,restart,并且在后台运行的需求。
2、其他
(1)对于执行sh ./xxx.sh出现:“Syntax error: “(” unexpected”的解决方法(☆)
- 代码对于标准bash而言没有错,因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash。
sudo dpkg-reconfigure dash
#在选择项中选No,搞定了!
- 或者不添加sh直接执行./xxx.sh也可以执行shell脚本