2015-05-07 200 views
4

我使用Flume将多个CSV文件从本地文件系统写入HDFS。使用Flume将CSV文件写入HDFS

我想知道什么是Flume HDFS接收器的最佳配置,以便本地系统上的每个文件都将完全以CSV格式复制到HDFS中。我希望Flume处理的每个CSV文件都是单个事件,刷新并写入单个文件。尽可能地,我希望该文件是完全一样的,而不需要标题的东西等。

我需要把这些值放在模拟我想要的行为?

hdfs.batchSize = x 
hdfs.rollSize = x 
hdfs.rollInterval = x 
hdfs.rollCount = x 

请提供是否还有其他Flume代理配置变量,我也需要更改。

如果这不能使用现有的配置,我需要使用自定义接收器,然后实现我想要的?

感谢您的输入。

P.S.我知道hadoop fs -put-copyFromLocal会更适合这项工作,但由于这是一个概念验证(表明我们可以使用Flume进行数据摄取),所以我需要使用Flume。

+0

为什么不使用'hadoop fs -put '命令?我的意思是,以动态方式创建本地文件?群集外的机器中是否有本地文件? – frb

+0

@frb是的文件是机器生成的。此外,我们需要使用Flume的原因是这是一个概念证明(我们已经使用Flume进行数据处理)。我很清楚'hadoop put'或'hadoop copyFromLocal'就可以。谢谢。 – menorah84

回答

2

您将不得不通过将值设置为0来禁用所有滚动*属性。这将有效防止水槽滚动文件。正如您可能已经注意到的那样,flume按每个事件操作,在大多数情况下,事件在文件中是单行。为了还实现了保存的文件结构本身的问题,你需要使用卷轴DIR源并激活FileHeader里:

fileHeader false Whether to add a header storing the absolute path filename. 

组为true。它将提供一个%{file}属性,您可以在您的hdfs sink路径规范中引用它。