gpt4 book ai didi

hadoop - 使用水槽将文件从假脱机目录移动到 HDFS

转载 作者:可可西里 更新时间:2023-11-01 14:49:40 27 4
gpt4 key购买 nike

我正在为我公司的 POC 实现一个小型 hadoop 集群。我正在尝试使用 Flume 将文件导入 HDFS。每个文件都包含这样的 JSON 对象(每个文件 1 个“长”行):

{ "objectType" : [ { JSON Object } , { JSON Object }, ... ] }

“objectType”是数组中对象的类型(例如:事件、用户...)。

这些文件稍后将根据“objectType”由多个任务处理。

我正在使用 spoolDir 源和 HDFS 接收器。

我的问题是:

  • 是否可以在 flume 写入 HDFS 时保留源文件名(文件名是唯一的,因为它们的名称中包含时间戳和 UUID)

  • 有没有办法将“deserializer.maxLineLength”设置为无限值(而不是设置一个高值)?

  • 我真的不想丢失数据。哪个 channel 最好,JDBC 还是 File? (我没有高吞吐量的流程)

我的限制是我必须尽可能多地使用开箱即用的水槽(没有自定义元素)。

感谢您的帮助!

最佳答案

Is it possible to keep the source filename when flume write into HDFS (filenames are unique as they contains a timestamp and a UUID in their name)

是的。使用 spooldir 源,确保 fileheader 属性设置为 true。这将包括带有记录的文件名。

agent-1.sources.src-1.fileHeader = true

然后对于您的接收器,使用 avro_event 序列化程序在您的 avro flume 事件记录的 header 中捕获文件名。

agent-1.sinks.snk-1.serializer = avro_event

avro 记录符合此模式。 https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/FlumeEventAvroEventSerializer.java#L30

Is there a way to set "deserializer.maxLineLength" to an unlimited value (instead of setting a high value)?

deserializer.maxLineLength 没有无限配置。 https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/LineDeserializer.java#L143

I really dn't want to loose data. Which channel is the best, JDBC or File? (I do not have a flow with high throughput)

这可能取决于您的数据库或文件系统的弹性选项。如果你有一个带有备份的冗余数据库,那么 JDBC。如果你有一个有弹性的持久文件系统,那就去文件吧。

关于hadoop - 使用水槽将文件从假脱机目录移动到 HDFS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621671/

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