• 浅谈flume


    flume
    做日志收集的工具,将数据源导入到指定目标中。flume之间可以相互连接
    组件
        source:如何从数据源中取数据,可以认为是两种主动source(主动取数据)和被动source(推给source,source作为服务接收数据)
        channel:数据缓冲区
        sink:如何将数据写到目标中
        上面3个组件都在一个agent中,agent是一个任务
    安装(依赖jdk)
    使用netcat Source做个示例
    vi test     # 创建一个agent配置文件,用来配置sink,source,channel
    内容如下
        a1.sources = r1     # agent组件名字叫做a1,sources组件名字叫做r1
        a1.sinks = k1        # sinks组件叫做k1
        a1.channels = c1
        a1.sources.r1.type = netcat   # source的类型是netcat
        a1.sources.r1.bind = localhost    # 监听地址
        a1.sources.r1.port = 44444        # 监听端口
        a1.sinks.k1.type = logger        # sink类型是logger
        a1.channels.c1.type = memory    # channel的类型是内存缓冲区
        a1.channels.c1.capacity = 1000    # 大小(字节为单位)
        a1.channels.c1.transactionCapacity = 100
        a1.sources.r1.channels = c1
        a1.sinks.k1.channel = c1
    如果要做flume负载均衡,可以设置多个sink,比如:a1.sinks=k1 k2,默认是轮询策略(round_robin)
    启动
    ./bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
        --conf或者-c       # flume的整个配置目录(这里是目录不是文件,就是flume的conf目录)
        --conf-file或者-f     # agent的配置文件
        --name或者-n        # agent名字
        -Dflume.root.logger   # logger的日志级别(info级别)和logger输出日志到哪里去(console表示控制台)
    可以用 telnet ip 端口 命令进行测试
    常用source配置
        1.avro(被动的)基于rpc协议进行数据传输,它传输的数据格式是avro格式,只能接收传过来avro格式的数据
            a1.sources.r1.type = avro
            a1.sources.r1.bind = 192.168.237.130     # 配置监听的ip
            a1.sources.r1.port = 4444        # 配置监听的端口
        2.Spooling Directory(主动)主动读目录中的数据
            a1.sources.r1.type = spooldir
            a1.sources.r1.spoolDir=/opt/flume    # 指定目录
        3.netcat(被动)是个服务,所以一定会监听某个端口,基于tcp协议的
            a1.sources.r1.type = netcat   # source的类型是netcat
            a1.sources.r1.bind = localhost    # 监听地址
            a1.sources.r1.port = 44444        # 监听端口
        4.exec(主动)通过命令主动从本地获取数据
            a1.sources.r1.type = exec
            a1.sources.r1.port = tail -F /opt/data/access.log        # 通过什么命令来读数据
        5.kafka
        6.netcat
        7.syslog(被动)
    常用sink配置
        1.avro
            a1.sinks.k1.type = avro
            a1.sinks.k1.hostname = 192.168.237.130         # 服务端的主机名
            a1.sinks.k1.type = 4444            # 服务端的端口
        2.file roll写到目录中
            a1.sinks.k1.type = file_roll
            a1.sinks.k1.sink.directory = /opt/sink        # 指定写到哪个目录中,需要手动创建目录
            a1.sinks.k1.sink.rollInterval = 600            # 每10分钟写成一个文件
        3.HDFS
            a1.sinks.k1.type = hdfs
            a1.sinks.k1.hdfs.path = hdfs://node1:900/flume/data  # 只当hdfs目录,如果是高可用的HDFS直接使用服务名就可以
            下面三个配置一定要配置,如果不配置生成的文件会很乱
            a1.sinks.k1.hdfs.rollInterval = 0            # 根据时间间隔生成文件,0表示不启用,秒作为单位
            a1.sinks.k1.hdfs.rollSize = 10240000                 # 根据文件大小生产文件,kb作为单位,0为不启用,这里用10M
            a1.sinks.k1.hdfs.rollCount = 0                # 根据写的次数生成文件,0表示不启用
            a1.sinks.k1.hdfs.idleTimeout = 5        # 超时多少秒后把这个文件关闭,0是不关闭的,在tmp目录中一直会有个文件,这里设置5s,如果5s后没有新数据来就关闭
            a1.sinks.k1.hhdfs.fileType = DataStream # 文件类型,默认是SequenceFile,DataStream 不压缩的
            a1.sinks.k1.hdfs.batchSize = 1000        # 批处理的数据大小,可以加快写的速度
            为了方便管理可以设置以日期作为目录结构
            a1.sinks.k1.hdfs.useLocalTimeStamp = true  # 默认false,开启使用本地时间戳作为格式,然后a1.sinks.k1.hdfs.path = hdfs://node1:900/flume/data/%Y/%m/%d以年月日做目录
        4.null就是Linux中/dev/null
        5.ElasticSearch
        6.hbase
        7.kafka(需要flume1.6.0及以上,因为之前的版本需要额外下载插件)
            a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
            a1.sinks.k1.topic = test            # 设置topic
            a1.sinks.k1.kafka.bootstrap.servers = 192.168.237.130:9092,192.168.237.129:9092,192.168.237.128:9092    # 设置kafka的zookeeper
            a1.sinks.k1.requiredAcks = 1  
            a1.sinks.k1.batchSize = 20
    补充
    1.flume占用的内存是jvm的,如果flume内存不够了,修改conf/flume-env.sh设置堆内存和栈内存export JAVA_OPTS="-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote"并打开
    2.如果想写到数据库中就需要自定义sink了,需要写个类继承某个类实现方法,里面的process就是写数据方法,打包放到flume中lib目录中,然后就配置
      a1.channels = c1
      a1.sinks = k1
      a1.sinks.k1.type = org.example.MySink
      a1.sinks.k1.channel = c1
      具体可以看开发向导中找sink,也可以自定义source,process方法就是读数据
      网址http://flume.apache.org/releases/content/1.9.0/FlumeDeveloperGuide.html的Client
    3.flume通过环境变量找到Hadoop的配置文件和jar包,所以flume所在的机器上一定要配置Hadoop_home,但是可以不跑Hadoop进程。如果Hadoop高可用还要配置zookeeper的环境变量

  • 相关阅读:
    SQLServer.Produce的研究
    petshop以异步方式插入订单的疑惑(后面理解了)
    SQLHelper.GetCachedParameters方法之缓存
    DALFactory抽象工厂理解
    petshop异时消息处理队列抽象工厂
    AJAX学习2(经典)
    对SQLServerDAL.order的研究(不错,有心得)
    Invertory类对商品库存的更新困惑解决了
    AJAX学习1
    用DataSet读取xml文件
  • 原文地址:https://www.cnblogs.com/timeTraveler/p/10753529.html
Copyright © 2020-2023  润新知