Flume的一些操作

参数 作用 举例
–conf 或 -c 指定配置文件夹,包含flume-env.sh和log4j的配置文件 –conf conf
–conf-file 或 -f 配置文件地址 –conf-file conf/flume.conf
–name 或 -n agent名称 –name a1
-z zookeeper连接字符串 -z zkhost:2181,zkhost1:2181
-p zookeeper中的存储路径前缀 -p /flume

flume结合kafka:

将目录下的文件通过flume,传递给kafka的指定topic消费
步骤:
1.开启zookeeper
./bin/zkServer.sh start 
2.开启kafka服务
./bin/kafka-server-start.sh config/server.properties &
./bin/kafka-server-start.sh config/server-1.properties &
./bin/kafka-server-start.sh config/server-2.properties &
3.创建topic
./bin/kafka-topics.sh --create --zookeeper node:2181 --replication-factor 2 --partitions 2 --topic kafka-flume
4.启动flume
./bin/flume-ng agent --conf conf --conf-file conf/kafka-conf.properties --name agent -Dflume.root.logger= INFO,console
5.开启kafka的消费端
./bin/kafka-console-consumer.sh --zookeeper node:2181 --topic kafka-flume --from-beginning
6.在指定目录下创建文件
vi abc 写入一些数据
7.在消费端会出现写入的数据内容

Flume几个不同的source.type:(自己理解)1.avro:使用avro序列化,监听某个端口。2.spoolDir:监听某个文件下的所有文件信息,如果文件夹下有新增文件可以被识别,并重命名。3.exec:监听某个文件,可以往文件末尾新增数据,都可以被Flume识别。

当sources是spoolDir的时候,如果多次写一个文件,会报错,提示文件名重复,然后flume停止工作,比较好的做法是使用mv方法把文件移到监听的文件夹中。
使用spoolDir的时候,不能够往监控目录中加同名文件。否则报错。
spoolDir:要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。
如果一直在一个文件后追加数据,使用source为exec,这样子每添加数据会被flume自动采集到hdfs。
exec常用于日志的抽取,spoolDir用于文件的抽取。exec可以监听文件添加了哪些信息,spoolDir监听文件目录下多了哪些文件。

flume结合kafka中event的配置:(flume的source监听目录下的文件,sink对接kafka的生产者,打开kafka的消费者就可以消费这些数据)
agent.sources = r1
agent.channels = c1
agent.sinks = s1

agent.sources.r1.type = spooldir
agent.sources.r1.spoolDir = /opt/test/logs/data
agent.sources.r1.fileHeader = true

agent.sinks.s1.type = org.apache.flume.sink.kafka.KafkaSink
agent.sinks.s1.topic = kafka-flume
agent.sinks.s1.brokerList = node:9092
agent.sinks.s1.requiredAcks = 1

agent.sinks.s1.batchSize = 2

flume读取本地文件目录,将本地文件上传到hdfs:(使用的source.type是exec,监听某一文件的变化,sink指定hdfs的目录,将消息写入目录下的文件中)
配置:
#tier1.sources.source1.type=avro
#tier1.sources.source1.bind=node
#tier1.sources.source1.port=44444
#tier1.sources.source1.channels=channel1

#tier1.sources.source1.type=spooldir
tier1.sources=source1
tier1.channels=channel1
tier1.sinks=sink1

#tier1.sources.source1.type=avro
#tier1.sources.source1.bind=node
#tier1.sources.source1.port=44444
#tier1.sources.source1.channels=channel1

#tier1.sources.source1.type=spooldir
#tier1.sources.source1.spoolDir=/opt/test/logs
tier1.sources.source1.type = exec
tier1.sources.source1.command = tail -F /opt/test/logs/log.log
tier1.sources.source1.channels=channel1

tier1.channels.channel1.type=memory
tier1.channels.channel1.capacity=10000
tier1.channels.channel1.transactionCapacity=1000
tier1.channels.channel1.keep-alive=30

tier1.sinks.sink1.channel=channel1
tier1.sinks.sink1.type = hdfs
tier1.sinks.sink1.hdfs.path = hdfs://node:9000/user/flume
tier1.sinks.sink1.hdfs.writeFormat = Text
tier1.sinks.sink1.hdfs.fileType = DataStream
tier1.sinks.sink1.hdfs.rollInterval = 0
tier1.sinks.sink1.hdfs.rollSize = 0
tier1.sinks.sink1.hdfs.rollCount = 0
tier1.sinks.sink1.hdfs.filePrefix = localhost-%Y-%m-%d
tier1.sinks.sink1.hdfs.useLocalTimeStamp = true
tier1.sinks.sink1.hdfs.idleTimeout = 60

打包:web项目中,如果循环依赖的话,可以删除art下的war包,再重新编译。
maven打包的时候:log4j-over-slf4j.jar 和 slf4j-log4j12.jar 在同一个classpath下就会出现这个错误。
不使用jar解压包:使用jar解压直接在当前文件夹下解压,生成好多文件。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值