flume1.9安装测试

1.下载

下载地址:Apache flume 1.9.0

2.部署

  • 创建部署目录,并上传安装包
    • mkdir sys && rz -be
  • 解压安装包
    • tar -zxvf apache-flume-1.9.0-bin.tar.gz
  • 设置环境变量
    • vi ~/.bash_profile
    • source ~/.bash_profile
  • 修改配置文件
    • cd $FLUME_HOME/conf
    • mv flume-env.sh.template flume-env.sh
    • vi flume-env.sh,修改JAVA_HOME的值,需要安装java8以上版本;如有需要也可适当调整JAVA_OPTS参数

3.配置

  • 1.实时监控单个日志文件变化,并写入hdfs

    • mv flume-conf.properties.template flume-conf.properties
    • 修改flume-conf,配置source
    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    ## configure the source
    # exec 指的是命令
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /home/bigdata/logs/test.log
    a1.sources.r1.channels = c1
    
    • 修改flume-conf,配置sink
    # Config the sink
    #下沉目标
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.channel = c1
    #指定目录, flume帮做目的替换
    a1.sinks.k1.hdfs.path = hdfs://bi-name1/data/logs/trace_logs/111/%y-%m-%d/
    #文件的命名, 前缀
    a1.sinks.k1.hdfs.filePrefix = warn
    
    #10 分钟就改目录,生成新的目录  
    a1.sinks.k1.hdfs.round = true
    a1.sinks.k1.hdfs.roundValue = 10
    a1.sinks.k1.hdfs.roundUnit = minute
    
    #时间:每3s滚动生成一个新的文件 0表示不使用时间来滚动
    a1.sinks.k1.hdfs.rollInterval = 0
    
    #空间: 文件滚动的大小限制(bytes) 当达到1kb时滚动生成新的文件
    a1.sinks.k1.hdfs.rollSize = 1024
    
    #事件:写入多少个event数据后滚动文件(事件个数),滚动生成新的文件
    a1.sinks.k1.hdfs.rollCount = 20
    
    #5个事件就开始往里面写入
    a1.sinks.k1.hdfs.batchSize = 5
    
    #用本地时间格式化目录
    a1.sinks.k1.hdfs.useLocalTimeStamp = true
    
    #下沉后, 生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
    a1.sinks.k1.hdfs.fileType = DataStream    
    
    • 修改flume-conf,配置channel
    # Use a channel which buffers events in memory
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    
  • 2.实时监控目录日志文件变化,并写入hdfs

    • 配置source
     # source类型
     a1.sources.s1.type = TAILDIR
     # 元数据位置
     a1.sources.s1.positionFile = /home/bigdata/file/flume/taildir_position.json
     # 监控的目录
     a1.sources.s1.filegroups = f1
     a1.sources.s1.filegroups.f1=/home/bigdata/logs/.*log
     a1.sources.s1.fileHeader = true
    
    • sink和channel配置同上
  • 3.实时监控目录日志文件变化,并写入kafka,配置如下

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    ## configure the source
    # exec 指的是命令
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /home/bigdata/logs/test.log
    a1.sources.r1.channels = c1
    
    ## configure the sink
    a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
    a1.sinks.k1.channel=c1
    a1.sinks.k1.kafka.bootstrap.servers = broker1:9092,broker2:9092,broker3:9092
    a1.sinks.k1.kafka.topic = test1
    #指定必须有多少个分区副本接收到了消息,生产者才认为消息发送成功,
    ##0:Never wait,1:wait for leader only,-1:wait for all replicas;default:1
    a1.sinks.k1.kafka.producer.acks=0
    
    ## configure the channel
    a1.channels.c1.type = file
    a1.channels.c1.checkpointDir = /data/flume/checkpoint
    a1.channels.c1.dataDirs = /data/flume/data
    
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    

4.运行并测试

  • 启动Flume:
    $ bin/flume-ng agent -n a1 -c conf -f conf/flume.conf -Dflume.root.logger=INFO,console

  • 使用python2.7追加写入日志文件

    #-*- coding: utf-8 -*-
    import time
    import sys
    import io
    
    reload(sys)
    sys.setdefaultencoding('utf-8')
    filePath="/home/bigdata/logs/test.log"
    
    def writeLog():
        ff = io.open(filePath,"ab+")
        while True:
          time.sleep(1)
          tm = str(time.time())
          json='{"name":"zhangsan","age":20}'
          ff.write(str(json+"\n"))
    
    if __name__=="__main__":
        print(str(time.time()))
        writeLog()
    
    
  • 查看kafka是否收到消息

    $ kafka-console-consumer --bootstrap-server slave199:9092 --topic test1

5.bug修复

6.补充

  • python2.7 io.open()的mode参数说明
关于open()的mode参数:
'r':读 ; 'w':写 ; 'a':追加
'r+' == r+w(可读可写,文件若不存在就报错(IOError))
'w+' == w+r(可读可写,文件若不存在就创建)
'a+' ==a+r(可追加可写,文件若不存在就创建)
如果是二进制文件,就都加一个b就好啦:
'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'
  • Flume启动命令说明
flume-ng agent  --conf  conf  --conf-file  conf/file.log --name agent1 -Dflume.root.logger=DEBUG, console
    -c (--conf) : flume的conf文件路径
    -f (--conf-file) : 自定义的flume配置文件
    -n (--name): 自定义的flume配置文件中agent的name
  • flume sink hdfs属性说明:
  type HDFS
  hdfs.path 必填,HDFS 目录路径 (eg hdfs://namenode/flume/webdata/)
  hdfs.filePrefix FlumeData Flume在目录下创建文件的名称前缀
  hdfs.fileSuffix – 追加到文件的名称后缀 (eg .avro - 注: 日期时间不会自动添加)
  hdfs.inUsePrefix – Flume正在处理的文件所加的前缀
  hdfs.inUseSuffix .tmp Flume正在处理的文件所加的后缀
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值