大数据组件之Flume(1)

关于flume 的介绍 我是围绕三个方面来说的
是什么
去哪下
怎么玩

1. flume是什么

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。flume可以聚合大量日志数据并将其从许多不同的源移动到集中式数据存储中,并且,不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎所有可能的数据源。

flume就好比一个水泵,网上产生的数据就是各种各样的水。日志就是湖水,mysql数据就是海水,水泵都可以抽取他们,从一个地方到另一个地方。但是水泵经常是用来抽取湖水的,也就像flume经常用来抽取日志的,海水也能抽,但是不经常用。所以flume能抽取所有的数据,就好像水泵能抽取各种各样的水。
flume 主要的用途就是 实时读取服务器的本地磁盘的数据,上传到hdfs中去

2. flume去哪下

http://flume.apache.org/
在这里插入图片描述
我用的flume1.7版本

3. flume怎么玩

这里的内容都是参考官网
官网用户指导手册

3.1 架构

在这里插入图片描述
这张图是从官网上扣下来的。

  • Agent
    Agent是一个JVM进程,通过事件(event)的形式将数据从源头送至目的,是Flume数据传输的基本单元。可以看做一个 Agent就是一个flume实例。
    Agent配置是 本地的配置文件里面,配置文件格式是 properties ,在一个配置文件中指定一个或多个代理的配置。配置文件中要配置source,sink,Channel。
    Agent主要有3个部分组成,Source、Channel、Sink。
  • Source
    Source 输入源。负责接收数据到Flume Agent的组件。Source可以处理各种类型、各种格式的日志数据,Flume提供了下面的几种格式的source使用:官网source
    • avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy,自定义。
  • Channel。
    Channel 通道,也可以是缓冲区。位于Source和Sink之间的缓冲区。所以,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
    Flume 有两种种Chanel
    • Memory Channel
      Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。内存的肯定快
    • File Channel
      File Channel将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。但是这个比较慢
    • JDBC Channel
      event放在数据库里面
    • Kafka Channel
      event放在kafaka里面
      下图是官网找的channel类型
      在这里插入图片描述
  • Sink
    Sink 输出源,Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。
    Sink就不断的从Chanel中取数据。输出到配置的目的地。
    Flume提供了几种目的地 官网sink
    • hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。
      除了上面的几个,flume在传递日志的时候,是按照一个特定的数据格式来传递的。叫做Event
  • Event
    flume中的传输单元,Flume数据传输的基本单元,以事件的形式将数据从源头送至目的地。event有两部分组成
    要注意 一行文本内容被反序列化成一个event。event的最大定义为2048字节,超过会被切割放到下一个event中
    • header。存放一些属性
    • body 存放数据

到这里 FLume的基本组件就介绍完了。下面开始介绍FLume的可靠性

3.2 Flume可靠性(事务)

官网参考1,大体提一下
官网参考1,详细说明1
官网参考1,详细说明2

FLume 在source和sink阶段都是用事务来保障可靠性。

  1. sink阶段,sink会将一大帮数据放在一个暂时的队列里面,将一个event 传输到配置的源头 之后,sink才会将channel中的event移除,出现了问题就回滚。
  2. source阶段,先把event提交到一个暂时的队列,在看channel中有没有地方,有就提交到channel中,没有就回滚
    在这里插入图片描述
    上图是官网的图
    下面的图是我画的图;
    在这里插入图片描述

3.3 简单入门(官网小例子)

前提说明。 最低jdk1.8

Flume监控本机44444端口,然后通过telnet工具向本机44444端口发送消息,最后Flume将监听的数据实时显示在控制台。
在这里插入图片描述

3.3.1 下载包

http://flume.apache.org/download.html

3.3.2 修改配置文件

  • 将 conf下的flume-env.sh.template文件复制一份 名字改为flume-env.sh,并配置 JAVA_HOME
export JAVA_HOME= 自己的javaHome路径

3.3.3 写配置文件

  • 自己在flume 的文件夹里面创建一个 文件夹 名字随便写,我这里叫 test
  • 然后在 这个文件夹里面 创建一个文件 flume-telnet-logger.conf
# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

配置文件来源于官方手册http://flume.apache.org/FlumeUserGuide.html
详细说明
在这里插入图片描述

3.3.4 启动

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

说明:

  1. bin/flume-ng : agent 执行flume文件夹下面bin文件夹下面的 flume-ng agent 命令。
  2. –conf conf/ : 表示配置文件存储在conf/目录
  3. -name a1 :表示给agent起名为a1
  4. -conf-file test/flume-telnet.conf :flume本次启动读取的配置文件是在test文件夹下的flume-telnet.conf文件
  5. -Dflume.root.logger==INFO,console :-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为 INFO级别。日志级别包括:log、info、warn、error

启动成功图片
在这里插入图片描述

3.3.5 测试

  • 测试44444端口
    在这里插入图片描述
    • 用telnet 连接44444端口 发送消息
      在这里插入图片描述
    • 看flume的输出 在这里插入图片描述
      可以看出来flume其实大多数就是玩一个配置
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值