关于flume官方文档介绍可以去:http://flume.apache.org/看看。接下来就介绍一下关于我个人对flume的理解


  一、flume介绍:

  1.flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统并且可以进行在线分析。

  2.支持在日志系统中定制各类数据发送方,用于收集数据,同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。

  3.flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

  4.flume名词解释。

  Client:Client生产数据,运行在一个独立的线程。

  Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)

  Flow: Event从源点到达目的点的迁移的抽象。

  Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)

  Source: 数据收集组件。(source从Client收集数据,传递给Channel)

  Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)

  Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)


二、flume核心结构

  1.Agent:flume运行的核心是agent,运行的最小单位也是agent,一个flume就是一个JVM,他是一个完整的数据收集工具,包含有3个核心组件,source,channel和sink。一个时间Event可以从一个方向流向另一个方向。如下图所示:

2.source:数据的收集端。负责将数据捕获后进行特殊的格式化。source将数据封装到事件(Event)里,然后推入到Channel中,Flume提供了很多内置的Source, 支持 Avro, log4j, syslog 和 http post(body为json格式)。可以让应用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。 如果内置的Source无法满足需要, Flume还支持自定义Source。

    

3.channel:接Source和Sink的组件。数据流的临时存放地,对source中的数据进行缓冲,直到sink将其消费掉。

4.sink:从channel提取数据存放到中央化存储(hadoop/hbase)


三、flume命令和配置

1.flume安装

  1.下载
  2.tar
  3.环境变量
  4.验证flume是否成功
    $>flume-ng version //next generation.下一代.

2.配置flume   []

  命名agent上的组件

  a1.sources=r1;  //所有的源

  a1.sinks=k1;   //所有的sink

  a1.channels=c1; //所有的channel

  描述源的配置

  a1.sources.r1.type=netcat;  //源的类型是瑞士军刀

  a1.sources.r1.bind=localhost;  //绑定本机

  a1.sources.r1.port=44444;  //绑定44444端口

  描述sink

  a1.sinks.k1.type=loggger;  //将通道中提取的数据存储到日志中去

  使用在内存中进行缓冲的通道

  a1.channels.c1.type=memory;  //

  a1.channels.c1.capacity=1000;  //内存中可以存储1000个事件  

  a1.channels.c1.transactionCapacity = 100;  //

  把源和通道以及sink和通道进行绑定

  a1.sources.r1.channels=c1;  //一个源可以有多个通道

  a1.sinks.k1.channel=c1;    //一个sink只能有一个通道

3.运行flume

  1)启动flume agent

    $> bin/flume-ng agent -f /soft/flume/conf/hello.conf  -n a1 -Dflume.root.logger=INFO,console

    开启这个端口来接收来自8888端口的数据

  2)打开netcat,nc localhost 8888


四、测试source

1.配置seq压力源(源测试)

  a1.sources = r1
  a1.channels = c1
  a1.sinks = k1

  a1.sources.r1.type=seq
  a1.sources.r1.totalEvents=1000

  a1.sinks.k1.type=logger

  a1.channels.c1.type=memory

  a1.sources.r1.channels=c1

2.批量收集文件

  监控一个文件夹,静态文件。在收集完成之后会重命名为一个新的文件.compeleted

  1.配置文件[spool-r.conf] 

  a1.sources=r1
  a1.channels=c1;
  a1.sinks=k1

  a1.sources.r1.type=spooldir
  a1.sources.r1.spoolDir=/home/centos/spool
  a1.sources.r1.fileHeader=true

  a1.sinks.k1.type=loger
  a1.channels.c1.type=memory

  a1.sources.c1.channels=c1;
  a1.sinks.c1.channel=c1;

  2.创建目录

  $>mkdir ~/spool

  3.启动flume

  $>bin/flume-ng agent -f /soft/flume/conf/spooldir-r.conf  -n a1 -Dflume.root.logger=INFO,console

3.实时日志收集exec(对文件进行实时监控)  

  1.配置文件[exec-r.conf] 

  a1.sources=r1
  a1.sinks=k1
  a1.channels=c1

  a1.sources.r1.type=exec
  a1.sources.r1.command=tail -F /home/centos/test.txt

  a1.sinks.k1.type=logger
  a1.channels.c1.type=memory

  a1.sources.r1.channels=c1
  a1.sinks.k1.channel=c1

  2.启动flume

  $>flume-ng agent -f /soft/flume/conf/exec-r.conf -n a1 -Dflume.root.logger=INFO,console

  3.在/home/centos下写文件

    $>touch test.txt

    $>echo hello world >> test.txt


五、.测试sink

  1.hdfs

a1.sources = r1
a1.channels = c1
a1.sinks = k1

a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 8888

a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /user/centos/flume/%y-%m-%d/%H/%M/%S
a1.sinks.k1.hdfs.filePrefix = events-

#是否舍弃,每十分钟会产生一个新的目录
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 1
a1.sinks.k1.hdfs.roundUnit = day
a1.sinks.k1.hdfs.useLocalTimeStamp = true
a1.sinks.k1.hdfs.rollInterval=10
a1.sinks.k1.hdfs.rollSize=30
a1.sinks.k1.hdfs.rollCount=3

a1.channels.c1.type = memory

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

  2.hbase

a1.sources=r1

a1.channels=c1

a1.sinks=k1

a1.sources.r1.type=netcat

a1.sources.r1.bind=localhost

a1.sources.r1.port=8888

a1.sinks.k1.type=hbase

a1.sinks.k1.table=ns1:t2

a1.sinks.k1.columnFamily=f1

a1.sinks.k1.serializer = org.apache.flume.sink.hbase.RegexHbaseEventSerializer

