使用Flume将CSV文件写入HDFS

时间:2015-05-07 12:16:13

标签: hdfs flume

我正在使用Flume从本地文件系统向HDFS写入许多CSV文件。

我想知道什么是Flume HDFS接收器的最佳配置,这样本地系统上的每个文件都将完全以HDFS格式复制为CSV。我希望Flume处理的每个CSV文件都是单个事件,刷新并写为单个文件。尽可能地,我希望文件完全相同,没有标题内容等。

我需要将这些值放在哪里来模拟我想要的行为?

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

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

如果使用现有配置无效,我是否需要使用自定义接收器来实现我想要的效果?

感谢您的意见。

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

1 个答案:

答案 0 :(得分:3)

您必须通过将值设置为0来禁用所有roll *属性。这将有效防止水槽滚动文件。您可能已经注意到,flume基于每个事件进行操作,在大多数情况下,事件是文件中的单行。要实现文件结构本身的保存,您需要使用spool目录源并激活fileHeader:

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

将其设置为true。它将提供%{file}属性,您可以在hdfs接收器路径规范中引用该属性。