当前位置: 代码迷 >> 综合 >> Flume HDFS Sink配置详解以及影响hdfs文件关闭的优先级
  详细解决方案

Flume HDFS Sink配置详解以及影响hdfs文件关闭的优先级

热度:25   发布时间:2023-12-22 02:02:04.0

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
以写入的事件数触发文件滚动。(0 = 不滚动)
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 四舍五入的单位,包含:secondminute 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要高。

 

  相关解决方案