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