Flume HDFS Sink配置详解
Name | Default | Description |
---|---|---|
channel | – |
|
type | – | 组件的名称,必须为:HDFS |
hdfs.path | – | HDFS目录路径,例如:hdfs://namenode/flume/webdata/ |
hdfs.filePrefix | FlumeData | HDFS目录中,由Flume创建的文件前缀。 |
hdfs.fileSuffix | – | 追加到文件的后缀,例如:.txt |
hdfs.inUsePrefix | – | 文件正在写入时的前缀。 |
hdfs.inUseSuffix | .tmp |
文件正在写入时的后缀。 |
hdfs.rollInterval | 30 | 当前写入的文件滚动间隔,默认30秒生成一个新的文件 (0 = 不滚动) |
hdfs.rollSize | 1024 | 以文件大小触发文件滚动,单位字节(0 = 不滚动) |
hdfs.rollCount | 10 | |
hdfs.idleTimeout | 0 | 超时多久以后关闭无效的文件。(0 = 禁用自动关闭的空闲文件)但是还是可能因为网络等多种原因导致,正在写的文件始终没有关闭,从而产生tmp文件 |
hdfs.batchSize | 100 | 有多少Event后,写到文件才刷新到HDFS。 |
hdfs.codeC | – | 压缩编解码器,可以使用:gzip, bzip2, lzo, lzop, snappy |
hdfs.fileType | SequenceFile | 文件格式:通常使用SequenceFile(默认) , DataStream 或者 CompressedStream (1)DataStream不能压缩输出文件,请不用设置hdfs.codeC编码解码器。 (2)CompressedStream要求设置hdfs.codeC来制定一个有效的编码解码器。 |
hdfs.maxOpenFiles | 5000 | HDFS中允许打开文件的数据,如果数量超过了,最老的文件将被关闭。 |
hdfs.callTimeout | 10000 | 允许HDFS操作的毫秒数,例如:open,write, flush, close。如果很多HFDS操作超时,这个配置应该增大。 |
hdfs.threadsPoolSize | 10 | 每个HDFS sink的HDFS的IO操作线程数(例如:open,write) |
hdfs.rollTimerPoolSize | 1 | 每个HDFS sink调度定时文件滚动的线程数。 |
hdfs.kerberosPrincipal | – | 安全访问HDFS Kerberos的主用户。 |
hdfs.kerberosKeytab | – | 安全访问HDFS Kerberos keytab |
hdfs.proxyUser |
|
|
hdfs.round | false | 时间戳应该被四舍五入。(如果为true,会影响所有的时间,除了t%) |
hdfs.roundValue | 1 | 四舍五入的最高倍数(单位配置在hdfs.roundUnit),但是要小于当前时间。 |
hdfs.roundUnit | second | 四舍五入的单位,包含:second , minute or hour . |
hdfs.timeZone | Local Time | 时区的名称,主要用来解决目录路径。例如:America/Los_Angeles |
hdfs.useLocalTimeStamp | false | 使用本地时间替换转义字符。 (而不是event header的时间戳) |
hdfs.closeTries | 0 | 在发起一个关闭命令后,HDFS sink必须尝试重命名文件的次数。如果设置为1,重命名失败后,HDFS sink不会再次尝试重命名该文件,这个文件处于打开状态,并且用.tmp作为扩展名。如果为0,Sink会一直尝试重命名,直至重命名成功。如果文件 失败,这个文件可能一直保持打开状态,但是这种情况下数据是完整的。文件将会在Flume下次重启时被关闭。 |
hdfs.retryInterval | 180 | 在几秒钟之间连续尝试关闭文件。每个关闭请求都会有多个RPC往返Namenode,因此设置的太低可能导致Namenode超负荷,如果设置0或者更小,如果第一次尝试失败的话,该Sink将不会尝试关闭文件。并且把文件打开,或者用“.tmp”作为扩展名。 |
serializer | TEXT |
可能的选项包括avro_event或继承了EventSerializer.Builder接口的类名。 |
serializer.* |
|
|
优先级:
hdfs.rollInterval,hdfs.rollSize,hdfs.rollCount,hdfs.minBlockReplicas,hdfs.batchSize这5个配置影响着hdfs文件的关闭。
注意,这5个配置影响的是一个hdfs文件,是一个hdfs文件。当hdfs文件关闭的时候,这些配置指标会重新开始计算。因为BucketWriter中的open方法里会调用resetCounters方法,这个方法会重置计数器。而基于hdfs.rollInterval的timedRollFuture线程返回值是在close方法中被销毁的。因此,只要close文件,并且open新文件的时候,这5个属性都会重新开始计算。
hdfs.rollInterval与时间有关,当时间达到hdfs.rollInterval配置的秒数,那么会close文件。
hdfs.rollSize与每个event的字节大小有关,当一个一个event的字节相加起来大于等于hdfs.rollSize的时候,那么会close文件。
hdfs.rollCount与事件的个数有关,当事件个数大于等于hdfs.rollCount的时候,那么会close文件。
hdfs.batchSize表示当事件添加到hdfs.batchSize个的时候,也就是说HDFS Sink每次会拿hdfs.batchSize个事件,而且这些所有的事件都写进了同一个hdfs文件,这才会触发本次条件,并且其他4个配置都未达成条件。然后会close文件。
hdfs.minBlockReplicas表示期望hdfs对文件最小的复制块数。所以有时候我们配置了hdfs.rollInterval,hdfs.rollSize,hdfs.rollCount这3个参数,并且这3个参数都没有符合条件,但是还是生成了多个文件,这就是因为这个参数导致的,而且这个参数的优先级比hdfs.rollSize,hdfs.rollCount要高。