【发布时间】:2014-01-16 14:28:56
【问题描述】:
我在一本 Flume 的书中读到,如果在拦截器的拦截方法中,如果一个事件返回为 null,则该事件将被丢弃。因此,我创建了一个自定义拦截器,它根据条件将事件返回为 null,例如:
public Event intercept(Event event) {
// TODO Auto-generated method stub
Event finalEvent = event;
check = new String(event.getBody(),Charsets.UTF_8);
if(check.matches("([0-9]-.+?-.+?-[0-9][0-9]+)")){
try {
fileWriter.append(new String(event.getBody(),Charsets.UTF_8)+ "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finalEvent = null;
}
System.out.println("Event is : " + finalEvent);
return finalEvent;
}
拦截器发出 null 事件,但文件通道仍将其作为空传递给 HDFS 接收器。为什么事件没有被丢弃?我使用 Spooling 目录作为源。
【问题讨论】:
-
也许你可以做一个测试?让您的代码始终返回 null 并查看是否所有事件都已删除。如果是,那么问题可能出在匹配逻辑而不是水槽配置中。
-
@AndrewEhrlich 我也有类似的问题。就我而言,我已经根据正则表达式修改了拦截器中的事件正文。在接收器(即 HDFS)中,我可以看到与根据应用逻辑修改的正则表达式匹配的行,但是应该删除的其他事件未修改,因此我的正则表达式工作正常。我在代码 。我还需要做点别的吗?
-
你能给你的水槽配置链接吗?也许那里有什么配置错误。
标签: hadoop null interceptor cloudera flume