Flume

1.Flume概述

  • Flume是一个分布式日志采集工具,可以对产生的海量日志进行自动收集,聚合,移动。

  • 结构

在这里插入图片描述

  1. Web Server

    日志信息的来源

  2. Agent

    Agent其实是一个在Flume启动时启动的一个JVM程序,使用Flume进行数据采集的时候先编写Agent配置文件,之后启动Agent来进行采集

    • Source

      负责将采集信息,并将数据放入Channel

    • Channnel

      以队列的形式将采集到的数据进行缓存,等待Sink读取数据

    • Sink

      读取Channel中的数据并将数据发送到保存端

  3. HDFS

    保存日志信息位置

2.Flume安装

  1. 下载并解压flume-1.9.0

  2. 修改配置文件

    fiume-env.sh

    export JAVA_HOME=/opt/jdk1.8
    
  3. 添加环境变量

    echo 'export FLUME_HOME=/opt/flume-1.9.0' >> /etc/profile
    echo 'export PATH=$FLUME_HOME/bin:$PATH' >> /etc/profile
    source /etc/profile
    

3.Flume的集中框架形式及其使用

具体详细信息参照Flume官方网站Welcome to Apache Flume — Apache Flume

1.Netcat_to_Logger

  • 使用Netcat监听某一端口的信息,并打印到控制台

在这里插入图片描述

  • 编写Netcat_to_Logger.conf配置文件
# example.conf: A single-node Flume configuration

# Name the components on this agent
# 配置agent中所有组件的名称
# a1是agent的名字
# r1是source的名字
# k1是sink的名字
# c1是channel的名字
# 如果有多个组件 可以空格拼接多个名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置source
# 设置source类型
a1.sources.r1.type = netcat
# 设置netcat连接的主机名
a1.sources.r1.bind = host01
a1.sources.r1.port = 12345

# 配置sink
a1.sinks.k1.type = logger

# 配置channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 设置source和sink连接到哪些channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 命令行输入启动命令
flume-ng agent \
-c /opt/flume-1.9.0/conf \
-f /opt/flume-1.9.0/agents/netcat_to_logger.conf \
-n a1 \
-Dflume.root.logger=INFO,console

2.Netcat_to_HDFS

  • 使用Netcat监听某一端口的信息,并记录到HDFS

在这里插入图片描述

  • 编写Netcat_to_HDFS.conf配置文件
# example.conf: A single-node Flume configuration

# Name the components on this agent
# 配置agent中所有组件的名称
# a1是agent的名字
# r1是source的名字
# k1是sink的名字
# c1是channel的名字
# 如果有多个组件 可以空格拼接多个名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置source
# 设置source类型
a1.sources.r1.type = netcat
# 设置netcat连接的主机名
a1.sources.r1.bind = host01
a1.sources.r1.port = 12345

# 配置sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://host01:8020/flume
# 配置输出内容的文件格式
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text

# 配置channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 设置source和sink连接到哪些channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 启动Agent
flume-ng agent \
--conf /opt/flume-1.9.0/conf \
--conf-file /opt/flume-1.9.0/agents/Netcat_to_HDFS.conf \
--name a1 \
-Dflume.root.logger=INFO,console

3.Exec_to_HDFS

使用Exec监控单文件变化采集数据发送到HDFS

  • 编写配置文件Exec_to_HDFS.conf

    # example.conf: A single-node Flume configuration
    
    # Name the components on this agent
    # 配置agent中所有组件的名称
    # a1是agent的名字
    # r1是source的名字
    # k1是sink的名字
    # c1是channel的名字
    # 如果有多个组件 可以空格拼接多个名称
    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    # 配置source
    # 设置source类型
    a1.sources.r1.type = exec
    # 监控root底下3.txt这个文件
    a1.sources.r1.command = tail -F /root/3.txt
    
    # 配置sink
    a1.sinks.k1.type = hdfs
    a1.sinks.k1.hdfs.path = hdfs://host01:8020/flume
    a1.sinks.k1.hdfs.fileType = DataStream
    a1.sinks.k1.hdfs.writeFormat = Text
    
    # 配置channel
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    # 设置source和sink连接到哪些channel
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1
    

    4.常用的Source、channel、sink

    • Source

      1. Exec用于监控单个文件的变化搭配tail-F使用
      2. spooling dir用于监控文件夹 将移动到文件夹中的新文件全部读取
      3. tailDir用于监控文件或者文件夹 并记录读取进度实现断点续读(推荐使用)
    • channel

      1. memory 将数据缓存到内容当中容量受制于agent的堆内存大小
      2. file 配置一个checkpoint目录用于将source采集的数据保存在磁盘上,agent重新启动后sink可以继续读取channel缓存的数据,避免数据丢失
    • sink

      • logger 用于测试 将数据打印到控制台

      • hdfs 将数据写入HDFS

      可以根据自己的需求使用不同Source、channel、sink搭配自己的Agent,编写配置文件

