1、从网络端口采集数据输出到控制台
下载与安装见:https://blog.csdn.net/weixin_35353187/article/details/83038297
一个简单的socket 到 console配置
# 定义这个agent中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置source组件:r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = bigdata01
a1.sources.r1.port = 44444
# 描述和配置sink组件:k1
a1.sinks.k1.type = logger
# 描述和配置channel组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置source channel sink之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
启动flume:
bin/flume-ng agent -c conf -f myconf/socket-console.conf -n a1 -Dflume.root.logger=INFO,console
监听44444端口:
telnet anget-hostname port (telnet localhost 44444)
监听结果:
2、从网络端采集数据输出到文件
# 定义这个agent中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置source组件:r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = hadoop01
a1.sources.r1.port = 44444
# 描述和配置sink组件:k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = /usr/local/apache-flume-1.7.0-bin/flumelog
# 描述和配置channel组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置source channel sink之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注:a1.sinks.k1.sink.directory = /usr/local/apache-flume-1.7.0-bin/flumelog中文件目录必须是存在的,不存在会报错
启动Flume:
bin/flume-ng agent -c conf -f myconf/netcat-disk.conf -n a1 -Dflume.root.logger=INFO,console
给监听的端口发送数据:
telnet hadoop01 44444
会发现此时控制台并没有输出信息,而且存入了文件中
3、从本地目录写入到HDFS
# 定义这个agent中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置source组件:r1
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /usr/local/apache-flume-1.7.0-bin/flumedata
# 描述和配置sink组件:k1
#写hdfshdfs必须是配置好环境变量的
a1.sinks.k1.type = hdfs
#写入到hdfs的目录
a1.sinks.k1.hdfs.path = /flumedata/events
#写文件的前缀
a1.sinks.k1.hdfs.filePrefix = events-
#滚动时间
a1.sinks.k1.hdfs.rollInterval = 60
#滚动大小
a1.sinks.k1.hdfs.rollSize = 1048576
#滚动数量
a1.sinks.k1.hdfs.rollCount = 100
# 描述和配置channel组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置source channel sink之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注:a1.sinks.k1.hdfs.path = /flumedata/events写入到HDFS的目录不需要自己创建
启动Flume:
bin/flume-ng agent -c conf -f myconf/directory-hdfs.conf -n a1 -Dflume.root.logger=INFO,console
左边在传
上传成功
采集成功以后,文件名后缀变了.COMPLETED
注:如果再往目录里面放一个同名文件,会报错,不会上传到HDFS
4、Flume监控一个文件实时写到Kafka
# 定义这个agent中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置source组件:r1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/datas/tmp.log
# 描述和配置sink组件:k1
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = flumetopic
a1.sinks.k1.kafka.bootstrap.servers = hadoop01:9092,hadoop02:9092,hadoop03:9092,hadoop04:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
a1.sinks.ki.kafka.producer.compression.type = snappy
# 描述和配置channel组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置source channel sink之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
while true;
> do
> echo `date`>>/opt/datas/tmp.log
> sleep 0.5
> done
注:这里连接了四个机器,第一个用于启动Flume,第二台用于查看是否创建主题,第三台用于不断给tmp.log文件追加内容,用于Kafka消费,第四台用于查看文件大小,以证明文件在一直写入
启动Flume:
bin/flume-ng agent -c conf -f myconf/exec-kafka.conf -n a1 -Dflume.root.logger=INFO,console
启动成功,且已创建Topic为配置文件中flumeTopic。
接下来,给文件tmp.log一直追加内容。可以看到文件大小一直在变大,说明追加成功
消费Kafka中的数据:
kafka-console-consumer.sh --bootstrap-server hadoop01:9092 --from-beginning --topic flumeTopic
消费成功,且数据为实时时间,说明Flume成功的将文件写入到Kafka