一、概述

  1.什么是flume

    官网的介绍:http://flume.apache.org/

  Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.

    简明的介绍:

u Flume是一个分布式、可靠、和高可用的海量日志采集(对实时支持)、聚合和传输的系统。

u Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中

u 一般的采集需求,通过对flume的简单配置即可实现

u Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景

  2.flume运行机制

  

  

  1、 Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成

  2、 每一个agent相当于一个数据传递员,内部有三个组件:

    a) Source:采集源,用于跟数据源对接,以获取数据

    b) Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据

    c) Channel:angent内部的数据传输通道,用于从source将数据传递到sink

    并且,多个之间支持串联:

    

二、安装与配置

  1.上传安装包

  

  2.解压

  1. tar -zxvf apache-flume-1.6.-bin.tar.gz -C apps/

  3.配置环境变量

  1. [hadoop@mini1 apache-flume-1.6.-bin]$ sudo vim /etc/profile

  追加内容:

  1. export FLUME_HOME=/home/hadoop/apps/apache-flume-1.6.-bin
  2. export PATH=$PATH:$FLUME_HOME/bin
  1. [hadoop@mini1 apache-flume-1.6.-bin]$ source /etc/profile

  //如要查看环境变量的值,推荐使用export或者env

  4.配置flume-env.sh

  1. [hadoop@mini1 ~]$ cd apps/apache-flume-1.6.-bin/
  2. [hadoop@mini1 apache-flume-1.6.-bin]$ cd conf/
  3. [hadoop@mini1 conf]$ ls
  4. flume-conf.properties.template flume-env.sh.template
  5. flume-env.ps1.template log4j.properties
  6. [hadoop@mini1 conf]$ cp flume-env.sh.template flume-env.sh

  追加配置:

  1. [hadoop@mini1 conf]$ vim flume-env.sh
  1. export JAVA_HOME=/opt/java/jdk1..0_151
  2. export HADOOP_HOME=/home/hadoop/apps/hadoop-2.6.

  5.验证

  1. [hadoop@mini1 conf]$ flume-ng version

三、简单部署

  1.新建采集方案配置文件

    conf目录下flume-conf.properties.template 是模板配置文件,我们在此目录新建的自己的配置方案:

  1. vim netcat-logger.conf
  1. # Name the components on this agent
  2. #给那三个组件取个名字,a1是agent的名字
  3. a1.sources = r1
  4. a1.sinks = k1
  5. a1.channels = c1
  6.  
  7. # Describe/configure the source
  8. #类型, 从网络端口接收数据,在本机启动, 所以localhost, type=spoolDir采集目录源,目录里有就采
  9. a1.sources.r1.type = netcat
  10. a1.sources.r1.bind = localhost
  11. a1.sources.r1.port =
  12.  
  13. # Describe the sink
  14. a1.sinks.k1.type = logger
  15.  
  16. # Use a channel which buffers events in memory
  17. #下沉的时候是一批一批的, 下沉的时候是一个个eventChannel参数解释:
  18. #capacity:默认该通道中最大的可以存储的event数量
  19. #trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
  20. a1.channels.c1.type = memory
  21. a1.channels.c1.capacity =
  22. a1.channels.c1.transactionCapacity =
  23.  
  24. # Bind the source and sink to the channel
  25. a1.sources.r1.channels = c1
  26. a1.sinks.k1.channel = c1
  1. # Name the components on this agent
  2.  
  3. a1.sources = r1
  4.  
  5. a1.sinks = k1
  6.  
  7. a1.channels = c1
  8.  
  9. # Describe/configure the source
  10.  
  11. a1.sources.r1.type = netcat
  12.  
  13. a1.sources.r1.bind = localhost
  14.  
  15. a1.sources.r1.port =
  16.  
  17. # Describe the sink
  18.  
  19. a1.sinks.k1.type = logger
  20.  
  21. # Use a channel that buffers events in memory
  22.  
  23. a1.channels.c1.type = memory
  24.  
  25. a1.channels.c1.capacity =
  26.  
  27. a1.channels.c1.transactionCapacity =
  28.  
  29. # Bind the source and sink to the channel
  30.  
  31. a1.sources.r1.channels = c1
  32.  
  33. a1.sinks.k1.channel = c1

