《Flume Source组件实战—Avro、Spool、Exec(详细图文)》一文中,我们介绍了集中不同的Source 组件的使用方式,Source监控取到的数据大多数都是通过LoggerSink输出Cli端界面上,并没有将这些数据真正下沉落地,那么这里LoggerSink记录INFO级别的日志,一般多数用来进行系统调试。在本文中,我们将着重介绍在生产环境中常用的sink组件:HDFS Sink
Flume Sink的目的是从Flume Channel中获取数据然后输出到存储或者其他Flume Source中。Flume Agent启动的时候,它会为每一个Sink都启动一个SinkRunner的对象,SinkRunner.start()方法会启动一个新的线程去管理每一个Sink的生命周期。每一个Sink需要实现start()、Stop()和process()方法。本文只是例举几个Sink而已,Flume本身含有丰富的Source 和Sink组件,并且支持随意组合,只要你按照配置的规则来生产数据、传输数据即可,使用非常方便。
HDFS Sink 实战
在本节我们要实现Flume实时监测日志文件,并将新增的日志数据写入到HDFS文件中
读其名可知,HDFS Sink就是Sink将从Channel中get到的时间写入到Hadoop分布式文件系统HDFS,从而完成日志文件的持久化操作。目前Flume支持创建文本文件和序列化文件,这些文件可以按照指定的时间或数据量或事件的数量为基础进行存放,HDFS的目录路径可以包含将要由HDFS替换格式的转移序列用以生成存储事件的目录/文件名。agent从WebServer拿到数据之后再存放到HDFS,整个过程如下图所示:
1、添加配置文件内容 cd /usr/flume/conf 在conf目录下,将我们之前写的exec.conf直接copy过来进行修改即可,cp exec.conf exec_hdfs_sink.conf,增加以下内容:
#example.conf: A single-node flume configuration
#use hdfsSink
#Name the components on this agent
a1.sources = r1
a1.sinks &