• Flume 进阶


    第一章 Flume 事务

     Source向Channel推,Sink从Channel拉。

    第二章 Flume Agent 内部原理

    重要组件:

    1)ChannelSelector
    ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。其共有两种类型,分别是 Replicating(复制) Multiplexing(多路复用)
    ReplicatingSelector 会将同一个 Event 发往所有的 Channel,Multiplexing 会根据相应的原则,将不同的 Event 发往不同的 Channel。

    2)SinkProcessor
    SinkProcessor 共有三种类型 , 分别是DefaultSinkProcessorLoadBalancingSinkProcessorFailoverSinkProcessor
    DefaultSinkProcessor 对应的是单个的 Sink,LoadBalancingSinkProcessor 和FailoverSinkProcessor 对应的是 Sink Group,LoadBalancingSinkProcessor 可以实现负载均衡的功能,FailoverSinkProcessor 可以错误恢复的功能。

    第三章 Flume 拓扑结构

    3.1 简单串联

    这种模式是将多个 flume 顺序连接起来了,从最初的 source 开始到最终 sink 传送的目的存储系统。此模式不建议桥接过多的 flume 数量, flume 数量过多不仅会影响传输速率,而且一旦传输过程中某个节点 flume 宕机,会影响整个传输系统。

    3.2 复制和多路复用

    单source,多channel、sink

    Flume 支持将事件流向一个或者多个目的地。这种模式可以将相同数据复制到多个channel 中,或者将不同数据分发到不同的 channel 中,sink 可以选择传送到不同的目的地。

    3.3 负载均衡和故障转移

    Flume支持使用将多个sink逻辑上分到一个sink组,sink组配合不同的SinkProcessor可以实现负载均衡和错误恢复的功能。

    3.4 聚合

    这种模式是我们最常见的,也非常实用,日常 web 应用通常分布在上百个服务器,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用 flume 的这种组合方式能很好的解决这一问题,每台服务器部署一个 flume 采集日志,传送到一个集中收集日志的flume,再由此 flume 上传到 hdfs、hive、hbase 等,进行日志分析。

    第四章 Flume 企业开发案例

    4.1 复制和多路复用

    1)案例需求
    使用 Flume-1 监控文件变动,Flume-1 将变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS。同时 Flume-1 将变动内容传递给 Flume-3,Flume-3 负责输出到 Local
    FileSystem。

    2)需求分析:

    Avro是Hadoop的一个数据序列化系统,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人)开发,设计用于支持大批量数据交换的应用。

    它的主要特点有:

    • 支持二进制序列化方式,可以便捷,快速地处理大量数据;
    • 动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据

    3)实现步骤:

    (1)准备工作
    在/opt/module/flume/job 目录下创建 group1 文件夹

    [atguigu@hadoop102 job]$ cd group1/

    在/opt/module/data/目录下创建 flume3 文件夹

    [atguigu@hadoop102 datas]$ mkdir flume3

    (2)创建 flume-file-flume.conf
    配置 1 个接收日志文件的 source 和两个 channel、两个 sink,分别输送给 flume-flumehdfs 和 flume-flume-dir。
    编辑配置文件

    [atguigu@hadoop102 group1]$ vim flume-file-flume.conf

    添加如下内容

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1 k2
    a1.channels = c1 c2
    # 将数据流复制给所有 channel
    a1.sources.r1.selector.type = replicating
    # Describe/configure the source
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /opt/module/hive/logs/hive.log
    a1.sources.r1.shell = /bin/bash -c
    # Describe the sink
    # sink 端的 avro 是一个数据发送者
    a1.sinks.k1.type = avro
    a1.sinks.k1.hostname = hadoop102
    a1.sinks.k1.port = 4141
    a1.sinks.k2.type = avro
    a1.sinks.k2.hostname = hadoop102
    a1.sinks.k2.port = 4142
    # Describe the channel
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    a1.channels.c2.type = memory
    a1.channels.c2.capacity = 1000
    a1.channels.c2.transactionCapacity = 100
    # Bind the source and sink to the channel
    a1.sources.r1.channels = c1 c2
    a1.sinks.k1.channel = c1
    a1.sinks.k2.channel = c2

    (3)创建 flume-flume-hdfs.conf
    配置上级 Flume 输出的 Source,输出是到 HDFS 的 Sink。
    编辑配置文件

    [atguigu@hadoop102 group1]$ vim flume-flume-hdfs.conf

    添加如下内容

    # Name the components on this agent
    a2.sources = r1
    a2.sinks = k1
    a2.channels = c1
    # Describe/configure the source
    # source 端的 avro 是一个数据接收服务
    a2.sources.r1.type = avro
    a2.sources.r1.bind = hadoop102
    a2.sources.r1.port = 4141
    # Describe the sink
    a2.sinks.k1.type = hdfs
    a2.sinks.k1.hdfs.path = hdfs://hadoop102:8020/flume2/%Y%m%d/%H
    #上传文件的前缀
    a2.sinks.k1.hdfs.filePrefix = flume2- #是否按照时间滚动文件夹
    a2.sinks.k1.hdfs.round = true
    #多少时间单位创建一个新的文件夹
    a2.sinks.k1.hdfs.roundValue = 1
    #重新定义时间单位
    a2.sinks.k1.hdfs.roundUnit = hour
    #是否使用本地时间戳
    a2.sinks.k1.hdfs.useLocalTimeStamp = true
    #积攒多少个 Event 才 flush 到 HDFS 一次
    a2.sinks.k1.hdfs.batchSize = 100
    #设置文件类型,可支持压缩
    a2.sinks.k1.hdfs.fileType = DataStream
    #多久生成一个新的文件
    a2.sinks.k1.hdfs.rollInterval = 30
    #设置每个文件的滚动大小大概是 128M
    a2.sinks.k1.hdfs.rollSize = 134217700 
    #文件的滚动与 Event 数量无关 a2.sinks.k1.hdfs.rollCount = 0 # Describe the channel a2.channels.c1.type = memory a2.channels.c1.capacity = 1000 a2.channels.c1.transactionCapacity = 100 # Bind the source and sink to the channel a2.sources.r1.channels = c1 a2.sinks.k1.channel = c1

    (4)创建 flume-flume-dir.conf
    配置上级 Flume 输出的 Source,输出是到本地目录的 Sink。
    编辑配置文件
    [atguigu@hadoop102 group1]$ vim flume-flume-dir.conf
    添加如下内容

    # Name the components on this agent
    a3.sources = r1
    a3.sinks = k1
    a3.channels = c2
    # Describe/configure the source
    a3.sources.r1.type = avro
    a3.sources.r1.bind = hadoop102
    a3.sources.r1.port = 4142
    # Describe the sink
    a3.sinks.k1.type = file_roll
    a3.sinks.k1.sink.directory = /opt/module/data/flume3
    # Describe the channel
    a3.channels.c2.type = memory
    a3.channels.c2.capacity = 1000
    a3.channels.c2.transactionCapacity = 100
    # Bind the source and sink to the channel
    a3.sources.r1.channels = c2
    a3.sinks.k1.channel = c2


    提示:输出的本地目录必须是已经存在的目录,如果该目录不存在,并不会创建新的目录。
    (5)执行配置文件
    分别启动对应的 flume 进程:flume-flume-dir,flume-flume-hdfs,flume-file-flume。

    注意这里要先启动2和3

    先开启服务端,再开启客户端

    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a3 --conf-file job/group1/flume-flume-dir.conf
    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a2 --conf-file job/group1/flume-flume-hdfs.conf
    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/group1/flume-file-flume.conf

    (6)启动 Hadoop 和 Hive
    (7)检查 HDFS 上数据

     (8)检查/opt/module/datas/flume3 目录中数据

    [atguigu@hadoop102 flume3]$ ll
    总用量 16
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:10 1638076247470-1
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:15 1638076247470-10
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:15 1638076247470-11
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:16 1638076247470-12
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:16 1638076247470-13
    -rw-rw-r--. 1 wkf wkf  0 11月 28 13:17 1638076247470-14

    4.2 负载均衡和故障转移

    1)案例需求
    使用 Flume1 监控一个端口,其 sink 组中的 sink 分别对接 Flume2 和 Flume3,采用FailoverSinkProcessor,实现故障转移的功能。
    2)需求分析

    负载均衡与故障转移只是策略不同


    3)实现步骤

    (1)准备工作
    在/opt/module/flume/job 目录下创建 group2 文件夹

    [atguigu@hadoop102 job]$ cd group2/

    (2)创建 flume-netcat-flume.conf
    配置 1 个 netcat source 和 1 个 channel、1 个 sink group(2 个 sink),分别输送给
    flume-flume-console1 和 flume-flume-console2。
    编辑配置文件

    [atguigu@hadoop102 group2]$ vim flume-netcat-flume.conf

    添加如下内容

    # Name the components on this agent
    a1.sources = r1
    a1.channels = c1
    a1.sinkgroups = g1
    a1.sinks = k1 k2
    # Describe/configure the source
    a1.sources.r1.type = netcat
    a1.sources.r1.bind = localhost
    a1.sources.r1.port = 44444
    # 故障转移策略 a1.sinkgroups.g1.processor.type = failover a1.sinkgroups.g1.processor.priority.k1 = 5 a1.sinkgroups.g1.processor.priority.k2 = 10 a1.sinkgroups.g1.processor.maxpenalty = 10000 # Describe the sink a1.sinks.k1.type = avro a1.sinks.k1.hostname = hadoop102 a1.sinks.k1.port = 4141 a1.sinks.k2.type = avro a1.sinks.k2.hostname = hadoop102 a1.sinks.k2.port = 4142 # Describe the channel 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.sinkgroups.g1.sinks = k1 k2 a1.sinks.k1.channel = c1 a1.sinks.k2.channel = c1

    (3)创建 flume-flume-console1.conf
    配置上级 Flume 输出的 Source,输出是到本地控制台。
    编辑配置文件

    [atguigu@hadoop102 group2]$ vim flume-flume-console1.conf

    添加如下内容

    # Name the components on this agent
    a2.sources = r1
    a2.sinks = k1
    a2.channels = c1
    # Describe/configure the source
    a2.sources.r1.type = avro
    a2.sources.r1.bind = hadoop102
    a2.sources.r1.port = 4141
    # Describe the sink
    a2.sinks.k1.type = logger
    # Describe the channel
    a2.channels.c1.type = memory
    a2.channels.c1.capacity = 1000
    a2.channels.c1.transactionCapacity = 100
    # Bind the source and sink to the channel
    a2.sources.r1.channels = c1
    a2.sinks.k1.channel = c1

    (4)创建 flume-flume-console2.conf
    配置上级 Flume 输出的 Source,输出是到本地控制台。
    编辑配置文件

    [atguigu@hadoop102 group2]$ vim flume-flume-console2.conf

    添加如下内容

    # Name the components on this agent
    a3.sources = r1
    a3.sinks = k1
    a3.channels = c2
    # Describe/configure the source
    a3.sources.r1.type = avro
    a3.sources.r1.bind = hadoop102
    a3.sources.r1.port = 4142
    # Describe the sink
    a3.sinks.k1.type = logger
    # Describe the channel
    a3.channels.c2.type = memory
    a3.channels.c2.capacity = 1000
    a3.channels.c2.transactionCapacity = 100
    # Bind the source and sink to the channel
    a3.sources.r1.channels = c2
    a3.sinks.k1.channel = c2

    (5)执行配置文件
    分别开启对应配置文件:flume-flume-console2,flume-flume-console1,flumenetcat-flume。

    将日志打印到控制台中

    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a3 --conf-file job/group2/flume-flume-console2.conf -Dflume.root.logger=INFO,console
    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a2 --conf-file job/group2/flume-flume-console1.conf -Dflume.root.logger=INFO,console
    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/group2/flume-netcat-flume.conf

    (6)使用 netcat 工具向本机的 44444 端口发送内容

    $ nc localhost 44444

    (7)查看 Flume2 及 Flume3 的控制台打印日志

    4142的优先级更高

    (8)将 Flume3 kill,观察 Flume2 的控制台打印情况。

    [atguigu@hadoop102 job]$ jps -ml
    6707 org.apache.flume.node.Application --name a2 --conf-file job/group2/flume-flume-console1.conf
    2485 org.apache.hadoop.hdfs.server.datanode.DataNode
    3015 org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer
    7063 sun.tools.jps.Jps -ml
    6826 org.apache.flume.node.Application --name a1 --conf-file job/group2/flume-netcat-flume.conf
    2844 org.apache.hadoop.yarn.server.nodemanager.NodeManager
    6588 org.apache.flume.node.Application --name a3 --conf-file job/group2/flume-flume-console2.conf
    2365 org.apache.hadoop.hdfs.server.namenode.NameNode
    [atguigu@hadoop102 job]$ kill -9 6588
    [atguigu@hadoop102 job]$ nc localhost 44444
    nihao            
    OK

    注:使用 jps -ml 查看 Flume 进程。

    4.3 聚合

    1)案例需求: hadoop102 上的 Flume-1 监控文件/opt/module/group.log,
    hadoop103 上的 Flume-2 监控某一个端口的数据流,
    Flume-1 与 Flume-2 将数据发送给 hadoop104 上的 Flume-3(跨机器传输),Flume-3 将最终数据打印到控制台。
    2)需求分析

     3)实现步骤:

    (1)准备工作
    分发 Flume

    [atguigu@hadoop102 module]$ xsync flume

    在 hadoop102、hadoop103 以及 hadoop104 的/opt/module/flume/job 目录下创建一个
    group3 文件夹。

    [atguigu@hadoop102 job]$ mkdir group3
    [atguigu@hadoop103 job]$ mkdir group3
    [atguigu@hadoop104 job]$ mkdir group3

    (2)创建 flume1-logger-flume.conf
    配置 Source 用于监控 log 文件,配置 Sink 输出数据到下一级 Flume。 在 hadoop102 上编辑配置文件

    [atguigu@hadoop102 group3]$ vim flume1-logger-flume.conf 

    添加如下内容

    # Name the components on this agent
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    # Describe/configure the source
    a1.sources.r1.type = exec
    a1.sources.r1.command = tail -F /opt/module/group.log
    a1.sources.r1.shell = /bin/bash -c
    # Describe the sink
    a1.sinks.k1.type = avro
    a1.sinks.k1.hostname = hadoop104
    a1.sinks.k1.port = 4141
    # Describe the channel
    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

    (3)创建 flume2-netcat-flume.conf
    配置 Source 监控端口 44444 数据流,配置 Sink 数据到下一级 Flume: 在 hadoop103 上编辑配置文件

    [atguigu@hadoop103 group3]$ vim flume2-netcat-flume.conf

    添加如下内容

    # Name the components on this agent
    a2.sources = r1
    a2.sinks = k1
    a2.channels = c1
    # Describe/configure the source
    a2.sources.r1.type = netcat
    a2.sources.r1.bind = hadoop103
    a2.sources.r1.port = 44444
    # Describe the sink
    a2.sinks.k1.type = avro
    a2.sinks.k1.hostname = hadoop104
    a2.sinks.k1.port = 4141
    # Use a channel which buffers events in memory
    a2.channels.c1.type = memory
    a2.channels.c1.capacity = 1000
    a2.channels.c1.transactionCapacity = 100
    # Bind the source and sink to the channel
    a2.sources.r1.channels = c1
    a2.sinks.k1.channel = c1

    (4)创建 flume3-flume-logger.conf
    配置 source 用于接收 flume1 与 flume2 发送过来的数据流,最终合并后 sink 到控制
    台。
    在 hadoop104 上编辑配置文件

    [atguigu@hadoop104 group3]$ vim flume3-flume-logger.conf

    添加如下内容

    # Name the components on this agent
    a3.sources = r1
    a3.sinks = k1
    a3.channels = c1
    # Describe/configure the source
    a3.sources.r1.type = avro
    a3.sources.r1.bind = hadoop104
    a3.sources.r1.port = 4141
    # Describe the sink
    # Describe the sink
    a3.sinks.k1.type = logger
    # Describe the channel
    a3.channels.c1.type = memory
    a3.channels.c1.capacity = 1000
    a3.channels.c1.transactionCapacity = 100
    # Bind the source and sink to the channel
    a3.sources.r1.channels = c1
    a3.sinks.k1.channel = c1

    (5)执行配置文件
    分别开启对应配置文件:flume3-flume-logger.conf,flume2-netcat-flume.conf,flume1-logger-flume.conf。

    [atguigu@hadoop104 flume]$ bin/flume-ng agent --conf conf/ --name a3 --conf-file job/group3/flume3-flume-logger.conf -Dflume.root.logger=INFO,console
    [atguigu@hadoop102 flume]$ bin/flume-ng agent --conf conf/ --name a1 --conf-file job/group3/flume1-logger-flume.conf
    [atguigu@hadoop103 flume]$ bin/flume-ng agent --conf conf/ --name a2 --conf-file job/group3/flume2-netcat-flume.conf

    (6)在 hadoop102 上向/opt/module 目录下的 group.log 追加内容

    [atguigu@hadoop102 module]$ echo 'hello' > group.log

    (7)在 hadoop103 上向 44444 端口发送数据

    [atguigu@hadoop103 flume]$ telnet hadoop102 44444

    (8)检查 hadoop104 上数据

    作者:王陸

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

    个性签名:罔谈彼短,靡持己长。做一个谦逊爱学的人!

    本站使用「署名 4.0 国际」创作共享协议,转载请在文章明显位置注明作者及出处。鉴于博主处于考研复习期间,有什么问题请在评论区中提出,博主尽可能当天回复,加微信好友请注明原因

  • 相关阅读:
    手机号码格式化显示javascript
    MySql存储过程与函数
    mysql连接方法
    上传文件夹或上传文件到linux
    VIM编辑器
    linux的简单命令
    CentOS虚拟机网卡配置
    MySQL的远程连接问题 错误1130
    日志备份的shell脚本
    JNA的用法
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/15615296.html
Copyright © 2020-2023  润新知