flume拦截器的使用

Flume数据采集案例(一)单数据源多出口(选择器) 准备工作: 三台已经安装好的虚拟机(weekend110、weekend01、weekend02) 三台虚拟机上都已安装 JDK1.8 和 Flume1.7.0 虚拟机weekend110上已安装 Hadoop2.7 和 Hive 需求: 使用在机器weekend110上部署的Flume-a1准实时监控日志文件 /tmp/hadoop/hive.log 的变动,Flume-a1将变动的内容传递给在weekend01上部署的Flume-a2,Flume-a2负责存储到HDFS。同时Flume-a1将变动内 阅读详情

例子需求说明:

  1. 我们现在需要将日志中的数据读取到kafka当中
  2. 且需要区分数据的,分别写入到两个不同的主题当中

flume作业conf配置如下:

source : taildir 实现断点续传
channel : 使用kafkachannel 写入到两个主题当中
sink : 没有使用
拦截器: 使用i1,i2两个拦截器
i1:做数据的清理, 防止脏数据,ETL拦截器
i2:做头部信息添加, 分类型拦截器
选择器:根据头部信息进行输出到kafka的哪个主题当中

a1.channels=c1 c2
a1.sources=r1
#
a1.channels=c1 c2
a1.sources=r1
#
a1.channels=c1 c2
a1.sources=r1
#
a1.sources.r1.type = TAILDIR
a1.sources.r1.positionFile = /opt/module/flume/test/taildir_position1.json
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /tmp/logs/app.+
a1.sources.r1.fileHeader = true

# channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = linux101:9092,linux102:9092,linux103:9092
a1.channels.c1.kafka.topic = topic_start
a1.channels.c1.kafka.consumer.group.id = flume-consumer
a1.channels.c1.parseAsFlumeEvent = false

a1.channels.c2.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c2.kafka.bootstrap.servers = linux101:9092,linux102:9092,linux103:9092
a1.channels.c2.kafka.topic = topic_event
a1.channels.c2.kafka.consumer.group.id = flume-consumer
a1.channels.c2.parseAsFlumeEvent = false
# 拦截器
a1.sources.r1.interceptors=i1 i2
a1.sources.r1.interceptors.i1.type=com.dxy.LogETLInterceptor$Builder
a1.sources.r1.interceptors.i2.type=com.dxy.LogTypeInterceptor$Builder
#选择器
a1.sources.r1.selector.type = multiplexing
a1.sources.r1.selector.header = topic
a1.sources.r1.selector.mapping.topic_start = c1
a1.sources.r1.selector.mapping.topic_event = c2
# 绑定
a1.sources.r1.channels = c1 c2

依赖的导入:


<dependencies>
<!--flume 依赖包-->
        <dependency>
            <groupId>org.apache.flume</groupId>
            <artifactId>flume-ng-core</artifactId>
            <version>1.7.0</version>
        </dependency>
    </dependencies>
<!--导入打包插件-->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

ETL清洗拦截器:

package com.dxy;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

//ETL清洗拦截器
public class LogETLInterceptor implements Interceptor {


    @Override
    public void initialize() {

    }

    @Override // 处理单事件
    public Event intercept(Event event) {

        byte[] bytes = event.getBody();
        String str = new String(bytes, Charset.forName("UTF-8"));

        //启动日志和事件日志的校验规则不一样 先进行区分
        if(str.contains("start")){

        //启动日志   说明:LogUtils工具类是一些脏数据判定规则
            if(LogUtils.validateStartLog(str)) {
                    return event;
            }

        }else{

            //事件日志
            if(LogUtils.validateEventLog(str)) {
                return event;
            }
        }

        return null;
    }

    @Override //处理多事件
    public List<Event> intercept(List<Event> list) {

        ArrayList<Event> arrayList = new ArrayList<>();
        for (Event event : list) {
            Event intercept = intercept(event);
            if(intercept!=null){
                arrayList.add(intercept);
            }
        }

         return arrayList;
    }
    //flume的拦截器必须要创建一个静态类对象
    public  static  class  Builder implements   Interceptor.Builder{

        @Override
        public Interceptor build() {
            return new LogETLInterceptor();
        }

        @Override
        public void configure(Context context) {

        }
    }


    @Override
    public void close() {

    }
}


分类型拦截器:

package com.dxy;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

//分类型拦截器
public class LogTypeInterceptor implements Interceptor {
    @Override
    public void initialize() {

    }

    @Override
    public Event intercept(Event event) {

        byte[] body = event.getBody();

        String s = new String(body, Charset.forName("UTF-8"));

        Map<String, String> header = event.getHeaders();
        //如果日志数据中包含start字符串,就添加topic_start,就添加topic_event
        if(s.contains("start")){

            header.put("topic","topic_start");
        }else{
            header.put("topic","topic_event");

        }
        return event;
    }

    @Override//多事件处理 :  进行数据的缓冲
    public List<Event> intercept(List<Event> list) {
        ArrayList<Event> arrayList = new ArrayList<>();

        for (Event event : list) {

            Event intercept = intercept(event);
            arrayList.add(intercept);
        }
        return arrayList;
    }

