1.简介
在数据采集中,我们常常会用到flume对用户行为日志进行收集。针对原始数据,可以使用flume对数据进行简单的ETL和根据不同日志类型进行分发,因此就需要根据业务需求自定义flume的拦截器
flume的拦截器实现需要编写java类,实现flume中的Interceptor,并在配置文件中进行配置。
2.代码示例
2.1对数据进行简单的ETL
package com.bigdata.flume.interceptor;
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,判断数据是否符合固定格式(如json)、字段是否为null
*/
public class LogETLInterceptor implements Interceptor {
@Override
public void initialize() {
}
@Override
public Event intercept(Event event) {
// 1 获取数据
byte[] body = event.getBody();
String log = new String(body, Charset.forName("UTF-8"));
// 2 判断数据类型并向Header中赋值
if (log.contains("start")) {
if (LogUtils.validateStart(log)){
return event;
}
}else {
if (LogUtils.validateEvent(log)){
return event;
}
}
// 3 返回校