flume 自定义Interceptor 按照日志类型的不同,将日志分类打印

本文档介绍了如何在Hadoop集群中使用Flume自定义Interceptor,根据日志类型分类,将日志分别发送到不同节点的控制台。实验环境包括三台Hadoop集群,Flume版本为1.9.0。自定义Interceptor的实现包括创建Maven工程、编码和打包,并在配置文件中指定Interceptor全类名。启动Flume进程后,通过netcat模拟日志数据进行测试,确保日志在Hadoop103和104上正确分类打印。

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

1 实验环境

三台Hadoop集群(102 103 104) 版本:3.1.3
flume版本:1.9.0

2 需求
Hadoop102:通过netcat 模拟日志数据,根据自定义的拦截器进行分类,分别打印在Hadoop103 和 Hadoop104 的控制台

3 自定义拦截器编码

3.1 创建maven工程添加依赖

<dependency>
 <groupId>org.apache.flume</groupId>
 <artifactId>flume-ng-core</artifactId>
 <version>1.9.0</version>
</dependency>

3.2 代码实现

package com.nuo.flume;

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

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author nuonuo
 * @create 2022-05-25 11:00
 */
public class CustomInterceptor implements Interceptor {
   
   

    //声明一个集合,用于存放拦截器处理后的事件
    private List<Event> addHeaderEvents;

    //初始化
    @Override
    public void initialize() {
   
   
        //初始化一个集合,用于存放拦截器处理后的事件
        addHeaderEvents = new ArrayList<>();

    }

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

        //1 获取header&body
        Map<String, String> headers = event.getHeaders();
        String body = new String(event.getBody());

        //2 根据是否包含字符串“nuo” 添加不同的头信息
        if (body.contains("nuo")){
   
   
            headers.put("type","nuo");
        }
        else {
   
   
            headers.put("type","other");
        }

        //3 返回数据
        return event;
    }

    //批量
    @Override
    public List<Event> intercept(List<Event> events) {
   
   

        //1 清空集合
        addHeaderEvents.clear();

        //2 遍历events
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值