配置:
上传,解压
进入conf
在flume.env.sh下面引入JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
conf文件夹同级创建一个jobconf文件夹
案例一:
开始编写配置文件flume-telnet.conf
#定义Agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 #定义source a1.sources.r1.type = netcat a1.sources.r1.bind = bigdata166 a1.sources.r1.port = 44445 # 定义sink a1.sinks.k1.type = logger # 定义memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # 双向链接 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
开启命令:
/opt/module/flume-1.8.0/bin/flume-ng agent \ --conf /opt/module/flume-1.8.0/conf/ \ --name a1 \ --conf-file /opt/module/flume-1.8.0/jobconf/flume-telnet.conf \ -Dflume.root.logger==INFO,console #flume-ng 启动命令 #--conf 配置所在的目录 #--name agent的名字 #--conf-file 配置文件所在的路径 #-Dflume.root.logger==INFO,console 控制台打印
安装端口测试工具:
yum -y install telnet # 测试端口是否被占用: netstat -tunlp | grep 44445 # 查看端口是否打开: netstat -anp |grep 8000 #打开发送信息界面: telnet bigdata166 44445 其它:安装netstat: yum install net-tools
测试结果:
案例二:
实时读取文件到HDFS:
flume-hdfs.conf
# 1 agent a2.sources = r2 a2.sinks = k2 a2.channels = c2 # 2 source a2.sources.r2.type = exec a2.sources.r2.command = tail -F /opt/Shall a2.sources.r2.shell = /bin/bash -c # 3 sink a2.sinks.k2.type = hdfs a2.sinks.k2.hdfs.path = hdfs://bigdata166:9000/flume/%Y%m%d/%H #上传文件的前缀 a2.sinks.k2.hdfs.filePrefix = logs- #是否按照时间滚动文件夹 a2.sinks.k2.hdfs.round = true #多少时间单位创建一个新的文件夹 a2.sinks.k2.hdfs.roundValue = 1 #重新定义时间单位 a2.sinks.k2.hdfs.roundUnit = hour #是否使用本地时间戳 a2.sinks.k2.hdfs.useLocalTimeStamp = true #积攒多少个Event才flush到HDFS一次 a2.sinks.k2.hdfs.batchSize = 1000 #设置文件类型,可支持压缩 a2.sinks.k2.hdfs.fileType = DataStream #多久生成一个新的文件 a2.sinks.k2.hdfs.rollInterval = 600 #设置每个文件的滚动大小 a2.sinks.k2.hdfs.rollSize = 134217700 #文件的滚动与Event数量无关,用于合并琐碎小文件 a2.sinks.k2.hdfs.rollCount = 0 #最小副本数 a2.sinks.k2.hdfs.minBlockReplicas = 1 # 定义 memory a2.channels.c2.type = memory a2.channels.c2.capacity = 1000 a2.channels.c2.transactionCapacity = 100 #双向链接channel a2.sources.r2.channels = c2 a2.sinks.k2.channel = c2
启动:
/opt/module/flume-1.8.0/bin/flume-ng agent \ --conf /opt/module/flume-1.8.0/conf/ \ --name a2 \ --conf-file /opt/module/flume-1.8.0/jobconf/flume-hdfs.conf
有坑:
flume启动后只看到创建的文件夹,但是使用hadoop fs -cat xxx/* 并没有查到目录
本来以为能创建就说明可以连接,于是就没考虑这个问题。
结果在日志里看到了sink连接失败,重试次数N
然后尝试用hadoop fs -put 命令上传一个文件,结果报错。
重新debug启动namenode 和datanode,然后删除hafs flume文件夹
再次启动flume测试成功拿到数据。
这个问题就和上次一样,datanode的id和namenode的id不同就会导致无法启动。