# Sink配置
# 类型
a1.sinks.k1.type = hdfs
# 存储路径
# 可以使用别名设置动态路径
a1.sinks.k1.hdfs.path = hdfs://host01:8020/flume/%Y-%m-%d-%H-%M/
# HDFSSink默认使用Hadoop中的SequenceFile存储数据
# 可以将其设置为DataStream用于开启普通字节流存储数据
a1.sinks.k1.hdfs.fileType = DataStream
# 设置文件的输出格式
# HDFS Sink默认使用Writable
# 采集日志时可以设置为Text用文本保存
a1.sinks.k1.hdfs.writeFormat = Text
# 使用本地时间作为时间戳标识
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# 滚动生成新文件的周期 单位秒
a1.sinks.k1.hdfs.rollInterval = 60
# 滚动生成新文件的大小  单位字节
a1.sinks.k1.hdfs.rollSize = 134217728
# 滚动生成新文件的数据条数  设置为0 关闭以条数滚动文件的条件
a1.sinks.k1.hdfs.rollCount = 0

配置sink中的各个参数,调整日志生成的格式,以及生成周期,生成文件

5.常用架构

file

file

file

file

6.举例

file

以两个Agent为例

  • 编写第一个Agent的配置文件Tail_to_Avro.conf
# example.conf: A single-node Flume configuration

# Name the components on this agent
# 配置agent中所有组件的名称
# a1是agent的名字
# r1是source的名字
# k1是sink的名字
# c1是channel的名字
# 如果有多个组件 可以空格拼接多个名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置source
# 设置source类型
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = g1 g2
a1.sources.r1.filegroups.g1 = /root/log/.*
a1.sources.r1.filegroups.g2 = /root/6.txt


# Sink配置
# 类型
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = host02
a1.sinks.k1.port = 12345


# 配置channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 设置source和sink连接到哪些channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
  • 编写第二个配置文件Avro_to_HDFS.conf
# example.conf: A single-node Flume configuration

# Name the components on this agent
# 配置agent中所有组件的名称
# a1是agent的名字
# r1是source的名字
# k1是sink的名字
# c1是channel的名字
# 如果有多个组件 可以空格拼接多个名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置source
# 设置source类型
a1.sources.r1.type = avro
a1.sources.r1.bind = host02
a1.sources.r1.port = 12345


# Sink配置
# 类型
a1.sinks.k1.type = hdfs
# 存储路径
# 可以使用别名设置动态路径
a1.sinks.k1.hdfs.path = hdfs://host01:8020/flume/%Y-%m-%d-%H/
# HDFSSink默认使用Hadoop中的SequenceFile存储数据
# 可以将其设置为DataStream用于开启普通字节流存储数据
a1.sinks.k1.hdfs.fileType = DataStream
# 设置文件的输出格式
# HDFS Sink默认使用Writable
# 采集日志时可以设置为Text用文本保存
a1.sinks.k1.hdfs.writeFormat = Text
# 使用本地时间作为时间戳标识
a1.sinks.k1.hdfs.useLocalTimeStamp = true
# 滚动生成新文件的周期 单位秒
a1.sinks.k1.hdfs.rollInterval = 3600
# 滚动生成新文件的大小  单位字节
a1.sinks.k1.hdfs.rollSize = 134217728
# 滚动生成新文件的数据条数  设置为0 关闭以条数滚动文件的条件
a1.sinks.k1.hdfs.rollCount = 0

# 配置channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 设置source和sink连接到哪些channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

在host01上面运行Tail_to_Avro.conf,在host02上面启动Avro_to_HDFS.conf服务接收来自host01上面的文件数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值