Flume的安装及使用

Flume的安装及使用

Flume的安装及使用Flume的安装1、上传至虚拟机,并解压2、重命名目录,并配置环境变量3、查看flume版本4、测试flume5、flume的使用6、多sink7、多Agent

Flume的安装

1、上传至虚拟机,并解压
复制代码
tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/local/soft/

在环境变量中增加如下命令,可以使用 soft 快速切换到 /usr/local/soft

alias soft='cd /usr/local/soft/'

2、重命名目录,并配置环境变量
复制代码
mv apache-flume-1.9.0-bin/ flume-1.9.0
vim /etc/profile
export FLUME_HOME=/usr/local/soft/flume-1.9.0
export PATH=$PATH:$FLUME_HOME/bin
source /etc/profile
3、查看flume版本
复制代码
flume-ng version
复制代码
[root@master soft]# flume-ng version
Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9
[root@master soft]# 
4、测试flume
  • 监控一个目录,将数据打印出来

    • 配置文件
    复制代码
    # 首先先给agent起一个名字 叫a1
    # 分别给source channel sink取名字
    a1.sources = r1
    a1.channels = c1
    a1.sinks = k1
    ​
    # 分别对source、channel、sink进行配置
    ​
    # 配置source
    # 将source的类型指定为 spooldir 用于监听一个目录下文件的变化
    # 因为每个组件可能会出现相同的属性名称,所以在对每个组件进行配置的时候 
    # 需要加上 agent的名字.sources.组件的名字.属性 = 属性值
    a1.sources.r1.type = spooldir
    a1.sources.r1.spoolDir = /root/data/
    a1.sources.r1.fileSuffix = .ok
    a1.sources.r1.fileHeader = true
    ​
    # 配置channel
    # 将channel的类型设置为memory,表示将event缓存在内存中
    a1.channels.c1.type = memory
    ​
    # 配置sink
    # 使用logger作为sink组件,可以将收集到数据直接打印到控制台
    a1.sinks.k1.type = logger
    ​
    # 组装
    # 将sources的channels属性指定为c1
    a1.sources.r1.channels = c1
    ​
    # 将sinks的channel属性指定为c1
    a1.sinks.k1.channel = c1
    • 启动agent
    复制代码
    flume-ng agent -n a1 -f ./spoolingtest.conf -Dflume.root.logger=DEBUG,console
    • 新建/root/data目录
    复制代码
    mkdir /root/data
    • 在/root/data/目录下新建文件,输入内容,观察flume进程打印的日志
    复制代码
    # 随意在a.txt中加入一些内容
    vim /root/data/a.txt
