Flume写入Amazon S3异常:文件含冗余乱码字符,如何解决?
问题原因
你的Flume HDFS Sink默认采用了SequenceFile格式,这是Hadoop专属的二进制序列化文件格式,会自动附加序列化的键值对元数据(就是你看到的SEQ!org.apache.hadoop.io.LongWritable这类内容),并非纯文本存储,所以下载打开后会混入额外的二进制信息。
解决方法
修改Flume配置,指定HDFS Sink以纯文本格式写入文件,需要添加以下几个配置项:
- 设置文件类型为数据流(纯文本模式):
agent.sinks.s3hdfs.hdfs.fileType = DataStream - 指定写入格式为文本:
agent.sinks.s3hdfs.hdfs.writeFormat = Text - 配置文本序列化器(确保内容以纯文本序列化):
agent.sinks.s3hdfs.serializer = text
修改后的完整配置如下:
agent.sinks = s3hdfs agent.sources = MySpooler agent.channels = channel agent.sinks.s3hdfs.type = hdfs agent.sinks.s3hdfs.hdfs.path = s3a://mybucket/test agent.sinks.s3hdfs.hdfs.filePrefix = FilePrefix agent.sinks.s3hdfs.channel = channel agent.sinks.s3hdfs.hdfs.useLocalTimeStamp = true # 添加纯文本相关配置 agent.sinks.s3hdfs.hdfs.fileType = DataStream agent.sinks.s3hdfs.hdfs.writeFormat = Text agent.sinks.s3hdfs.serializer = text agent.sources.MySpooler.channels = channel agent.sources.MySpooler.type = spooldir agent.sources.MySpooler.spoolDir = /flume_to_aws agent.sources.MySpooler.fileHeader = true agent.channels.channel.type = memory agent.channels.channel.capacity = 100
重启Flume agent后,再上传文件到S3,就能得到仅包含原始文本内容的文件了。
内容的提问来源于stack exchange,提问作者Astora
相关产品推荐
相关产品推荐

