前言:

      工作中需要同步日志到hdfs,以前是找运维用rsync做同步,现在一般是用flume同步数据到hdfs。以前为了工作简单看个flume的一些东西,今天下午有时间自己利用虚拟机搭建了flume环境,并简单做了几个练习。学习过程中还是比较顺利的,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的。

===============================================================长长的分割线====================================================================

正文:

  关于flume的理论介绍,网上可以搜到到很多的资料,大家可以自行搜索,我这里就不在重复赘述。

本文中主要涉及三块内容: 第一,fume概念简介;第二,搭建flume环境并运行hello word;第三,在第二点的基础上,再介绍一种“源”的使用方式。

  第一步,flume简介(这部分资料参考了网上文章的资料):

 (1). flume基本组件 

   a. Event:消息的基本单位,由headers和body组成
   b. Agent:JVM进程,负责将外部来源产生的消息转发到外部的目的地 
    • Source:从外部来源读入event,并写入channel 
    • Channel:event暂存组件,source写入后,event将会一直保存,直到被sink成功消费。 
    • Sink:从channel读入event,并写入目的地

(2). flume数据流,对照下面的两幅数据流图片,需要我们记住如下概念:

a. 源将事件写到一个或多个通道中

b. 通道作为事件从源到接收器传递的保留区

c. 接收器只从一个通道接收事件

d. 代理可能会有多个源、通道与接收器。

第二步,搭建flume环境并运行hello world:

(1). 从flume官网上下载 http://flume.apache.org/download.html  flume安装包,可以下载源码包自己编译,但是我当初直接下载了编译好的apache-flume-1.5.2-bin.tar.gz。

(2). 将apache-flume-1.5.2-bin.tar.gz这个压缩包通过tar -xzvf apache-flume-1.5.2-bin.tar.gz 命令解压缩。为了便于后边的讲解说一下我解压缩后的目录: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin

(3). 直接进入conf目录,配置example0001.conf 配置文件,配置内容如下: 我们定义了一个名叫agent1的Agent。其中包含了名为src1的源、名为channel1的通道以及名为sink1的接收器。

 # example0001.conf: A single-node Flume Configuration

 # Name the components on this agent
agent1.sources = src1
agent1.sinks = sink1
agent1.channels = channel1 # Describe/configure the source
agent1.sources.src1.type = netcat
agent1.sources.src1.bind = 127.0.0.1
agent1.sources.src1.port = 44444 #Describe the sink
agent1.sinks.sink1.type = logger # Use a channel which buffers events in memory
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 1000
agent1.channels.channel1.transactionCapacity = 100 # Bind the source and sink to the channel
agent1.sources.src1.channels = channel1
agent1.sinks.sink1.channel = channel1

(4). 在安装目录的根目录,比如我的目录: /myself_settings/flume1.5.2/apache-flume-1.5.2-bin  执行命令: ./bin/flume-ng agent -n agent1 -c conf -f conf/example0001.conf -Dflume.root.logger=INFO,console ,启动成功如下图:

   (5). 在启动成功后,我们执行telnet命令: telnet localhost 44444,正确连接telnet后,依次输入hello、hello world和hello flume,这时我们可以看到刚才启动agent的控制台中就成功接收并输出了你刚才输入的内容,详细看上图矩形框选中的部分。

第三步,exec源的使用。这个主要是如果我想实时的接收业务系统的日志,那么可以设置这种源。

   (1). 直接进入conf目录,配置example0002.conf 配置文件,配置内容如下: 我们定义了一个名叫agent2的Agent。其中包含了名为src2的源、名为channel2的通道以及名为sink2的接收器。

 # example0001.conf: A single-node Flume Configuration

 # Name the components on this agent
agent2.sources = src2
agent2.sinks = sink2
agent2.channels = channel2 # Describe/configure the source
agent2.sources.src2.type = exec
agent2.sources.src2.command = tail -F /test/test.log #Describe the sink
agent2.sinks.sink2.type = logger # Use a channel which buffers events in memory
agent2.channels.channel2.type = memory
agent2.channels.channel2.capacity = 1000
agent2.channels.channel2.transactionCapacity = 100 # Bind the source and sink to the channel
agent2.sources.src2.channels = channel2
agent2.sinks.sink2.channel = channel2

(2). 结合上面的配置文件,我们会发现和我们之前的定义的example1.conf的例子不同主要在与9、10行标红的定义源的类型和方式。结合命令来说,就是如果/test/test.log文件中内容发生变化,那么就会把新增的数据传入到当前agent2中。

(3). 为了测试上边的这个例子,在启动agent2之前,我们定义一个crontab任务:  */1 * * * * date >> /test/test.log ,每隔一分钟往/test/test.log中插入一条当前服务器的时间。

