这里在补充一下插件开发的步骤:
flume插件开发一般分如下步骤:
1 编写插件类(Sink/Source/Decorator)相应的继承flume的(EventSink.Base/ EventSource.Base/EventSinkDecorator<S>)
Source必须实现四个方法:
- void open() throws IOException
- Event next() throws IOException
- void close() throws IOException
- ReportEvent getReport()
复制代码
Sink和Decorator必须实现四个方法:
- void open() throws IOException
- void append(Event e) throws IOException
- void close() throws IOException
- ReportEvent getReport()
复制代码
主要介绍sink插件的开发
append(Event e)方法中的event参数是flume框架自带的类,日志文件的一行记录会在flume框架中封装成一个event,在append方法中对event的处理就可以当做是处理日志文件的每一行,Event包含的六个属性是:
Unix timestamp 时间戳
Nanosecond timestamp
Priority
Source host 主机地址(这个地址是产生日志的文件地址)
Body 日志文件的一行
Metadata table with an arbitrary number of attribute value pairs.
在sink的插件类中一定要是加入下面的代码:
public static List<Pair<String, SinkBuilder>> getSinkBuilders() {
List<Pair<String, SinkBuilder>> builders = new ArrayList<Pair<String, SinkBuilder>>();
builders.add(new Pair<String, SinkBuilder>("HBaseEventSinkV1",
builder()));
return builders;
}
因为flume的SinkFactoryImpl中需要通过这份方法将写的插件类注册到flume,如果不写会报错,"HBaseEventSinkV1" 就是注册名
以开发collector的插件类为例,完成插件类的开发之后,将插件类打包分别放到master和collector主机上(注:多个master和多个collector的情况下要都放置,最好目录都一样,便于配置flume classpath)。
|