将在线数据收集到hdfs时的水槽丢失数据

时间:2015-01-21 10:21:29

标签: hadoop flume-ng

我使用 flume-ng 1.5 版本来收集日志。

数据流中有两个代理,它们分别位于两个主机上。

数据从agent1发送到agent2。

代理商的组成部分如下:

  

agent1:假脱机目录来源 - >文件频道 - > avro sink

     

agent2:avro source - >文件频道 - > hdfs sink

但它似乎丢失了大约1/1000百万数据的数据。 为了解决问题,我尝试了以下步骤:

  1. 查找代理日志:找不到任何错误或异常。
  2. 查找座席监控指标:来自频道的事件编号总是等于
  3. 分别通过hive查询统计数据编号和hdfs文件使用shell:两个数字相等且小于在线数据
  4. agent1&#39>的配置:

    #agent
    agent1.sources = src_spooldir
    agent1.channels = chan_file
    agent1.sinks = sink_avro
    
    #source
    agent1.sources.src_spooldir.type = spooldir
    agent1.sources.src_spooldir.spoolDir = /data/logs/flume-spooldir
    agent1.sources.src_spooldir.interceptors=i1
    
    #interceptors
    agent1.sources.src_spooldir.interceptors.i1.type=regex_extractor
    agent1.sources.src_spooldir.interceptors.i1.regex=(\\d{4}-\\d{2}-\\d{2}).*
    agent1.sources.src_spooldir.interceptors.i1.serializers=s1
    agent1.sources.src_spooldir.interceptors.i1.serializers.s1.name=dt
    
    #sink
    agent1.sinks.sink_avro.type = avro
    agent1.sinks.sink_avro.hostname = 10.235.2.212
    agent1.sinks.sink_avro.port = 9910
    
    #channel
    agent1.channels.chan_file.type = file
    agent1.channels.chan_file.checkpointDir = /data/flume/agent1/checkpoint
    agent1.channels.chan_file.dataDirs = /data/flume/agent1/data
    
    agent1.sources.src_spooldir.channels = chan_file
    agent1.sinks.sink_avro.channel = chan_file
    

    agent2&#39> s配置

    # agent 
    agent2.sources  = source1
    agent2.channels = channel1 
    agent2.sinks    = sink1 
    
    # source
    agent2.sources.source1.type     = avro
    agent2.sources.source1.bind     = 10.235.2.212
    agent2.sources.source1.port     = 9910
    
    # sink
    agent2.sinks.sink1.type= hdfs
    agent2.sinks.sink1.hdfs.fileType = DataStream
    agent2.sinks.sink1.hdfs.filePrefix = log
    agent2.sinks.sink1.hdfs.path = hdfs://hnd.hadoop.jsh:8020/data/%{dt}
    agent2.sinks.sink1.hdfs.rollInterval = 600
    agent2.sinks.sink1.hdfs.rollSize = 0
    agent2.sinks.sink1.hdfs.rollCount = 0
    agent2.sinks.sink1.hdfs.idleTimeout = 300
    agent2.sinks.sink1.hdfs.round = true
    agent2.sinks.sink1.hdfs.roundValue = 10
    agent2.sinks.sink1.hdfs.roundUnit = minute
    
    # channel
    agent2.channels.channel1.type   = file
    agent2.channels.channel1.checkpointDir = /data/flume/agent2/checkpoint
    agent2.channels.channel1.dataDirs = /data/flume/agent2/data
    
    agent2.sinks.sink1.channel      = channel1
    agent2.sources.source1.channels = channel1
    

    欢迎任何建议!

1 个答案:

答案 0 :(得分:0)

文件行deseriazer中存在一个错误,当遇到utf的某个特定字符时,该点在U + 10000和U + 10FFFF之间,它们在两个16位代码单元(称为代理对)的utf16中表示。