使用 Flume 将 CSV 文件写入 HDFS
Write CSV files to HDFS using Flume
我正在使用 Flume.
从我的本地文件系统将大量 CSV 文件写入 HDFS
我想知道什么是 Flume HDFS 接收器的最佳配置,这样本地系统上的每个文件都将作为 CSV 准确复制到 HDFS 中。我希望 Flume 处理的每个 CSV 文件都是单个事件,作为单个文件刷新和写入。尽可能地,我希望文件在没有 header 东西等的情况下完全相同
我需要在这些值上添加什么来模拟我想要的行为?
hdfs.batchSize = x
hdfs.rollSize = x
hdfs.rollInterval = x
hdfs.rollCount = x
如果我还需要更改其他 Flume 代理配置变量,请提供。
如果使用现有配置这不起作用,我是否需要使用自定义接收器来实现我想要的?
感谢您的意见。
P.S。我知道 hadoop fs -put 或 -copyFromLocal 更适合这项工作,但因为这是一个概念证明(表明我们可以使用 Flume 进行数据摄取),这就是我需要使用 Flume.
的原因
您必须通过将值设置为 0 来禁用所有 roll* 属性。这将有效地防止 flume 滚动文件。您可能已经注意到,flume 以每个事件为基础进行操作,在大多数情况下,一个事件是文件中的一行。为了同时保存文件结构本身,您将需要使用假脱机目录源并激活 fileHeader:
fileHeader false Whether to add a header storing the absolute path filename.
将其设为真。它将提供一个 %{file} 属性,您可以在您的 hdfs 接收器路径规范中引用它。
我正在使用 Flume.
从我的本地文件系统将大量 CSV 文件写入 HDFS我想知道什么是 Flume HDFS 接收器的最佳配置,这样本地系统上的每个文件都将作为 CSV 准确复制到 HDFS 中。我希望 Flume 处理的每个 CSV 文件都是单个事件,作为单个文件刷新和写入。尽可能地,我希望文件在没有 header 东西等的情况下完全相同
我需要在这些值上添加什么来模拟我想要的行为?
hdfs.batchSize = x
hdfs.rollSize = x
hdfs.rollInterval = x
hdfs.rollCount = x
如果我还需要更改其他 Flume 代理配置变量,请提供。
如果使用现有配置这不起作用,我是否需要使用自定义接收器来实现我想要的?
感谢您的意见。
P.S。我知道 hadoop fs -put 或 -copyFromLocal 更适合这项工作,但因为这是一个概念证明(表明我们可以使用 Flume 进行数据摄取),这就是我需要使用 Flume.
的原因您必须通过将值设置为 0 来禁用所有 roll* 属性。这将有效地防止 flume 滚动文件。您可能已经注意到,flume 以每个事件为基础进行操作,在大多数情况下,一个事件是文件中的一行。为了同时保存文件结构本身,您将需要使用假脱机目录源并激活 fileHeader:
fileHeader false Whether to add a header storing the absolute path filename.
将其设为真。它将提供一个 %{file} 属性,您可以在您的 hdfs 接收器路径规范中引用它。