gpt4 book ai didi

hadoop - Flume - 整个文件可以被视为 Flume 中的事件吗?

转载 作者:可可西里 更新时间:2023-11-01 14:28:43 25 4
gpt4 key购买 nike

我有一个用例,我需要将文件从目录提取到 HDFS。作为 POC,我在 Flume 中使用了简单的目录假脱机,我在其中指定了源、接收器和 channel ,它工作正常。缺点是我必须为进入不同文件夹的多种文件类型维护多个目录,以便更好地控制文件大小和其他参数,同时使配置重复,但很容易。

作为替代方案,有人建议我使用正则表达式拦截器,其中多个文件将驻留在单个目录中,并根据文件中的字符串路由到 HDFS 中的特定目录。我期望的文件类型是 CSV 文件,其中第一行是标题,后续行是逗号分隔值。

考虑到这一点,我有几个问题。

  1. 拦截器如何处理文件?
  2. 假定 CSV 中的标题行类似于 ID, Name,下一行是 ID 和名称,同一目录中的另一个文件将具有 Name, Address 下一行是名称和地址,拦截器和 channel 配置如何才能将其路由到不同的 HDFS 目录?
  3. 拦截器如何处理明显与正则表达式不匹配的后续行?
  4. 整个文件是否会构成一个事件,或者一个文件实际上可以是多个事件吗?

请告诉我。谢谢!

最佳答案

对于初学者来说,flume 不适用于文件本身,而是一种叫做事件的东西。事件是 Avro 结构,可以包含任何内容,通常是一行,但在您的情况下它可能是整个文件。

拦截器使您能够从事件中提取信息并将其添加到该事件的 header 中。后者可用于配置目标目录结构。

在您的特定情况下,您可能希望编写一个解析器来分析您的事件内容并设置 header 值,例如子路径:

if (line.contains("Address")) {
event.getHeaders().put("subpath", "address");
else if (line.contains("ID")) {
event.getHeaders().put("subpath", "id");
}

然后您可以在您的 hdfs-sink 配置中引用它,如下所示:

hdfs-a1.sinks.hdfs-sink.hdfs.path = hdfs://cluster/path/%{subpath}

关于你的问题多个文件是否可以构成一个事件:是的,这是可能的,但不是假脱机源。您必须实现一个与配置的 Avro 源通信的客户端类。您必须将文件通过管道传输到事件中并将其发送出去。然后,您还可以在那里设置 header ,而不是使用拦截器。

关于hadoop - Flume - 整个文件可以被视为 Flume 中的事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27805936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com