1.Flume框架支持很多类型的接收器:HDFS接收器,HBase接收器,IRC接收器,ElasticSearch接收器,MongoDB接收器,Cassandra接收器,RabbitMQ接收器以及其他数据存储接收器等。
2.HDFS接收器:持续打开HDFS中的文件,然后以流的方式将数据写入其中,并且在某个时间点关闭该文件再打开新的文件。
3.如果需要使用HDFS接收器,需要设置如下参数:
agent.sinks.k1.type = hdfs --为名为agent的代理定义了一个名为k1的HDFS接收器
agent.sinks.k1.hdfs.path = /path/in/hdfs --表示将数据写到该路径下
类型 | 路径 |
绝对路径 | /usr/local/flume/mydata |
带有服务器名的绝对路径 | hdfs://namenode/users/flume/data |
相对路径 | mydata |
agent.sinks.k1.channel = c1
4.路径与文件名
1.每次Flume在HDFS中的hdfs.path开启一个新文件写入数据时,该文件名都由hdfs.filePrefix,一个点符号,文件开启的时间戳以及由hdfs.fileSuffix属性指定的一个文件后缀构成,例如:
agent.sinks.k1.hdfs.path = /logs/apache/access
agent.sinks.k1.hdfs.filePrefix = access
agent.sinks.k1.hdfs.fileSuffix = .log
上面的配置中,会生成一个类似于/logs/apache/access/accesss.1362945258.log文件,时间久了,hdfs.path目录将会变满,需要在路径中添加某种时间元素将文件划为若干子目录。
agent.sinks.k1.hdfs.path = /logs/apache/access/%Y/%m/%D/%H
2.Flume可以一次写入多个文件,属性hdfs.maxOpenFiles设定了一次可以写多少的上限,默认值为5000,如果超过了这个限制,处于打开状态的最老的文件将会被关闭。
3.为了避免在文件关闭前使用临时文件,请将后缀设为空(而不是默认的.tmp),将前缀设为一个点或是一个下划线,例如:
agent.sinks.k1.hdfs.inUsePrefix=_
agent.sinks.k1.hdfs.inUseSuffix=
5.文件转储
1. 默认情况下,Flume会每隔30秒,10个事件或是1024个字节来转储写入的文件。
agent.sinks.k1.hdfs.rollInterval = 60
agent.sinks.k1.hdfs.rollCount = 0
agent.sinks.k1.hdfs.rollSize = 0
2.hdfs.batchSize:它指的是在每个事务中接收器从通道所读取的事件数量。如果通道中有大量的数据,那么将该参数设为大于100(默认值)会提升性能,这会降低每个事件的事务代价。
6.压缩编解码器
agent.sinks.k1.hdfs.codeC = gzip
7.事件序列化器:指的是Flume事件转换为另一种格式以进行输出的机制。它在功能上类似于log4j的Layout类。
1.Apache Avro项目
agent.sinks.k1.serializer = avro_event
agent.sinks.k1.serializer.compressionCodec = snappy
agent.sinks.k1.serializer.syncIntervalBytes = 4194304
agent.sinks.k1.hdfs.fileSuffix = .avro
备注:1.不能设置Avro文件的hdfs.codeC属性。
8.接收器组:为了在数据处理管道中消除单点失败问题,Flume提供了通过负载均衡或是故障恢复机制将事件发送到不同的接收器的能力。
1.接收器组用于创建逻辑接收器分组,该分组的行为是由接收处理器来控制的,它决定了事件的路由方式。
agent.sinkgroups = sg1
agent.sinkgroups.sg1.sinks = k1,k2
2.负载均衡
如果将processor.type设置为load_balance,那就会使用循环选择,除非指定了processor.selector属性。你可以将该属性设为round_robin或是random.
agent.sinkgroups.sg1.sinks = k1,k2,k3
agent.sinkgroups.sg1.processor.type = failover
agent.sinkgroups.sg1.processor.priority.k1 =10
agent.sinkgroups.sg1.processor.priority.k2 = 20
agent.sinkgroups.sg1.processor.priority.k3 =20
1.优先级数字低的表示会优先使用,数字相同的则会随机使用。
2.processor.maxPenality为组中不可用的接收器设定了一个指数退避上限。首次失败后要间隔一秒钟才可以再次使用。之后的失败都会将等待时间加倍,直到到达processor.maxPenality值为止。