1、使用文件原来的名字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a1.sources=r1a1.sinks=k1a1.sources.r1.type=spooldir....a1.sources.r1.basenameHeader=truea1.sources.r1.basenameHeaderKey=basename.....a1.sinks.k1.type=hdfsa1.sinks.k1.hdfs.path=hdfs://xxx:8020/a/b/%{basename}在source里设置basnameHeader为true,这样在解析出来的event在header上将添加一个属性,名字是basenameHeaderKey定义,值是文件原来的名字。
2、将整个文件作为一个event
在默认情况下,deserializer是LINE,它的效果是,将文件里的每一行解析成一个event。改成BlobDeserializer,则将整个文件解析成一个event。不过,这种方式对大文件不适合,因为整个文件将放入内存中。
1
2
3
4
5
a1.sources=r1...a1.sources.r1.type=spooldira1.sources.r1.deserializer=BlobDeserializer...3、在传输新文件到监控的文件夹时,需要让Spooing Directory Source忽略这个正在传输的文件,等传输完毕后在触发。
可以使用ignorePattern属性来避免。
1
a1.sources.r1.ignorePattern=^(.)*\\.tmp$