    //静态类
    public static class Builder implements Interceptor.Builder{

        @Override
        public Interceptor build() {
            return new LogTypeInterceptor();
        }

        @Override
        public void configure(Context context) {

        }
    }

    @Override
    public void close() {

    }
}
Flume拦截器-应用与配置 Flume最重要的组件是Source、Channel和Sink,另外,Flume Agent还有一些使Flume更加灵活的组件,如拦截器,Channel选择器,Sink组和Sink选择器。本文将讨论一下拦截器的应用。 拦截器 拦截器(Interceptor)是简单的插入式组件,设置在Source和Source写入数据的Channel之间,Source接收到... 阅读详情

相关推荐

保姆级教程:在RK3588开发板上用MPP库实现H.264硬编码(附完整代码)

本文详细介绍了在RK3588开发板上使用MPP库实现H.264硬编码的全流程,包括环境准备、MPP库编译、编码器初始化与配置、数据输入与编码流程以及高级性能优化技巧。通过实战案例和完整代码,帮助开发者充分利用RK3588的VPU硬件加速能力,提升视频编码效率和质量。

weixin_28716769的博客 414

头歌flume拦截器答案

Flume1/flume.conf配置文件#agent名为a1;#采集 /opt/flume/data目录下所有文件#channel选择memery#落地到hdfs的hdfs://localhost:9000/flume/文件名的前缀/文件名上的日期#文件格式设为DataStream#根据时间回滚,3s配置文件/***/

maxiangdongkk的博客 3738

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2479

Flume自定义拦截器的使用

第1章 简介 在生产环境中,系统应用的日志千奇百怪,千万不能将这些乱七八糟的数据上传到HDFS上之后,再来做数据的清洗整理。通常的做法是,我们再上传HDFS之前,在Flume采集传输的时候,就将日志进行一层过滤和整理,经过这一层整理之后,我们再将数据上传到HDFS,以减少在HDFS上清洗数据的频次。 这里,我们就需要用到Flume拦截器。Flume有很多预置好的拦截器,直接配置Agent即可使用,详见官方手册:https://flume.apache.org/FlumeUserGuide.html#fl

pezynd的专栏 1022

Verilog实战:手把手教你实现IEEE 754单精度浮点乘法器(附完整代码)

本文详细介绍了如何使用Verilog实现IEEE 754单精度浮点乘法器,包括标准解析、架构设计、Verilog代码实现及优化技巧。通过两级流水线设计,平衡性能与面积,适用于数字信号处理、AI加速器等高性能计算场景。

weixin_33724046的博客 313

多目标进化算法——NSGA-II(python实现)

NSGA-II(python实现)--最全注释,痴呆能懂--

no___good的博客 5278

Flume>采集案例(2)

文章目录1、采集目录到HDFS启动flume具体代码2、采集文件到HDFS定义flume的配置文件启动flume具体代码开发shell脚本定时追加文件内容3、两个agent级联第一步:node02安装flume第二步:node02配置flume配置文件第三步:node02开发定脚本文件往写入数据第四步:node03开发flume配置文件第五步:顺序启动具体代码 1、采集目录到HDFS 需求分析 结...

qq_44509920的博客 1735

Creo报错代码-9?手把手教你重新生成许可证文件(基于Creo 10.0)

本文详细解析Creo报错代码-9的成因及解决方案,重点介绍如何重新生成许可证文件以应对网络环境变化导致的验证失败。通过分步指南和高级技巧,帮助用户有效管理多网络环境下的Creo许可证问题,提升工作效率。

weixin_30839881的博客 557

Flume实战--Flume中的拦截器详解与操作

在处理大规模数据流时,Apache Flume 是一款功能强大的数据聚合工具,它可以通过拦截器在运行时对Event进行修改或丢弃。本文将详细讲解Flume中的拦截器,包括时间戳拦截器、Host添加拦截器、静态拦截器以及如何自定义拦截器。

天冬忘忧的博客 2665

【AI实战派】从零部署YOLOv8:香橙派AIpro边缘端目标检测全流程解析

本文详细解析了在香橙派AIpro边缘设备上从零部署YOLOv8目标检测模型的全流程。内容涵盖硬件开箱、环境搭建、模型转换(ONNX到昇腾OM格式)以及编写Python推理脚本,并提供了性能优化与实战技巧,帮助开发者高效实现实时边缘AI应用。

weixin_29183637的博客 327

flume拦截器

摘要: 拦截器是简单的插件式组件,设置在source和channel之间。source接收到的时间,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器。 flume内置了很多拦截器,并且会定期的添加一些拦截器,在这里列出一些flume内置的,经常使用的拦截器。 一、拦截器的种类介绍 1、Timestamp Int...

jinYwuM的博客 1万+

【Python深度学习】做深度学习训练时,如果数据集太大,无法一次性加载进GPU,应该如何做?

方法核心思想优点缺点适用场景实现复杂度小批量训练(Mini-Batch Training)与数据加载器(DataLoader)将数据集划分为小批量,每次只加载一个小批量到GPU中进行训练。- 易于实现- 是深度学习的标准做法- 支持多进程加载- 内存可能成为瓶颈- 需要调整批量大小避免内存不足适用于大部分场景低数据分片与分布式训练(Data Sharding & Distributed Training)将数据集分片,每个GPU或节点处理其中一部分数据,分布式训练。

