一、如何使用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版权协议,转载请附上原文出处链接和本声明。