a1.channels.c1.types=memory

a1.sources.r1.channels=c1

a1.sinks.k1.channel=c1

  3.从source到channels的过程

  

数据从外部进入到源source中来,

  4.使用avroSource和avroSink实现越点(agent)代理

--------------------------------------------

  1.创建配置文件   

#a1
a1.sources=r1
a1.sinks=k1
a1.channels=c1

a1.sources.r1.type=netcat
a1.sources.r1.bind=localhost
a1.sources.r1.port=8888

a1.sinks.k1.type=avro
a1.sinks.k1.hostname=localhost
a1.sinks.k1.port=9999

a1.channels.c1.type=memory

a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

#a2
a1.sources=r2
a1.sinks=k2
a1.channels=c2

a1.sources.r2.type=avro
a1.sources.r2.bind=localhost
a1.sources.r2.port=9999

a2.sinks.k2.type=logger

a2.channels.c2.type=memory

a2.sources.r2.channels=c2
a2.sinks.k2.channel=c2

  2.启动a2:flume-ng agent -f /soft/flume/conf/avro_hop.conf -n a2 -Dflume.root.logger=INFO,console

  3.验证a2是否开启

    $>netstat -anop | grep 9999

  4.开启a1.flume-ng agent -f /soft/flume/conf/avro_hop.conf -n a1

    验证是否开启:$>netstat -anop | grep 8888

5.channels

--------------------------------------------------------

  1.memory

    

  2.FileChannel

    a1.sources=r1
    a1.sinks=k1
    a1.channels=c1

    a1.channels=c1

    a1.channels.c1.type=file

    a1.channels.c1.checkpointDir=/home/centos/flume/fc_check

    a1.channels.c1.dataDirs=/home/centos/flume/fc_data

flume复习(一)的更多相关文章

  1. flume复习(二)

    一.简介:flume是一种分布式.可靠且可用的系统,能够用于有效的从不同的源收集.聚合和移动大量的日志数据到集中式数据存储.它具有基于流数据的简单灵活的架构,它具有健壮的可靠性机制和许多故障转移和恢复 ...

  2. kafka复习(1)

    一:flume复习 0.JMS(java message service )java消息服务 ----------------------------------------------------- ...

  3. 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合

    前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...

  4. [CDH] Acquire data: Flume and Kafka

    Flume 基本概念 一.是什么 Ref: http://flume.apache.org/ 数据源获取:Flume.Google Refine.Needlebase.ScraperWiki.Bloo ...

  5. Hadoop期末复习

    Hadoop期末复习 选择题 以下选项中,哪个程序负责HDFS数据存储. B A.NameNode B.DataNode C.Secondary NameNode D.ResourceManager ...

  6. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  7. Flume1 初识Flume和虚拟机搭建Flume环境

    前言:       工作中需要同步日志到hdfs,以前是找运维用rsync做同步,现在一般是用flume同步数据到hdfs.以前为了工作简单看个flume的一些东西,今天下午有时间自己利用虚拟机搭建了 ...

  8. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  9. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

随机推荐

  1. maven web项目中运行stucts2报404的解决方案

    从这篇文章看见的https://www.cnblogs.com/xxqxxq/p/5938821.html 1.将stucts.xml中所有<action>全部注释掉,重新运行 如果运行成 ...

  2. TCP定时器 之 坚持定时器

    坚持定时器在接收方通告接收窗口为0,阻止发送端继续发送数据时设定. 由于连接接收端的发送窗口通告不可靠(只有数据才会确认,ACK不会确认),如果一个确认丢失了,双方就有可能因为等待对方而使连接终止:接 ...

  3. SQL Server AlwaysOn原理简介

    SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例,数据库镜像和日志传送的单位是单个用户数据库,而A ...

  4. luoguP1502过河题解

    日常吐(fei)嘈(hua) 这道题作为最近卡了我3天的dp题(最后还是在题解的帮助下冥思苦想才过掉的题),窝觉得此题肥肠之脑洞,写此博客纪念 题解 过河 先来日常手玩样例: 咦感觉怎么手玩答案都像是 ...

  5. [MVC HtmlHelper简单了解]

    HtmlHelper用来在视图中显示Html控件,简化代码,使用方便!,降低了View视图中的代码复杂度!可以更快速的完成工作! 以下是一些常用 的html标签 辅助方法 使用HTML辅助方法输出   ...

  6. http协议详解之响应报文 3

    --------------响应示例--------------------------response#状态行HTTP/1.1 200 OK #协议及版本号.状态码.状态描述 #消息报头Date: ...

  7. 阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版

    遍历枚举 改造获取的方法,这样获取的对象就是单例模式 再次运行测试程序 对象只有一个实例的情况下对i这个值进行了反复的操作.当多个人活着多线程在使用时.这就会出现类成员变量由于第一个人的修改.后面看到 ...

  8. JPA访问数据库的几种方式

    JPA访问数据库的几种方式 本文为原创,转载请注明出处:https://www.cnblogs.com/supiaopiao/p/10901793.html 1. Repository 1.1. 通过 ...

  9. ASP.NET MVC 发布WIN SERVER2012

    首先在打开服务器管理,点添加角色和功能 这个名字自己设置不打紧 勾选web服务器,之后点下一步 在功能选择中勾选下面部分 之后点击工具选择服务,确保web服务正在运行 此时服务端告一段落,返回主机打开 ...

  10. python操作oracl数据库

    #查询交易系统数据,判断当日是否有港股交易 import cx_Oracleimport os conn = Nonecursor = None hkfile = 'hk.txt'nohkfile = ...