若北辰 1141

Flume拦截器

相信大家对Flume都已经很了解,Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。其架构多为Source、Channel...

ItStar 481

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Flume-03】中的拦截器

拦截器为正则表达式拦截器, 数据源为Syslogtcp格式,传送通道为MemChannel,最后传送的目的地是HDFS。通过时间拦截器,数据源为SyslogTcp,传送的通道模式是FileChannel,最后输出的目的地为HDFS。回到第一个窗口发现,并没有采集到,那是因为我流入的数据并不符合我配置方案中的正则表达式。如果一个拦截器需要删除事件,它只需要在返回的事件集中不包含要删除的事件即可。拦截器采用了责任链模式,多个拦截器可以按指定顺序拦截。一个拦截器返回的事件列表被传递给链中的下一个拦截器。

关注我!菜鸟进阶站 1644

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flume timestamp拦截器

Flume拦截器简介 Flume拦截器就是一个插件,可以在从信源到信宿传输事件的过程中操作和修改事件。大多数拦截器要么在事件的基础上加上一些元数据要么基于某些规则删除一些事件。 Flume拦截器例子 1.创建agent配置文件 把下列内容存入agent5.conf,并保存到Flume的工作目录/opt/flume/bin下面 agent5.sources = netsource

蔡先生的专栏 1761

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

flume拦截器及自定义拦截器

拦截器做什么呢? 时间拦截器 以时间拦截器为例.会在Event的header中添加一个属性进去,属性的key叫做timestamp, value是当前的毫秒值. 问题是写到header然后呢?有啥用呢? 就是在比如说保存到hdfs上时,这个header中的时间戳的value可以作为文件夹的目录,这样就比较方便. 也可以比如说加到文件名上面. a1.sources.r1.interceptors = i1 i2 i3 a1.sources.r1.interceptors.i1.type = timestam

鸭梨的博客 979

flume flume自定义拦截器

flume自定义拦截器flume自带拦截器flume自定义拦截器flume Interceptor源码示例原始数据格式处理后的数据第一个flume代码(自定义flume拦截器)pom文件java代码flume配置文件 flume自带拦截器 timestamp 拦截器:在Event Header中添加时间戳。 Host 拦截器:在Event Header中添加agent运行机器的Host或IP。 Static 拦截器:在Event Header中添加自定义静态属性。 Remove Header拦截器:可移除

a3125504x的博客 1359

Flume 拦截器概念及自定义拦截器的运用

位于 Source 与 Channel 之间,在写入Channel 之前,拦截器可以对数据进行转换、提取或删除,以满足特定的需求。拦截器可以用于监控数据流的运行情况,记录日志信息或统计数据流中的事件数量、处理速率等指标,帮助用户进行性能分析和故障排查。在 Flume 中,拦截器(Interceptors)是一种可以在事件传输过程中拦截、处理和修改事件的组件。例如,可以添加时间戳、主机信息、标签等,以丰富事件数据的内容。Flume 拦截器就是起到这样的效果,对数据进行处理、转换、删除等操作,是不是很简单呀。

JIE的博客 --- moon_coder 2146

【Flume】Flume 正则拦截器

Flume中常用Kafka Source、正则拦截器、HDFS Sink,这里把需要注意的点做一下总结,并实现数据根F据事件时间和事件类型落到HDFS。 Kafka Source 配置 # source类型 agent.sources.s1.type = org.apache.flume.source.kafka.KafkaSource # kafka brokers列表 agent.source...

beautiful_huang的博客 1360

Flume内置拦截器与自定义拦截器(代码实战)

官网上内置拦截器的表 由于拦截器一般针对Event的Header进行处理,这里先介绍一下Event event是flume中处理消息的基本单元,由零个或者多个header和body组成。 Header 是 key/value 形式的,可以用来制造路由决策或携带其他结构化信息(如事件的时间戳或事件来源的服务器主机名)。你可以把它想象成和 HTTP 头一样提供相同的功能——通过该方法来传输正文之外的额外信息。 Body是一个字节数组,包含了实际的内容。 flume提供的不同source会给其生成的event

gym02的博客 2996

Flume配置及拦截器

flume从kafka采集数据到hdfs,flume拦截器解析数据时间到指定的分区

weixin_43994052的博客 614

Flume拦截器(含自定义拦截器)

Flume拦截器(含自定义拦截器)一、Flume拦截器1.1 时间戳拦截器1.2 主机名拦截器1.3 UUID拦截器1.4 查询替换拦截器1.5 正则过滤拦截器1.6 正则抽取拦截器二、Flume自定义拦截器2.1 添加Pom.xml依赖2.2 自定义实现拦截器2.3 Flume配置文件三、其它案例 ——————— —————————— —————————— —————————— ...

weixin_43520450的博客 1729
上一篇: Azkaban的安装部署
下一篇: flume监控: kafka输出到hdfs示例
First_____
博客等级 码龄6年 132粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值