精简配置

   当然,如果想要别的机器可以连过来,可以通过设置r1.bind处的localhost改为主机名(此处为mini1)即可!

   2.启动

  1. bin/flume-ng agent --conf conf --conf-file conf/netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console

  其中,--conf指定指定配置文件目录,--conf-file指定配置方案,--name,指定agent名称,-D的为JVM参数,当然--conf等可以简写如下:

  1. bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console

  //注意这里conf是相对路径了

  3.登录

    打开另外一个终端(复制SSH隧道):

  1. telnet localhost

   // 这里本机没有安装telnet,故先安装telnet:https://www.cnblogs.com/lixuwu/p/6102444.html

    

  这里在flume服务端就可以看到接收的信息了,如果消息太长被截断,可以通过参数设置:

  1. max-line-length Max line length per event body (in bytes)

  完整的参照官网configuration下的sources下的netcat相关的参数设置!

  以上这些完整的介绍,都在官方文档中http://flume.apache.org/FlumeUserGuide.html

  配置采集源为spool目录

    在conf下新建spool.conf

  1. # Name the components on this agent
  2. a1.sources = r1
  3. a1.sinks = k1
  4. a1.channels = c1
  5.  
  6. # Describe/configure the source
  7. #监听目录,spoolDir指定目录, fileHeader要不要给文件夹前坠名
  8. a1.sources.r1.type = spooldir
  9. a1.sources.r1.spoolDir = /home/hadoop/flumespool
  10. a1.sources.r1.fileHeader = true
  11.  
  12. # Describe the sink
  13. a1.sinks.k1.type = logger
  14.  
  15. # Use a channel which buffers events in memory
  16. a1.channels.c1.type = memory
  17. a1.channels.c1.capacity =
  18. a1.channels.c1.transactionCapacity =
  19.  
  20. # Bind the source and sink to the channel
  21. a1.sources.r1.channels = c1
  22. a1.sinks.k1.channel = c1

    启动

  1. bin/flume-ng agent -c ./conf -f ./conf/spool-logger.conf -n a1 -Dflume.root.logger=INFO,console

    此时通过cp等命令往flumespool中添加文件即可看到效果!

  但是不能有相同的文件名,否则会报错!

四、采集文件到HDFS

  1.conf下新建tail-hdfs.conf

  1. # Name the components on this agent
  2. a1.sources = r1
  3. a1.sinks = k1
  4. a1.channels = c1
  5.  
  6. #exec 指的是命令
  7. # Describe/configure the source
  8. a1.sources.r1.type = exec
  9. #F根据文件名追踪, f根据文件的nodeid追踪
  10. a1.sources.r1.command = tail -F /home/hadoop/log/test.log
  11. a1.sources.r1.channels = c1
  12.  
  13. # Describe the sink
  14. #下沉目标
  15. a1.sinks.k1.type = hdfs
  16. a1.sinks.k1.channel = c1
  17. #指定目录, flum帮做目的替换
  18. a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/
  19. #文件的命名, 前缀
  20. a1.sinks.k1.hdfs.filePrefix = events-
  21.  
  22. # 分钟就改目录
  23. a1.sinks.k1.hdfs.round = true
  24. a1.sinks.k1.hdfs.roundValue =
  25. a1.sinks.k1.hdfs.roundUnit = minute
  26.  
  27. #文件滚动之前的等待时间(秒)
  28. a1.sinks.k1.hdfs.rollInterval =
  29.  
  30. #文件滚动的大小限制(bytes)
  31. a1.sinks.k1.hdfs.rollSize =
  32.  
  33. #写入多少个event数据后滚动文件(事件个数)
  34. a1.sinks.k1.hdfs.rollCount =
  35.  
  36. #5个事件就往里面写入
  37. a1.sinks.k1.hdfs.batchSize =
  38.  
  39. #用本地时间格式化目录
  40. a1.sinks.k1.hdfs.useLocalTimeStamp = true
  41.  
  42. #下沉后, 生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
  43. a1.sinks.k1.hdfs.fileType = DataStream
  44.  
  45. # Use a channel which buffers events in memory
  46. a1.channels.c1.type = memory
  47. a1.channels.c1.capacity =
  48. a1.channels.c1.transactionCapacity =
  49.  
  50. # Bind the source and sink to the channel
  51. a1.sources.r1.channels = c1
  52. a1.sinks.k1.channel = c1

  注意这里换成exec命令形式了,不采用之前的spoolDir,只是采集源不同而已

  2.准备测试数据

  1. [hadoop@mini1 conf]$ mkdir /home/hadoop/log
  2. [hadoop@mini1 conf]$ touch /home/hadoop/log/test.log
  1. [hadoop@mini1 ~]$ while true
  2. > do
  3. > echo >> /home/hadoop/log/test.log
  4. > sleep 0.5
  5. > done

  //当然,通过常规的新建.sh文件运行也是可以的

  新开终端可以查看效果

  1. [hadoop@mini1 ~]$ tail -F /home/hadoop/log/test.log

  3.启动HDFS

  1. start-dfs.sh

  4.启动flume

  1. bin/flume-ng agent -c conf -f conf/tail-hdfs.conf -n a1

  5.查看效果

    通过网页mini1:50070直接可以查看到相关目录的生成

  如果为spoolDir形式,参考https://www.cnblogs.com/cnmenglang/p/6543927.html