(4). 在上边crontab任务执行后,我们开始启动agent2:  ./bin/flume-ng agent -n agent2 -c conf -f conf/example0002.conf -Dflume.root.logger=INFO,console。

(5). 随着每隔一分钟test.log中新增的一条时间记录,agent2的控制台也会相应的接收并输出一条记录,如下图:

综上所述,我们一起完成了对flume的初步认识,我个人任务如果你是开发,这些基本的了解对你来说是必要的,当然如果从这篇文章中看,貌似flume比较简单,但是我个人觉得单看flume确实没有太多可说的,但是我们如果把kafka、flume、storm等实时计算工具融合起来的话,还是要好好研究研究的。

Flume1 初识Flume和虚拟机搭建Flume环境的更多相关文章

  1. 分布式实时日志系统(二) 环境搭建之 flume 集群搭建/flume ng资料

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  2. Win10 VirtualBox虚拟机搭建lnmp环境

    之前用的是vagrant+VirtualBox搭建的环境,因为是windows系统动不动就报错,打不开环境,所以还是老老实实换了虚拟机哎.... 版本: VirtualBox 5.1.34   xsh ...

  3. 虚拟机搭建hadoop环境

    这里简单用三台虚拟机,搭建了一个两个数据节点的hadoop机群,仅供新人学习.零零碎碎,花了大概一天时间,总算完成了. 环境 Linux版本:CentOS 6.5 VMware虚拟机 jdk1.6.0 ...

  4. 初识redis——mac下搭建redis环境

    一.redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...

  5. 虚拟机搭建ftp环境

    引用http://www.cnblogs.com/xiangxiaodong/archive/2013/12/23/3487028.html,学习. 本人是在windows8系统下,Oracle VM ...

  6. mac虚拟机搭建自动化环境-wda和python wda client

    尽量升级Xcode到最新版,保持iPhone的版本大于9.3 1.安装webDriverAgent到ios真机 从github上下载代码:git clone https://github.com/fa ...

  7. 初识python 之 离线搭建pyhive环境(含python3安装)

    系统版本: centos6.5 python版本:python3.6.8 相关包存放目录:software 注意:以下操作需要用到root权限 安装python3 root操作 cd /lzh/sof ...

  8. 网安日记④之搭建域环境(domain)并且配置域

    搭建域环境(domain)并且配置域 什么是域 域就是将多台计算机在逻辑上组织到一起,进行集中管理,也就是创建在域控制器上的组,将组的账户信息保存在活动目录中.域组可以用来控制域内任何一台计算机资源的 ...

  9. TensorFlow笔记-02-Windows下搭建TensorFlow环境(win版非虚拟机)

    TensorFlow笔记-02-Windows下搭建TensorFlow环境(win版非虚拟机) 本篇介绍的是在windows系统下,使用 Anaconda+PyCharm,不使用虚拟机,也不使用 L ...

随机推荐

  1. 【探索】在 JavaScript 中使用 C 程序

    JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑.当需要传输通信时,我们大多选择 JSON 或 XML 格式. 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进 ...

  2. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  3. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  4. [APUE]系统数据文件与信息

    一.口令文件 UNIX口令文件包含下表中的各个字段,这些字段包含在 由于历史原因,口令文件是/bin/passwd,而且是一个文本文件,每一行都包括了上表中的七个字段,字段之间用":&quo ...

  5. iOS开发之再探多线程编程:Grand Central Dispatch详解

    Swift3.0相关代码已在github上更新.之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread.操作队列以及GCD,介绍的不够深入.今天就以GCD为主题来全面的总结一下GCD ...

  6. JavaScript基础知识总结(三)

    JavaScript语法 七.循环语句 1.while 语法: while (exp) { //statements; } 说明:while (变量<=结束值) { 需执行的代码 } 例子: / ...

  7. 设计模式C#合集--抽象工厂模式

    抽象工厂,名字就告诉你是抽象的了.上代码. public interface BMW { public void Drive(); } public class BMW730 : BMW { publ ...

  8. DevOps对于企业IT的价值

    其实从敏捷延展开的 DevOps 概念很早就已经被提出,不过由于配套的技术成熟度水平层次不齐, DevOps 的价值一直没有有效地发挥出来.现如今,随着容器技术的发展, DevOps 在企业中的实践难 ...

  9. 2003-Can't connect to mysql server on localhost (10061)

    mysql数据库出现2003-Can't connect to mysql server on localhost (10061)问题 解决办法:查看wampserver服务器是否启动,如果没有启动启 ...

  10. Linux配置防火墙 开启80端口的方法

    命令行输入: vi /etc/sysconfig/iptables 将 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT ...