flume:如何使用flume将文件存到hdfs

一、如何使用flume将文件存到hdfs

简单例子:

#set name

agent1.sources = source1

agent1.channels = channel1

agent1.sinks = sink1

#link sources and sinks

agent1.sources.source1.channels = channel1

agent1.sinks.sink1.channel = channel1

#set sources

agent1.sources.source1.type = spooldir

agent1.sources.source1.spoolDir = 监控路径

#set sinks 、necessary set in this example

agent1.sinks.sink1.type = hdfs

agent1.sinks.sink1.hdfs.path = 存储到hdfs的路径

#not necessary set in this example

agent1.sinks.sink1.hdfs.filePrefix = events

agent1.sinks.sink1.hdfs.fileSuffix = .log

#下面这个属性默认为空

agent1.sinks.sink1.inUsePrefix = _

agent1.sinks.sink1.hdfs.fileType = DataStream

#set channels

agent1.channels.channel1.type = file 

启动这个flume代理,可以将监控路径下的文件通过channel传输到hdfs.path属性的路径中。

上面这个例子使用了一些默认配置。包括在超过了给定的打开时间(默认30s)之后,会将打开的文件通过channel传输到sink。这里会存在一个问题-》可能生成的内容太少了,每次都往hdfs中传输大量的小文件,降低了mapreduce效率。

解决方式:

    第一个:

        hdfs.rollInterval属性设置打开时间,使时间足够长,获取足够多的内容。

    第二个:

        hdfs.rollSize属性设置文件大小,当文件达到一定的大小的时候才传输(默认1024个字节)

    第三个:

        hdfs.rollCount属性设置接受的事件数目,当文件写满了给定数量的事件之后才传输。

    


版权声明:本文为pro_spect原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。