flume
    多种适配,多样化的数据收集
    核心概念
        event:一条消息
        client:访问者
        agent:
            重要组件Sources、Channels、Sinks。Interspactor、Selecter
        
        
kafka
    吞吐量大,高并发场景下使用

注意:flume的agent配置文件不允许有空格。

一、flume打印内容到控制台
        1、创建一个agent(使用avroSource接收网络流在flume的控制台打印)配置文件agent1.conf
            cd /usr/local/flume/
            vi /conf/agent1.conf
                agent1.sources=as1
                agent1.channels=c1
                agent1.sinks=s1

agent1.sources.as1.type=avro
                agent1.sources.as1.bind=0.0.0.0            ##接收任意ip发送的数据
                agent1.sources.as1.port=21111            ##在21111端口上监听
                agent1.sources.as1.channels=c1
                agent1.channels.c1.type=memory

agent1.sinks.s1.type=logger
                agent1.sinks.s1.channel=c1
        2、启动agent1(每30秒检查agent1.conf文件一次,检查该文件是否有变化,有变化则马上生效),将输出打印在控制台上
            bin/flume-ng agent --conf conf/ -Dflume.root.logger=DEBUG,console -n agent1 -f conf/agent1.conf
        3、使用java代码生产log4j日志输出到flume
            
        3、验证agent,一种是flume控制台测试,一种是java代码通过log4j写日志
            1)bin/flume-ng avro-client --conf conf/ -H localhost -p 21111 -F ~/a        ##将~目录下的a文件内容写入到flume
            2)使用java类将log4j的日志写入到flume的agent中
                log4j.properties配置文件
                    log4j.rootLogger=INFO,flume
                    log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
                    log4j.appender.flume.Hostname = 192.168.1.33                                    ##flume启动agent所在的节点ip
                    log4j.appender.flume.Port = 21111                                                ##flume启动agent监听的端口号
                    log4j.appender.flume.UnsafeMode = true
                
                java代码    
                    public class FlumeProducer {
                        public static void main(String[] args) throws Exception {
                            final Logger logger = Logger.getLogger(FlumeProducer.class);
                            while (true) {
                                logger.info("logger datetime :" + System.currentTimeMillis());
                                Thread.sleep(1000);
                            }
                        }
                    }

二、flume生成avroLog文件写入到hdfs中,存放到不同的/IP/日期/文件夹中
        1、创建一个agent(使用avroSource接收网络流写入到hdfs)配置文件agent2.conf
            cd /usr/local/flume/
            vi /conf/agent2.conf
                agent2.sources=source1
                agent2.channels=channel1
                agent2.sinks=sink1

agent2.sources.source1.type=avro
                agent2.sources.source1.bind=0.0.0.0
                agent2.sources.source1.port=44444
                agent2.sources.source1.channels=channel1
                
                agent2.sources.source1.interceptors = i1 i2
                agent2.sources.source1.interceptors.i1.type = org.apache.flume.interceptor.HostInterceptor$Builder
                agent2.sources.source1.interceptors.i1.preserveExisting = true
                agent2.sources.source1.interceptors.i1.useIP = true
                agent2.sources.source1.interceptors.i2.type = org.apache.flume.interceptor.TimestampInterceptor$Builder

agent2.channels.channel1.type=memory
                agent2.channels.channel1.capacity=10000
                agent2.channels.channel1.transactionCapacity=1000
                agent2.channels.channel1.keep-alive=30

