HDFS Sink介绍
Flume导入数据HDFS,目前只支持创建序列化(sequence)文件和文本(text)文件。还支持这两个文件的压缩。文件可以根据运行的时间,数据的大小和时间的数量来进行周期性的滚动(关闭当前文件产生新的文件)。也可以根据数据属性分区,例如根据时间戳或机器分区。HDFS目录路径可以包含格式化的转义字符,生成目录路径可以通过格式化转移字符(escape sequences),HDFS sink通过这些转义字符生成一个目录或者文件去存储Event。当然在Flume中使用HDFS Sink的话,需要添加HDFS相关的Jar,这样Flume就能使用Hadoop的jar和Hadoop集群交互。注:Hadoop必须支持sync()。
以下是HDFS Sink支持的转义字符:
名称 | 描述 |
---|---|
%{host} | 替代Event Header被命名为“host”的值,支持任意的Header name。 |
%t | Unix毫秒时间 |
%a | 短的周名称,例如:Mon, Tue, ... |
%A | 周名称全称,例如:Monday, Tuesday, ... |
%b | 短的月名称,例如:(Jan, Feb, ... |
%B | 月名称全称,例如:January, February, ... |
%c | 日期和时间,例如:Thu Mar 3 23:05:25 2005 |
%d | 每个月的某一天,例如:01 - 31 |
%e | 每个月的某一天(没有填充0)例如:1,2,3,4---31 |
%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 | am 或 pm |
%s | 从1970-01-01 00:00:00 UTC到现在的毫秒数 |
%S | 秒,例如:00..59 |
%y | 两位数的年份,例如:00..99 |
%Y | 年份,例如:2010 |
%z | +hhmm 数字时区,例如:-0400 |
文件在使用的时候以".tmp"为后缀,一旦文件关闭,扩展名将被移除。
注:跟时间相关的转移序列,Key为“timestamp”必须存在在Event的Headers中(除非hdfs.useLocalTimeStamp设置为true)
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操作 |