Hadoop Flume在HDFS中的输出文件末尾创建空行

Hadoop Flume在HDFS中的输出文件末尾创建空行,hadoop,flume,flume-ng,bigdata,Hadoop,Flume,Flume Ng,Bigdata,目前我使用的是Flume版本:1.5.2 Flume在HDFS中每个输出文件的末尾创建一个空行,这会导致源文件和目标文件的行数、文件大小和校验和不匹配 我试图覆盖参数roolSize、batchSize和appendNewline的默认值,但仍然不起作用 另外,水槽将EOL从CRLF(源文件)更改为LF(输出文件),这也会导致文件大小不同 下面是我正在使用的相关flume agent配置参数 agent1.sources = c1 agent1.sinks = c1s1 agent1.ch

目前我使用的是Flume版本:1.5.2

Flume在HDFS中每个输出文件的末尾创建一个空行,这会导致源文件和目标文件的行数、文件大小和校验和不匹配

我试图覆盖参数roolSize、batchSize和appendNewline的默认值,但仍然不起作用

另外,水槽将EOL从CRLF(源文件)更改为LF(输出文件),这也会导致文件大小不同

下面是我正在使用的相关flume agent配置参数

 agent1.sources = c1
 agent1.sinks = c1s1
 agent1.channels = ch1

 agent1.sources.c1.type = spooldir
 agent1.sources.c1.spoolDir = /home/biadmin/flume-test/sourcedata1
 agent1.sources.c1.bufferMaxLineLength = 80000
 agent1.sources.c1.channels = ch1
 agent1.sources.c1.fileHeader = true 
 agent1.sources.c1.fileHeaderKey = file
 #agent1.sources.c1.basenameHeader = true
 #agent1.sources.c1.fileHeaderKey = basenameHeaderKey
 #agent1.sources.c1.filePrefix = %{basename}
 agent1.sources.c1.inputCharset = UTF-8
 agent1.sources.c1.decodeErrorPolicy = IGNORE
 agent1.sources.c1.deserializer= LINE
 agent1.sources.c1.deserializer.maxLineLength =  50000
 agent1.sources.c1.deserializer=
 org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
agent1.sources.c1.interceptors = a b
agent1.sources.c1.interceptors.a.type  =     
org.apache.flume.interceptor.TimestampInterceptor$Builder
agent1.sources.c1.interceptors.b.type =
org.apache.flume.interceptor.HostInterceptor$Builder
agent1.sources.c1.interceptors.b.preserveExisting = false
agent1.sources.c1.interceptors.b.hostHeader = host

agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 1000
agent1.channels.ch1.transactionCapacity = 1000
agent1.channels.ch1.batchSize = 1000
agent1.channels.ch1.maxFileSize = 2073741824
agent1.channels.ch1.keep-alive = 5
agent1.sinks.c1s1.type = hdfs
agent1.sinks.c1s1.hdfs.path = hdfs://bivm.ibm.com:9000/user/biadmin/
flume/%y-%m-%d/%H%M
agent1.sinks.c1s1.hdfs.fileType = DataStream
agent1.sinks.c1s1.hdfs.filePrefix = %{file}
agent1.sinks.c1s1.hdfs.fileSuffix =.csv
agent1.sinks.c1s1.hdfs.writeFormat = Text
agent1.sinks.c1s1.hdfs.maxOpenFiles = 10
agent1.sinks.c1s1.hdfs.rollSize = 67000000
agent1.sinks.c1s1.hdfs.rollCount = 0
#agent1.sinks.c1s1.hdfs.rollInterval = 0
agent1.sinks.c1s1.hdfs.batchSize = 1000
agent1.sinks.c1s1.channel = ch1
#agent1.sinks.c1s1.hdfs.codeC = snappyCodec
agent1.sinks.c1s1.hdfs.serializer = text
agent1.sinks.c1s1.hdfs.serializer.appendNewline = false
hdfs.serializer.appendNewline未修复此问题。

有人能检查一下并提出建议吗

替换flume agent中的下一行

agent1.sinks.c1s1.serializer.appendNewline = false
用下面这句话告诉我进展如何

agent1.sinks.c1s1.hdfs.serializer.appendNewline = false

替换flume agent中的以下行

agent1.sinks.c1s1.serializer.appendNewline = false
用下面这句话告诉我进展如何

agent1.sinks.c1s1.hdfs.serializer.appendNewline = false
替换

agent1.sinks.c1s1.hdfs.serializer = text
agent1.sinks.c1s1.hdfs.serializer.appendNewline = false

不同之处在于序列化程序设置不是在hdfs前缀上设置的,而是直接在接收器名称上设置的

Flume文档应该有一些例子,因为我也遇到了一些问题,因为我没有发现序列化程序设置在不同级别的属性名上

有关Hdfs接收器的更多信息可在此处找到:

更换

agent1.sinks.c1s1.hdfs.serializer = text
agent1.sinks.c1s1.hdfs.serializer.appendNewline = false

不同之处在于序列化程序设置不是在hdfs前缀上设置的,而是直接在接收器名称上设置的

Flume文档应该有一些例子,因为我也遇到了一些问题,因为我没有发现序列化程序设置在不同级别的属性名上

有关Hdfs接收器的更多信息可在此处找到:

感谢拉杰什调查此事。我仍然得到文件大小的差异,如下所示。我仍然得到文件大小的差异。biadmin@bivm:~/Desktop/work/flume test/sourcedata1>hadoop fs-copyToLocalhdfs://bivm.ibm.com:9000/user/biadmin/flume/home/biadmin/Desktop/work/flume-test/sourcedata1/TermDefinition.csv.1452750041843.csvbiadmin@bivm:~/Desktop/work/flume test/sourcedata1>ls-l总计8-rw-r-r-1 biadmin biadmin 754 Jan 14 00:42TermDefinition.csv.1452750041843.csv-rwxrw rw-1 biadmin biadmin 767 Jan 14 00:06 TermDefinition.csv.已完成biadmin@bivm:~/Desktop/work/flume test/sourcedata1>我的观察结果是,由于文件大小不同,EOL从CRLF更改为LF。我无法共享我的conf文件,因为此注释部分对要填充的字符数有限制。你能建议如何解决这个问题吗?谢谢Rajesh的调查。我仍然得到文件大小的差异,如下所示。我仍然得到文件大小的差异。biadmin@bivm:~/Desktop/work/flume test/sourcedata1>hadoop fs-copyToLocalhdfs://bivm.ibm.com:9000/user/biadmin/flume/home/biadmin/Desktop/work/flume-test/sourcedata1/TermDefinition.csv.1452750041843.csvbiadmin@bivm:~/Desktop/work/flume test/sourcedata1>ls-l总计8-rw-r-r-1 biadmin biadmin 754 Jan 14 00:42TermDefinition.csv.1452750041843.csv-rwxrw rw-1 biadmin biadmin 767 Jan 14 00:06 TermDefinition.csv.已完成biadmin@bivm:~/Desktop/work/flume test/sourcedata1>我的观察结果是,由于文件大小不同,EOL从CRLF更改为LF。我无法共享我的conf文件,因为此注释部分对要填充的字符数有限制。你能建议如何解决这个问题吗。