agent2.sinks.sink1.type=hdfs
                agent2.sinks.sink1.channel=channel1
                agent2.sinks.sink1.hdfs.path=hdfs://ns1/flume/events/%{host}/%Y-%m-%d            ##flume将文件写入到hdfs的路径
                agent2.sinks.sink1.hdfs.filePrefix=avroLog-                                        ##flume生成文件的前缀
                agent2.sinks.sink1.hdfs.fileSuffix=.log                                            ##flume生成文件的后缀
                agent2.sinks.sink1.hdfs.fileType=DataStream                                        ##flume生成文件的类型,DataStream或SequenceFile
                agent2.sinks.sink1.hdfs.writeFormat=Text
                agent2.sinks.sink1.hdfs.rollInterval=0
                agent2.sinks.sink1.hdfs.rollSize=10000
                agent2.sinks.sink1.hdfs.rollCount=0
                agent2.sinks.sink1.hdfs.idleTimeout=5
        2、启动agent2(每30秒检查agent1.conf文件一次,检查该文件是否有变化,有变化则马上生效),将内容写入到hdfs的/flume/events/中
            bin/flume-ng agent --conf conf/ -Dflume.monitoring.type=http -Dflume.monitoring.port=34343 -n agent2 -f conf/agent2.conf
        3、使用java代码生产log4j日志输出到flume
            log4j.properties配置文件
                log4j.rootLogger=INFO,flume
                log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
                log4j.appender.flume.Hostname = 192.168.1.33                                    ##flume启动agent所在的节点ip
                log4j.appender.flume.Port = 21111                                                ##flume启动agent监听的端口号
                log4j.appender.flume.UnsafeMode = true
                
            java代码    
                public class FlumeProducer {
                    public static void main(String[] args) throws Exception {
                        final Logger logger = Logger.getLogger(FlumeProducer.class);
                        while (true) {
                            logger.info("logger datetime :" + System.currentTimeMillis());
                            Thread.sleep(1000);
                        }
                    }
                }            
        4、验证agent2是否成功写入到hdfs的/flume/events/文件夹下
            hdfs dfs -ls -h -R /flume/events/IP/yyyy-MM-dd/                                        ##如果存在一个或多个avroLog.timestamp.log文件表示成功
            
  三、使用Socket客户端写入到flume中,flume保存文件到本地

    1、创建agent_tcp.conf(接收socket客户端发送的数据然后写入到Linux本地)

      cd /usr/local/flume

      vi conf/agent_tcp.conf

        agent_tcp.sources=as1
        agent_tcp.channels=c1
        agent_tcp.sinks=s1

        agent_tcp.sources.as1.type=syslogtcp
        agent_tcp.sources.as1.bind=0.0.0.0
        agent_tcp.sources.as1.port=21111
        agent_tcp.sources.as1.channels=c1

        agent_tcp.channels.c1.type=memory
        agent_tcp.channels.c1.capacity=10000
        agent_tcp.channels.c1.transactionCapacity=10000
        agent_tcp.channels.c1.keep-alive=120
        agent_tcp.channels.c1.byteCapacityBufferPercentage=20
        agent_tcp.channels.c1.byteCapacity=800000
  
        agent_tcp.sinks.s1.type=file_roll
        agent_tcp.sinks.s1.rollSize=10000
        agent_tcp.sinks.s1.sink.directory =/home/lefuBigDataDev/clouds/flume/logs
        agent_tcp.sinks.s1.channel=c1
    2、启动flume的agent_tcp.conf

      bin/flume-ng agent -n agent_tcp -c conf/ -f conf/agent_tcp.conf -Dflume.root.logger=DEBUG,console

    3、java代码socket客户端

      package com.left.clouds.cluster.flume.test;

  import java.io.InputStream;
              import java.io.OutputStream;
              import java.net.Socket;

              import org.junit.Before;
              import org.junit.Test;

        public class TestFlume {

            private Socket client = null;
                  InputStream in = null;
                  OutputStream out = null;
                
                  @Before
                  public void before(){
                      try {
                          client = new Socket("192.168.0.218", 21111);
                      } catch (Exception e) {
                          e.printStackTrace();
                      }
                  }
                
                  @Test
                  public void sender() {
                      try {
                          out = client.getOutputStream();
                          int i = 0;
                          while(true){
                              out.write(("device-"+(i++)+("\n")).getBytes());
                              Thread.sleep(4000);
                              System.out.println("第:"+i+"次发送...");
                          }
                      } catch (Exception e) {
                          e.printStackTrace();
                      }                
                  }

        }

Flume-1.6.0中包含了kafka的source,agent配置文件实例如下
front_agent_kafka.sources=as1
front_agent_kafka.channels=c1
front_agent_kafka.sinks=s1

front_agent_kafka.sources.as1.type=org.apache.flume.source.kafka.KafkaSource
front_agent_kafka.sources.as1.zookeeperConnect=192.168.0.20:2181
front_agent_kafka.sources.as1.topic=test
front_agent_kafka.sources.as1.groupId=flume
front_agent_kafka.sources.as1.batchSize=100
front_agent_kafka.sources.as1.channels=c1
                              
front_agent_kafka.channels.c1.type=memory
front_agent_kafka.channels.c1.capacity=10000
front_agent_kafka.channels.c1.transactionCapacity=10000
front_agent_kafka.channels.c1.keep-alive=120
front_agent_kafka.channels.c1.byteCapacityBufferPercentage=20
front_agent_kafka.channels.c1.byteCapacity=800000

front_agent_kafka.sinks.s1.type=com.lefukj.flume.sinks.JdbcSink
front_agent_kafka.sinks.s1.channel=c1

