flume avro java_Flume:目录到Avro - > Avro到HDFS - 转移后无效avro

用户使用Flume尝试将AVRO文件从目录转移到HDFS,但在HDFS上生成的文件无法被识别为有效AVRO文件。Flume配置包括SpoolDir源、AVRO接收器和HDFS接收器。问题可能在于HDFS接收器在写入文件时丢失了架构信息。尝试了不同的`hdfs.fileType`设置,但无论是DataStream还是SequenceFile,文件都无效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有用户编写AVRO文件,我想使用Flume使用Flume将所有这些文件移动到HDFS中 . 所以我以后可以使用Hive或Pig来查询/分析数据 .

在客户端我安装了水槽,并有一个SpoolDir源和AVRO接收器像这样:

a1.sources = src1

a1.sinks = sink1

a1.channels = c1

a1.channels.c1.type = memory

a1.sources.src1.type = spooldir

a1.sources.src1.channels = c1

a1.sources.src1.spoolDir = {directory}

a1.sources.src1.fileHeader = true

a1.sources.src1.deserializer = avro

a1.sinks.sink1.type = avro

a1.sinks.sink1.channel = c1

a1.sinks.sink1.hostname = {IP}

a1.sinks.sink1.port = 41414

在hadoop集群上,我有这个AVRO源和HDFS接收器:

a1.sources = avro1

a1.sinks = sink1

a1.channels = c1

a1.channels.c1.type = memory

a1.sources.avro1.type = avro

a1.sources.avro1.channels = c1

a1.sources.avro1.bind = 0.0.0.0

a1.sources.avro1.port = 41414

a1.sinks.sink1.type = hdfs

a1.sinks.sink1.channel = c1

a1.sinks.sink1.hdfs.path = {hdfs dir}

a1.sinks.sink1.hdfs.fileSuffix = .avro

a1.sinks.sink1.hdfs.rollSize = 67108864

a1.sinks.sink1.hdfs.fileType = DataStream

问题是HDFS上的文件不是有效的AVRO文件!我正在使用hue UI检查文件是否是有效的AVRO文件 . 如果我将我在电脑上生成的AVRO I文件上传到集群,我可以看到它的内容很好 . 但来自水槽的文件不是有效的AVRO文件 .

我尝试了包含在水槽中但没有工作的水槽avro客户端,因为它每行发送一个水槽事件打破了avro文件,使用 deserializer = avro 修复了 spooldir 源 . 所以我认为在编写文件时问题出在HDFS接收器上 .

使用 hdfs.fileType = DataStream 它会从avro字段而不是整个avro文件中写入值,从而丢失所有架构信息 . 如果我使用 hdfs.fileType = SequenceFile ,文件由于某种原因无效 .

有任何想法吗?

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值