我正在为公司的poc实现一个小型hadoop集群。我正在尝试用flume将文件导入hdfs。每个文件都包含类似这样的json对象(每个文件1行):
{ "objectType" : [ { JSON Object } , { JSON Object }, ... ] }
“objecttype”是数组中对象的类型(例如:事件、用户等)。
这些文件稍后将由多个任务处理,具体取决于“objecttype”。
我正在使用spooldir源和hdfs接收器。
我的问题是:
flume写入hdfs时是否可以保留源文件名(文件名是唯一的,因为它们的名称中包含时间戳和uuid)
有没有办法将“deserializer.maxlinength”设置为一个无限值(而不是设置一个高值)?
我真的不想泄露数据。哪个频道最好,jdbc还是文件(我没有高吞吐量的流)
我的限制是我必须尽可能多地使用flume开箱即用(没有自定义元素)。
谢谢你的帮助!
1条答案
按热度按时间4ngedf3f1#
flume写入hdfs时是否可以保留源文件名(文件名是唯一的,因为它们的名称中包含时间戳和uuid)
对。对于spooldir源,确保fileheader属性设置为true。这将包括文件名和记录。
然后,对于您的接收器,使用avro\u事件序列化程序捕获avro flume事件记录头中的文件名。
avro记录符合这个模式。https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/flumeeventavroeventserializer.java#l30
有没有办法将“deserializer.maxlinength”设置为一个无限值(而不是设置一个高值)?
deserializer.maxlinelength没有无限配置。https://github.com/apache/flume/blob/trunk/flume-ng-core/src/main/java/org/apache/flume/serialization/linedeserializer.java#l143
我真的不想泄露数据。哪个频道最好,jdbc还是文件(我没有高吞吐量的流)
这可能取决于数据库或文件系统的弹性选项。如果您有一个带有备份的冗余数据库,那么jdbc。如果您有一个持久的文件系统是有弹性的,那么就转到文件系统。