flume数据采集测试+编码问题+运行指令+文件配置

本文介绍了一套基于Flume的数据采集系统配置方法,详细解释了三台机器(元数据采集器、数据缓存器及数据存储器)的具体配置过程,并提供了测试与启动指令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次采用三台机器:
        data1为元数据采集器;
        data2为数据缓存器;
        data3为数据存储器;
data1的配置文件:flume-conf.properties
        #向agent1采集实例中注册一个采集源名称sc1
        agent1.sources = sc1
        #向agent1采集实例中注册一个缓存频道ch1
        agent1.channels = ch1
        #向agent1采集实例中注册一个输出槽 sk1
        agent1.sinks = sk1
        #以下为sc1采集源的配置
        #采集源类型 spooldir
        agent1.sources.sc1.type = spooldir
        #采集到的数据通过ch1缓存频道缓存
        agent1.sources.sc1.channels = ch1
        #采集文件夹
        agent1.sources.sc1.spoolDir = /usr/local/test
        #编码,flume默认为utf-8
        agent1.sources.sc1.inputCharset=utf-8
        #已采集标识  .s
        agent1.sources.sc1.fileSuffix =.s
        #以下为ch1缓冲频道的配置ss
        #缓冲频道类型 file
        agent1.channels.ch1.type = file
        #检查点文件目录
        agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint
        #缓存数据文件夹
        agent1.channels.ch1.dataDirs = /var/flume/data
        #以下为输出槽设置
        #输出槽类型为Avro
        agent1.sinks.sk1.type = avro
        #输出哪个缓存频道中的数据
        agent1.sinks.sk1.channel = ch1
        #输出到哪个主机
        agent1.sinks.sk1.hostname = data1
        #输出到哪个端口
        agent1.sinks.sk1.port = 41414s
data2的配置文件:flume-conf.properties
        #向agent1采集实例中注册一个采集源名称sc1
        agent1.sources = sc1
        #向agent1采集实例中注册一个缓存频道ch1
        agent1.channels = ch1
        #向agent1采集实例中注册一个输出槽 sk1
        agent1.sinks = sk1
        #以下为sc1采集源的配置
        #采集源类型 avro
        agent1.sources.sc1.type = avro
        #采集到的数据通过ch1缓存频道缓存
        agent1.sources.sc1.channels = ch1
        #绑定IP地址
        agent1.sources.sc1.bind = 0.0.0.0
        #监听端口号
        agent1.sources.sc1.port = 41414
        #以下为ch1缓冲频道的配置
        #缓冲频道类型 file
        agent1.channels.ch1.type = file
        #检查点文件目录
        agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint
        #缓存数据文件夹
        agent1.channels.ch1.dataDirs = /var/flume/data
        #以下为输出槽设置
        #输出槽类型为Avro
        agent1.sinks.sk1.type = avro
        #输出哪个缓存频道中的数据
        agent1.sinks.sk1.channel = ch1
        #输出到哪个主机
        agent1.sinks.sk1.hostname = data2
        #输出到哪个端口
        agent1.sinks.sk1.port = 41414
data3的配置文件:flume-conf.properties
        #向agent1采集实例中注册一个采集源名称sc1
        agent1.sources = sc1
        #向agent1采集实例中注册一个缓存频道ch1
        agent1.channels = ch1
        #向agent1采集实例中注册一个输出槽 sk1
        agent1.sinks = sk1
        #以下为sc1采集源的配置
        #采集源类型 avro
        agent1.sources.sc1.type = avro
        #采集到的数据通过ch1缓存频道缓存
        agent1.sources.sc1.channels = ch1
        #绑定IP地址
        agent1.sources.sc1.bind = 0.0.0.0
        #监听端口号
        agent1.sources.sc1.port = 41414

        agent1.sources.sc1.interceptors = i1
        agent1.sources.sc1.interceptors.i1.type = timestamp
        #缓冲频道类型 file
        agent1.channels.ch1.type = file
        #检查点文件目录
        agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint
        #缓存数据文件夹
        agent1.channels.ch1.dataDirs = /var/flume/data
        #加入hdfs文件输出编码---默认的为sequenceFile,输出会有乱码,使用DataStream会直接按照源文件输出
        agent1.sinks.sk1.hdfs.fileType=DataStream
        #以下为输出槽设置
        #输出槽类型为hdfs
        agent1.sinks.sk1.type = hdfs
        #输出哪个缓存频道中的数据
        agent1.sinks.sk1.channel = ch1
        #hdfs路径按年月日进行日志文件的分文件夹保存
        agent1.sinks.sk1.hdfs.path =/flume/events/%y-%m-%d
        #存储文件前缀
        agent1.sinks.sk1.hdfs.filePrefix = events-
        #是否进行轮循归档
        agent1.sinks.sk1.hdfs.round = false
        #是否使用用户本地时间戳,如果设置为false则不能使用上面的文件夹创建方式
        agent1.sinks.sk1.hdfs.useLocalTimeStamp = true
需要注意的问题:
        由于此次实现是使用flume和hadoop结合的方式实现的,所以flume各个环节在启动的过程中,都需要使用hadoop的jar包,尤其是sink端的flume启动时是必须要有hadoop的jar作为支持的,否则启动会报错。
        鉴于hadoop的jar包比较多,结合实验后的结果,发现在/hadoop/更目录下的所有jar是都需要拷贝到flume/lib下的。另外,hadoop/lib目录下的commons-configuration-1.6.jar这个jar也是需要的,注意拷贝到flume/lib目录下。
--数据采集测试:
        首先在监控目录下放入测试文件:test.log
--启动指令(先启动数据存储机data3,再启动数据缓存机data2,最后启动数据源采集机data1):
        bin/flume-ng agent -n agent1 -c conf -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console
--指令详解:
        -n 指定agent名称
        -c 指定配置文件目录
        -f 指定配置文件
        -Dflume.root.logger=DEBUG,console

备注:如果要监控一个指定的文件,则在数据采集机器上使用指令,

agent1.sources.source1.command = tail -F /home/yong/Work/flum-1.6/tail_log_exec

agent1.sources.source1.type exec

同时注掉 #采集源类型 spooldir agent1.sources.sc1.type = spooldir

 

保留采集的文件名称:
#在source机器上配置
agent1.sources.sc1.basenameHeader = true
agent1.sources.sc1.basenameHeaderKey = fileName
#在输出存储机器上配置
agent1.sinks.sk1.hdfs.filePrefix = %{fileName}
#临时文件的采集时间10s
agent1.sinks.sk1.hdfs.rollInterval = 10
#多大的文件就开始分成小文件
agent1.sinks.sk1.hdfs.rollSize = 1024000
agent1.sinks.sk1.hdfs.rollCount = 0
agent1.sinks.sk1.hdfs.idleTimeout=0
flume是一个分布式、可靠、高可用的数据采集、聚合和传输系统。在数据采集方面,flume可以很好地与nginx、kafka、mongodb等常见的数据处理工具和数据库进行集成。下面介绍一下基于nginx+flume+kafka+mongodb实现埋点数据采集的步骤: 1. 配置nginx服务器,将所有的http请求都转发到flume服务器上。可以使用nginx的proxy_pass指令来实现。 2. 在flume服务器上,配置flume agent来接收nginx服务器转发过来的http请求,并将请求数据转发给kafka服务器。flume配置文件中需要设置source、channel和sink三个部分,具体配置可以参考flume官方文档。 3. 在kafka服务器上,创建一个topic来存储flume发送过来的http请求数据。可以使用kafka的命令行工具kafka-topics来创建topic。 4. 在flume服务器上,配置一个kafka sink来将http请求数据发送到kafka服务器上的指定topic中。 5. 在mongodb数据库中创建一个collection来存储http请求数据。可以使用mongodb的命令行工具mongo来创建collection。 6. 在flume服务器上,配置一个mongodb sink来将http请求数据从kafka服务器中消费,并将其存储到mongodb数据库中的指定collection中。 7. 启动nginx、flume、kafka和mongodb服务,并进行测试。可以使用curl等工具模拟http请求,并查看数据是否能够被成功采集、存储到mongodb中。 以上就是基于nginx+flume+kafka+mongodb实现埋点数据采集的基本步骤。需要注意的是,具体的配置和实现过程可能会因为不同的业务需求而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值