05_Flume_timestamp interceptor实践

Flume日志收集配置
本文介绍如何使用Flume进行日志数据收集的过程,包括FlumeAgent的配置详情,通过HTTP源接收数据,并利用HDFS作为目标存储。此外还演示了如何通过curl命令模拟发送HTTP请求,以及验证数据是否正确存储到了HDFS。

1、目标场景

 

2、Flume Agent配置

# specify agent,source,sink,channel
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# handler将根据JSON规则,提取出header、body,然后生成flume event的header、body
a1.sources.r1.type = http
a1.sources.r1.bind = master
a1.sources.r1.port = 6666
a1.sources.r1.handler = org.apache.flume.source.http.JSONHandler

# interceptor将在flume event的header中增加时间戳
# 该interceptor将在flume event的header中增加当前系统时间
a1.sources.r1.interceptors = i1  
a1.sources.r1.interceptors.i1.type = timestamp
# 如果flume event的header中已经有timestamp,是否保留;False表示不保留 a1.sources.r1.interceptors.i1.preserveExisting
= false # hdfs sink a1.sinks.k1.type = hdfs # sink将会基于flume event头部的时间戳来提取年月日信息,在HFDS上创建目录 a1.sinks.k1.hdfs.path = hdfs://master:9000/flume/%Y-%m-%d/ # 如果event的header中没有时间戳,就要打开下面的配置 # a1.sinks.k1.hdfs.useLocalTimeStamp = true a1.sinks.k1.hdfs.filePrefix = interceptor- a1.sinks.k1.hdfs.fileType=DataStream a1.sinks.k1.hdfs.wirteFormat = Text a1.sinks.k1.hdfs.rollSize = 102400000 a1.sinks.k1.hdfs.rollCount = 5 a1.sinks.k1.hdfs.rollInterval = 0 # channel, memory a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # bind source,sink to channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1

 

3、curl命令,模拟发送HTTP请求(POST方法)

 # curl -X POST -d '[{"headers":{}, "body":"timestamp teset 001"}]'  http://master:6666

说明: -X POST 表示使用HTTP POST方法,将 -d 指明的 json格式的数据,发送给master的6666端口

 

4、检查HDFS上基于event时间戳信息的目录是否成功创建

 1)第一个curl命令运行后,flume aget打印日志,提示基于时间戳的HDFS目录正在创建

 2)HDFS上的目录

 3)flume event body中的数据,被保存到该目录在的HDFS文件中

 

转载于:https://www.cnblogs.com/shay-zhangjin/p/7962264.html

### 使用Apache Flume从卡口源抽取数据进行大数据处理 #### Apache Flume简介 Apache Flume是一个高可靠、高性能的日志采集、聚合和传输的系统,支持在日志系统中定制各类数据发送方(agent)[^1]。 #### 卡口数据特点 卡口数据通常具有实时性强、数据量大等特点。这类数据可能来自交通监控摄像头或其他传感器设备,记录车辆通过特定位置的时间戳和其他相关信息[^2]。 #### 架构设计原则 为了高效地收集并处理这些海量异构数据,在架构上应考虑采用分布式部署方式来提升系统的可扩展性和容错能力。具体而言: - **可靠性**:确保即使部分节点失败也不会影响整体服务; - **性能优化**:针对不同类型的输入源调整参数设置以达到最佳吞吐率; - **灵活性配置**:允许用户根据实际需求轻松修改数据流路径或存储目标; #### 实现方案概述 利用Flume可以很方便地实现对卡口数据的捕获与初步清洗工作。一般情况下会先定义好source端用于监听指定接口获取原始报文;接着经过interceptor组件完成必要的字段解析转换操作;最后再由sink负责将预处理后的结果写入到HDFS/HBase等持久化层保存待后续分析使用[^3]。 #### 配置文件示例 下面给出一段简单的flume-conf.properties样例代码片段展示如何构建这样一个pipeline: ```properties # 定义agent名称为traffic_monitoring_agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # 描述Source,这里假设我们有一个HTTP Source用来接收POST请求中的JSON格式事件消息体 a1.sources.r1.type = org.apache.flume.source.http.HTTPSource a1.sources.r1.port = 41414 a1.sources.r1.handler = com.example.TrafficEventDeserializerHandler # 自定义处理器类名 # 添加Interceptor来进行基本的数据验证过滤以及时间戳附加 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = timestamp # 设置Channel为内存队列模式(生产环境建议选用file channel) a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # Sink指向HDFS作为最终目的地 a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = /user/flume/traffic_data/%Y-%m-%d/ a1.sinks.k1.hdfs.filePrefix = checkpoint- a1.sinks.k1.hdfs.round = true a1.sinks.k1.hdfs.roundValue = 10 a1.sinks.k1.hdfs.roundUnit = minute ``` 此配置说明了创建名为`traffic_monitoring_agent` 的Agent实例,并设置了相应的Source,Sink 和 Channel 参数组合形成完整的数据流动管道结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值