Flume-Sinks文档(进行中)

Flume Sinks

HDFS Sink

该 Sink 将事件写入 Hadoop 分布式文件系统 (HDFS)。 它目前支持创建文本和序列文件。 它支持两种文件类型的压缩。 可以根据经过的时间或数据大小或事件数量定期滚动文件(关闭当前文件并创建新文件)。 它还按时间戳或事件起源的机器等属性对数据进行存储/分区。 HDFS 目录路径可能包含格式化转义序列,这些序列将被 HDFS 接收器替换,以生成用于存储事件的目录/文件名。 使用此Sink 需要安装 hadoop,以便 Flume 可以使用 Hadoop jar 与 HDFS 集群进行通信。 请注意,需要支持sync() 调用的Hadoop版本。

以下是支持的转义序列:

别名 描述
%{host} 替换事件头部名为“host”的值。支持任意头部名称。
%t Unix时间,以毫秒为单位
%a 地区设置的星期几简称 (Mon, Tue, …)
%A 地区设置的星期几全称 (Monday, Tuesday, …)
%b 地区设置的月份简称 (Jan, Feb, …)
%B 地区设置的月份全称 (January, February, …)
%c 地区设置的日期和时间 (Thu Mar 3 23:05:25 2005)
%d 月份中的日 (01)
%e 月份中的日,不补零 (1)
%D 日期;同 %m/%d/%y
%H 小时 (00..23)
%I 小时 (01..12)
%j 一年中的日 (001..366)
%k 小时 ( 0..23)
%m 月份 (01..12)
%n 月份,不补零 (1..12)
%M 分钟 (00..59)
%p 地区设置的上午或下午的等效表示
%s 自1970-01-01 00:00:00 UTC以来的秒数
%S 秒 (00..59)
%y 年份的后两位 (00..99)
%Y 年份 (2010)
%z +hhmm 数字时区表示法 (例如, -0400)
%[localhost] 替换代理运行所在主机的主机名
%[IP] 替换代理运行所在主机的IP地址
%[FQDN] 替换代理运行所在主机的规范主机名

注意:转义字符串 %[localhost]%[IP]%[FDN] 都依赖于Java获取主机名的能力,这在某些网络环境中可能会失败。
正在使用的文件的名称将被修改为在末尾包含“.tmp”。关闭文件后,此扩展名将被删除。这允许排除目录中部分完整的文件。必填属性以粗体显示。

注意:对于所有与时间相关的转义序列,事件的标头中必须存在一个关键字为“timestamp”的标头(除非hdfs.useLocalTimeStamp设置为true)。一种自动添加的方法是使用TimestampInterceptor。

名称 默认值 描述
channel -
type 组件类型名称,需要是hdfs
hdfs.path HDFS目录路径(例如 hdfs://namenode/flume/webdata/)
hdfs.filePrefix FlumeData Flume在HDFS目录中创建的文件名前缀
hdfs.fileSuffix 附加到文件的后缀(例如 .avro - 注意:句号不会自动添加)
hdfs.inUsePrefix 用于Flume正在积极写入的临时文件的前缀
hdfs.inUseSuffix .tmp 用于Flume正在积极写入的临时文件的后缀
hdfs.emptyInUseSuffix false 如果为false,则在写入输出时使用hdfs.inUseSuffix。关闭输出后,hdfs.inUseSuffix从输出文件名中移除。如果为true,则忽略hdfs.inUseSuffix参数,改为使用空字符串。
hdfs.rollInterval 30 滚动当前文件前等待的秒数(0 = 永不根据时间间隔滚动)
hdfs.rollSize 1024 触发滚动的文件大小,以字节为单位(0: 永不根据文件大小滚动)
hdfs.rollCount 10 写入文件的事件数量,之后滚动(0 = 永不根据事件数量滚动)
hdfs.idleTimeout 0 不活跃文件关闭的超时时间(0 = 禁用空闲文件的自动关闭)
hdfs.batchSize 100 在文件刷新到HDFS之前写入的事件数量
hdfs.codeC 压缩编解码器。以下之一:gzip, bzip2, lzo, lzop, snappy
hdfs.fileType SequenceFile 文件格式:目前是SequenceFile, DataStream 或 CompressedStream (1)DataStream不会压缩输出文件,请不要设置codeC (2)CompressedStream需要设置hdfs.codeC,并使用可用的codeC
hdfs.maxOpenFiles 5000 允许打开的文件数量。如果超过此数量,最旧的文件将被关闭。
hdfs.minBlockReplicas 指定每个HDFS块的最小副本数。如果没有指定,则来自类路径中默认的Hadoop配置。
hdfs.writeFormat Writable 序列文件记录的格式。Text 或 Writable 之一。在创建数据文件之前设置为Text,否则这些文件无法被Apache Impala (孵化中) 或 Apache Hive 读取。
hdfs.threadsPoolSize 10 每个HDFS sink用于HDFS IO操作(打开、写入等)的线程数
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 或 hour。
hdfs.timeZone Local Time 用于解析目录路径的时区名称,例如 America/Los_Angeles。
hdfs.useLocalTimeStamp false 在替换转义序列时使用本地时间(而不是事件头部的时间戳)。
hdfs.closeTries 0 sink在尝试关闭文件后必须重命名文件的次数。如果设置为1,这个sink在重命名失败(例如,由于NameNode或DataNode故障)后不会重试,可能会留下带有.tmp扩展名的文件处于打开状态。如果设置为0,sink将不断尝试重命名文件,直到文件最终被重命名(没有尝试次数的限制)。文件可能仍然保持打开状态,如果关闭调用失败,但数据将完整,这种情况下,文件只有在Flume重启后才会关闭。
hdfs.retryInterval 180 关闭文件的连续尝试之间的时间(秒)。每次关闭调用都会花费多个RPC往返到Namenode,所以设置得太低可能会导致Namenode负载过大。如果设置为0或更低,sink在第一次尝试失败后不会尝试关闭文件,可能会留下打开状态的文件或带有“.tmp”扩展名。
serializer TEXT 其他可能的选项包括 avro_event 或 EventSerializer.Builder 接口实现的完全限定类名。
serializer.*

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!