五、多agent串联

  主要就是一个的sink为另外一个的source即可!

  参考http://blog.csdn.net/killy_uc/article/details/22916479

大数据入门第十二天——flume入门的更多相关文章

  1. 大数据入门第十二天——sqoop入门

    一.概述 1.sqoop是什么 从其官网:http://sqoop.apache.org/ Apache Sqoop(TM) is a tool designed for efficiently tr ...

  2. 大数据入门第十二天——azkaban入门

    一.概述 1.azkaban是什么 通过官方文档:https://azkaban.github.io/ Azkaban is a batch workflow job scheduler create ...

  3. 大数据入门第二十天——scala入门(一)入门与配置

    一.概述 1.什么是scala  Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. ...

  4. 大数据入门第二十一天——scala入门(二)并发编程Akka

    一.概述 1.什么是akka Akka基于Actor模型,提供了一个用于构建可扩展的(Scalable).弹性的(Resilient).快速响应的(Responsive)应用程序的平台. 更多入门的基 ...

  5. 大数据入门第二十一天——scala入门(一)并发编程Actor

    注:我们现在学的Scala Actor是scala 2.10.x版本及以前版本的Actor. Scala在2.11.x版本中将Akka加入其中,作为其默认的Actor,老版本的Actor已经废弃 一. ...

  6. 大数据入门第二十天——scala入门(二)scala基础01

    一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...

  7. 大数据入门第二十天——scala入门(二)scala基础02

    一. 类.对象.继承.特质 1.类 Scala的类与Java.C++的类比起来更简洁 定义: package com.jiangbei //在Scala中,类并不用声明为public. //Scala ...

  8. 大数据入门第十九天——推荐系统与mahout(一)入门与概述

    一.推荐系统概述 为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统.其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录 ...

  9. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

    一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...

随机推荐

  1. 网络基础 HTTP协议之缓存简介

    HTTP协议之缓存简介 by:授客 QQ:1033553122 用浏览器查看缓存 IE为例,Tools->Internet options -> View files,如图 点击图示的Vi ...

  2. mvp在flutter中的应用

    mvp模式的优点mvp模式将视图.业务逻辑.数据模型隔离,使用mvp模式,能使复杂的业务逻辑变得更加清晰,使代码更具有灵活性和扩展性,正是这些优点,使mvp模式广泛应用于原生开发中. flutter使 ...

  3. WebView动态注入JavaScript脚本

    Demo地址:https://gitee.com/chenyangqi/YouMeDai 背景介绍 在Android与JavaScript交互一文中学习了原生和JS交互,但是如果我们想和别人开发好的w ...

  4. Python+Selenium笔记(十二):数据驱动测试

    (一)   前言 通过使用数据驱动测试,实现对输入值和预期结果的参数化.(例如:输入数据和预期结果可以直接读取Excel文档的数据) (二)   ddt 使用ddt执行数据驱动测试,ddt库可以将测试 ...

  5. LeetCode题解之Swap Nodes in Pairs

    1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...

  6. Javascript基础笔记(部分)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. ecplice 中添加JavaFX插件学习

    fxml文件使用SceneBuilder打开报错 解决方法:Window-->Preferences-->JavaFX-->browse 路径是可执行的JavaFX Scene Bu ...

  8. 安装 Scala

    0. 说明 Scala 安装(Windows)  &  Scala 安装(Linux) 1. Scala 安装(Windows) 1.0 下载 Scala  下载地址 1.1 运行 Scala ...

  9. pt-heartbeat工具监控MySQL复制延迟

    pt-heartbeat工作原理: 1,在主库上的某个数据库A中创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去). 2,从主库连接到从上的这个数据库A中检查复制的时间记 ...

  10. leetcode 121 买卖股票的最佳时机

    题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. ...