5、flume的使用
  • spoolingToHDFS.conf

    • 配置文件
    复制代码
    # a表示给agent命名为a
    # 给source组件命名为r1
    a.sources = r1
    # 给sink组件命名为k1
    a.sinks = k1 
    # 给channel组件命名为c1
    a.channels = c1
    ​
    #指定spooldir的属性
    a.sources.r1.type = spooldir 
    a.sources.r1.spoolDir = /root/data 
    a.sources.r1.fileHeader = true 
    ​
    #指定sink的类型
    a.sinks.k1.type = hdfs
    a.sinks.k1.hdfs.path = /data/flume/students
    # 指定文件名前缀
    a.sinks.k1.hdfs.filePrefix = student
    # 指定达到多少数据量写一次文件 单位:bytes
    a.sinks.k1.hdfs.rollSize = 102400
    # 指定多少条写一次文件
    a.sinks.k1.hdfs.rollCount = 1000
    # 指定文件类型为 流 来什么输出什么
    a.sinks.k1.hdfs.fileType = DataStream
    # 指定文件输出格式 为text
    a.sinks.k1.hdfs.writeFormat = text
    # 指定文件名后缀
    a.sinks.k1.hdfs.fileSuffix = .txt
    ​
    #指定channel
    a.channels.c1.type = memory 
    a.channels.c1.capacity = 1000
    # 表示sink每次会从channel里取多少数据
    a.channels.c1.transactionCapacity = 100
    ​
    # 组装
    a.sources.r1.channels = c1 
    a.sinks.k1.channel = c1
    • 在 /root/data/目录下准备数据
    复制代码
    1500100003,单乐蕊,22,女,理科六班
    1500100004,葛德曜,24,男,理科三班
    1500100005,宣谷芹,22,女,理科五班
    1500100006,边昂雄,21,男,理科二班
    1500100007,尚孤风,23,女,文科六班
    1500100008,符半双,22,女,理科六班
    1500100009,沈德昌,21,男,理科一班
    1500100010,羿彦昌,23,男,理科六班
    1500100011,宰运华,21,男,理科三班
    1500100012,梁易槐,21,女,理科一班
    1500100013,逯君昊,24,男,文科二班
    1500100014,羿旭炎,23,男,理科五班
    1500100015,宦怀绿,21,女,理科一班
    1500100016,潘访烟,23,女,文科一班
    1500100017,高芷天,21,女,理科五班
    • 启动agent
    复制代码
    flume-ng agent -n a -f ./spoolingToHDFS.conf -Dflume.root.logger=DEBUG,console
  • hbaseLogToHDFS

    • 配置文件
    复制代码
    # a表示给agent命名为a
    # 给source组件命名为r1
    a.sources = r1
    # 给sink组件命名为k1
    a.sinks = k1 
    # 给channel组件命名为c1
    a.channels = c1
    ​
    #指定exec的属性
    a.sources.r1.type = exec 
    a.sources.r1.command = tail -200f /usr/local/soft/hbase-2.2.7/logs/hbase-root-master-master.log
    ​
    #指定sink的类型
    a.sinks.k1.type = hdfs
    a.sinks.k1.hdfs.path = /data/flume/hbase_log
    # 指定文件名前缀
    a.sinks.k1.hdfs.filePrefix = hbaselog
    # 指定达到多少数据量写一次文件 单位:bytes
    a.sinks.k1.hdfs.rollSize = 102400
    # 指定多少条写一次文件
    a.sinks.k1.hdfs.rollCount = 1000
    # 指定文件类型为 流 来什么输出什么
    a.sinks.k1.hdfs.fileType = DataStream
    # 指定文件输出格式 为text
    a.sinks.k1.hdfs.writeFormat = text
    # 指定文件名后缀
    a.sinks.k1.hdfs.fileSuffix = .txt
    ​
    #指定channel
    a.channels.c1.type = memory 
    a.channels.c1.capacity = 1000
    # 表示sink每次会从channel里取多少数据
    a.channels.c1.transactionCapacity = 100
    ​
    # 组装
    a.sources.r1.channels = c1 
    a.sinks.k1.channel = c1
  • hbaselogToHBase

    • 在hbase中创建log表
    复制代码
    create 'log','cf1'
    • 配置文件
    复制代码
    # a表示给agent命名为a
    # 给source组件命名为r1
    a.sources = r1
    # 给sink组件命名为k1
    a.sinks = k1 
    # 给channel组件命名为c1
    a.channels = c1
    ​
    #指定exec的属性
    a.sources.r1.type = exec 
    a.sources.r1.command = tail -200f /usr/local/soft/hbase-2.2.7/logs/hbase-root-master-master.log
    ​
    #指定sink的类型
    a.sinks.k1.type = hbase2
    a.sinks.k1.table = hbase_log
    a.sinks.k1.columnFamily = info
    ​
    #指定channel
    a.channels.c1.type = memory 
    a.channels.c1.capacity = 100000
    # 表示sink每次会从channel里取多少数据
    a.channels.c1.transactionCapacity = 100
    ​
    # 组装
    a.sources.r1.channels = c1 
    a.sinks.k1.channel = c1
    复制代码
    # 创建hbase表
    create 'hbase_log','info'
  • netcatLogger

    监听telnet端口

    • 安装telnet
    复制代码
    yum install telnet
    • 配置文件
    复制代码
    # a表示给agent命名为a
    # 给source组件命名为r1
    a.sources = r1
    # 给sink组件命名为k1
    a.sinks = k1 
    # 给channel组件命名为c1
    a.channels = c1
    ​
    #指定netcat的属性
    a.sources.r1.type = netcat 
    a.sources.r1.bind = 0.0.0.0 
    a.sources.r1.port = 8888 
    ​
    #指定sink的类型
    a.sinks.k1.type = logger
    ​
    #指定channel
    a.channels.c1.type = memory 
    a.channels.c1.capacity = 1000
    # 表示sink每次会从channel里取多少数据
    a.channels.c1.transactionCapacity = 100
    ​
    # 组装
    a.sources.r1.channels = c1 
    a.sinks.k1.channel = c1
    • 启动

      • 先启动agent
      复制代码
      flume-ng agent -n a -f ./netcatToLogger.conf -Dflume.root.logger=DEBUG,console
      • 在启动telnet
      复制代码
      telnet master 8888
  • httpToLogger

    • 配置文件
    复制代码
    # a表示给agent命名为a
    # 给source组件命名为r1
    a.sources = r1
    # 给sink组件命名为k1
    a.sinks = k1 
    # 给channel组件命名为c1
    a.channels = c1
    ​
    #指定http的属性
    a.sources.r1.type = http
    a.sources.r1.port = 6666 
    ​
    #指定sink的类型
    a.sinks.k1.type = logger
    ​
    #指定channel
    a.channels.c1.type = memory 
    a.channels.c1.capacity = 1000
    # 表示sink每次会从channel里取多少数据
    a.channels.c1.transactionCapacity = 100
    ​
    # 组装
    a.sources.r1.channels = c1 
    a.sinks.k1.channel = c1