flume-agent实例的更多相关文章

  1. Flume Source 实例

    Flume Source 实例 Avro Source 监听avro端口,接收外部avro客户端数据流.跟前面的agent的Avro Sink可以组成多层拓扑结构. 1 2 3 4 5 6 7 8 9 ...

  2. 《OD大数据实战》Flume入门实例

    一.netcat source + memory channel + logger sink 1. 修改配置 1)修改$FLUME_HOME/conf下的flume-env.sh文件,修改内容如下 e ...

  3. 一个flume agent异常的解决过程记录

    今天在使用flume agent的时候,遇到了一个异常,  现把解决的过程记录如下: 问题的背景: 我使用flume agent 来接收从storm topology发送下来的accesslog , ...

  4. flume agent的内部原理

    flume agent 内部原理   1.Source采集数据,EventBuilder.withBody(body)将数据封装成Event对象,source.getChannelProcessor( ...

  5. flume+sparkStreaming实例 实时监控文件demo

    1,flume所在的节点不和spark同一个集群  v50和 10-15节点 flume在v50里面 flume-agent.conf spark是开的work节点,就是单点计算节点,不涉及到mast ...

  6. 使用Flume消费Kafka数据到HDFS

    1.概述 对于数据的转发,Kafka是一个不错的选择.Kafka能够装载数据到消息队列,然后等待其他业务场景去消费这些数据,Kafka的应用接口API非常的丰富,支持各种存储介质,例如HDFS.HBa ...

  7. flume安装及入门实例

    1. 如何安装? 1)将下载的flume包,解压到/home/hadoop目录中 2)修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置 root@m1:/home/hadoo ...

  8. Flume 多个agent串联

    多个agent串联 采集需求:比如业务系统使用log4j生成的日志,日志内容不断增加,需要把追加到日志文件中的数据实时采集到hdfs,使用agent串联 根据需求,首先定义以下3大要素 第一台flum ...

  9. 大数据学习day35----flume01-------1 agent(关于agent的一些问题),2 event,3 有关agent和event的一些问题,4 transaction(事务控制机制),5 flume安装 6.Flume入门案例

    具体见文档,以下只是简单笔记(内容不全) 1.agent Flume中最核心的角色是agent,flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道.对于每一个Age ...

  10. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

随机推荐

  1. vector容器经常用法

    容器简单介绍 定义及初始化 末尾插入元素 遍历 size 函数是能够动态添加的 通过下标操作添加改变vector内容不是安全的操作 仅能对已存在元素进行下标操作不存在会crash 将元素一个容器复制给 ...

  2. Chapter 7. Dependency Management Basics 依赖管理基础

    This chapter introduces some of the basics of dependency management in Gradle. 7.1. What is dependen ...

  3. 矩阵快速幂(入门) 学习笔记hdu1005, hdu1575, hdu1757

    矩阵快速幂是基于普通的快速幂的一种扩展,如果不知道的快速幂的请参见http://www.cnblogs.com/Howe-Young/p/4097277.html.二进制这个东西太神奇了,好多优秀的算 ...

  4. 读书笔记--用Python写网络爬虫01--网络爬虫简介

    Wiki - Web crawler 百度百科 - 网络爬虫 1.1 网络爬虫何时使用 用于快速自动地获取网络信息,避免重复性的手工操作. 1.2 网络爬虫是否合法 网络爬虫目前人处于早期的蛮荒阶段, ...

  5. Java学习之路(一)了解Java

    Java“白皮书”的关键术语 1)简单性 相对于C++:没有头文件.指针运算.结构.联合.操作符重载.虚基类. 另一方面是小:java微型版(Java Micro Edition)用于嵌入式设备 2) ...

  6. TFS统计编码行数语句

    ****** Script for SelectTopNRows command from SSMS ******/ SELECT TeamProjectProjectNodeName 项目名称 ,c ...

  7. 【转】C#注册快捷键

    转自:http://blog.csdn.net/xiahn1a/article/details/42561015 这里需要引用到“user32.dll”.对于Win32的API,调用起来还是需要dll ...

  8. windows Server 2003修改远程连接限制

    调整最大远程连接数: 1.开始->控制面板->添加或删除程序->添加/删除windows组件->选择“终端服务器”进行安装. 2.开始->运行->gpedit.ms ...

  9. Oracle数据库简介

    Oracle数据库简介 一.介绍 Oracle数据库系统是美国Oracle(甲骨文)公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(Client/Server,C/S)或浏览 ...

  10. 1.2 Coin 项目

    自2009年起,Coin便是Java 7(和Java 8)中一个开源的子项目.创建Coin项目是为了反映Java语言中的微小变动: 修改Java语言,按不同的修改方式及其复杂度依次分为:类库.工具提供 ...