我是Flume的新手,并且在配置方面遇到了一些问题。
我在Oracle VirtualBox上使用Hortonworks Sandbox HDP 2.6.5(如果这很重要)。
我的VM中有一个文本文件input_data.txt:…
尝试使用原始配置文件,并在conf文件中进行以下修改:
a1.sinks.sink1.channel = memoryChannel
请注意,你有一个额外的's',因为根据 Flume文档 正确的属性只是通道。我认为应该使用hdfs Sink来运行exec Source。
您还可能需要修复警告消息:未设置JAVA_HOME。
如果可能 - 每次源文件(/usr/AUX/output.txt)更改时,必须更新HDFS中的目标文件
好吧,问题是HDFS文件并不是要“更新”,因为HDFS是优化的FileSystem for appends。因此,推荐的模式是创建一个新文件。几乎所有的Hadoop处理引擎都可以读取整个目录,所以这应该不是问题。
就Flume而言,您应该使用假脱机目录源,而不是Exec Source cat 要么 tail -f 。否则,Flume代理程序不是为了“新文件”而设计为读取“文件更新” 的 看到 强> “文件。然后它标记为完整,稍后移动/忽略它们。
cat
tail -f
因此,你会想要这样的东西,它产生一个 时间戳 每次进程运行时都会生成文件。这足以让Flume说文件是新的,应该被读/处理。
some_process >> /flume_watcher/output_$(date +%s%3N).txt
看到 假脱机目录 ,和 为什么Exec Source不鼓励 (红色框)。
附加通知: HDP已弃用Flume ,并建议使用Hortonworks DataFlow(Apache Nifi)。即在HDP 3.0 Sandbox(如果有的话)中,你不会有Flume。因此,不要浪费太多时间在上面。