flume(自定义拦截器)
1、在pom.xml文件中导入依赖
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.7.0</version>
</dependency>
2、代码
import com.google.gson.Gson;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyInterceptor implements Interceptor {
public static final String SELECTOER_HEADER ="logType";
private Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
@Override
public void initialize() {
}
@Override
public Event intercept(Event event) {
Gson gson = new Gson();
String logString = new String(event.getBody());
if(logString!=null&&logString.length()>0){
HashMap<String,String> hashMap = gson.fromJson(logString, HashMap.class);
String type = hashMap.get("type");
if(type.equals("startup")){
Map<String, String> headers = event.getHeaders();
headers.put(SELECTOER_HEADER ,"startup");
}else if (type.equals("event")){
Map<String, String> headers = event.getHeaders();
headers.put(SELECTOER_HEADER,"event");
}
}
return event;
}
@Override
public List<Event> intercept(List<Event> events) {
List<Event> intercepted = new ArrayList<>(events.size());
for (Event event : events) {
Event interceptedEvent = intercept(event);
if (interceptedEvent != null) {
intercepted.add(interceptedEvent);
}
}
return intercepted;
}
@Override
public void close() {
}
public static class Builder implements Interceptor.Builder {
@Override
public Interceptor build() {
return new MyInterceptor();
}
@Override
public void configure(Context context) {
}
}
public static void main(String[] args) {
Gson gson = new Gson();
String logString="{\"area\":\"shanghai\",\"uid\":\"user_995\",\"os\":\"andriod\",\"appid\":\"app007\",\"mid\":\"88a147a9-ecc4-40be-885a-ae67bb9b7b2b\",\"type\":\"startup\",\"vs\":\"1.1.1\",\"ts\":1546780968866}";
HashMap<String,String> hashMap = gson.fromJson(logString, HashMap.class);
System.out.println(hashMap.get("type"));
}
}
3、将写好的代码打成jar包,并把打好的jar包拷贝到flume/lib/下