复制代码
  
* 启动
  
    * 先启动agent
  
复制代码
flume-ng agent -n a -f ./httpToLogger.conf -Dflume.root.logger=DEBUG,console
复制代码
  
    * 再使用curl发起一个http请求
  
复制代码
curl -X POST -d '[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "数加学院"}]' http://master:6666
```
6、多sink

vim netcat_to_hdfs.conf

复制代码
# a表示给agent命名为a
# 给source组件命名为r1
a.sources = r1
# 给sink组件命名为k1
a.sinks = k1 k2
# 给channel组件命名为c1
a.channels = c1
​
#指定netcat的属性
a.sources.r1.type = netcat 
a.sources.r1.bind = 0.0.0.0 
a.sources.r1.port = 8888 
​
#指定sink的类型
a.sinks.k1.type = logger
​
​
#指定sink的类型
a.sinks.k2.type = hdfs
a.sinks.k2.hdfs.path = /data/flume/netcat
# 指定文件名前缀
a.sinks.k2.hdfs.filePrefix = hbaselog
# 指定达到多少数据量写一次文件 单位:bytes
a.sinks.k2.hdfs.rollSize = 102400
# 指定多少条写一次文件
a.sinks.k2.hdfs.rollCount = 1000
# 指定文件类型为 流 来什么输出什么
a.sinks.k2.hdfs.fileType = DataStream
# 指定文件输出格式 为text
a.sinks.k2.hdfs.writeFormat = text
# 指定文件名后缀
a.sinks.k2.hdfs.fileSuffix = .txt
​
#指定channel
a.channels.c1.type = memory 
a.channels.c1.capacity = 1000
# 表示sink每次会从channel里取多少数据
a.channels.c1.transactionCapacity = 100
​
# 组装
a.sources.r1.channels = c1 
a.sinks.k1.channel = c1
a.sinks.k2.channel = c1
7、多Agent

vim flume_hbase_regionserver_node1.conf

复制代码
# a表示给agent命名为a
# 给source组件命名为r1
a.sources = r1
# 给sink组件命名为k1
a.sinks = k1 
# 给channel组件命名为c1
a.channels = c1
​
#指定exec的属性
a.sources.r1.type = exec 
a.sources.r1.command = tail -200f /usr/local/soft/hbase-2.2.7/logs/hbase-root-regionserver-node1.log
​
#指定sink的类型
a.sinks.k1.type = avro
a.sinks.k1.hostname = master
a.sinks.k1.port = 7777
​
#指定channel
a.channels.c1.type = memory 
a.channels.c1.capacity = 100000
# 表示sink每次会从channel里取多少数据
a.channels.c1.transactionCapacity = 100
​
# 组装
a.sources.r1.channels = c1 
a.sinks.k1.channel = c1

vim flume_hbase_regionserver_node2.conf

复制代码
# a表示给agent命名为a
# 给source组件命名为r1
a.sources = r1
# 给sink组件命名为k1
a.sinks = k1 
# 给channel组件命名为c1
a.channels = c1
​
#指定exec的属性
a.sources.r1.type = exec 
a.sources.r1.command = tail -200f /usr/local/soft/hbase-2.2.7/logs/hbase-root-regionserver-node2.log
​
#指定sink的类型
a.sinks.k1.type = avro
a.sinks.k1.hostname = master
a.sinks.k1.port = 7777
​
#指定channel
a.channels.c1.type = memory 
a.channels.c1.capacity = 100000
# 表示sink每次会从channel里取多少数据
a.channels.c1.transactionCapacity = 100
​
# 组装
a.sources.r1.channels = c1 
a.sinks.k1.channel = c1

vim flume_data_to_hdfs_master.conf

复制代码
# a表示给agent命名为a
# 给source组件命名为r1
a.sources = r1
# 给sink组件命名为k1
a.sinks = k1 
# 给channel组件命名为c1
a.channels = c1
​
#指定exec的属性
a.sources.r1.type = avro 
a.sources.r1.bind = 0.0.0.0 
a.sources.r1.port = 7777
​
#指定sink的类型
a.sinks.k1.type = hdfs
a.sinks.k1.hdfs.path = /data/flume/regionserver/log
# 指定文件名前缀
a.sinks.k1.hdfs.filePrefix = hbaselog
# 指定达到多少数据量写一次文件 单位:bytes
a.sinks.k1.hdfs.rollSize = 102400
# 指定多少条写一次文件
a.sinks.k1.hdfs.rollCount = 1000
# 指定文件类型为 流 来什么输出什么
a.sinks.k1.hdfs.fileType = DataStream
# 指定文件输出格式 为text
a.sinks.k1.hdfs.writeFormat = text
# 指定文件名后缀
a.sinks.k1.hdfs.fileSuffix = .txt
​
#指定channel
a.channels.c1.type = memory 
a.channels.c1.capacity = 1000
# 表示sink每次会从channel里取多少数据
a.channels.c1.transactionCapacity = 100
​
# 组装
a.sources.r1.channels = c1 
a.sinks.k1.channel = c1
相关推荐
zhixingheyi_tian3 小时前
Spark 之 Aggregate
大数据·分布式·spark
PersistJiao3 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
宅小海6 小时前
scala String
大数据·开发语言·scala
小白的白是白痴的白6 小时前
11.17 Scala练习:梦想清单管理
大数据
java1234_小锋6 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
Java 第一深情10 小时前
零基础入门Flink,掌握基本使用方法
大数据·flink·实时计算
MXsoft61810 小时前
华为服务器(iBMC)硬件监控指标解读
大数据·运维·数据库
PersistJiao11 小时前
Spark 分布式计算中网络传输和序列化的关系(二)
大数据·网络·spark·序列化·分布式计算
九河云11 小时前
如何对AWS进行节省
大数据·云计算·aws
FreeIPCC12 小时前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源