Flume安装及简单使用

FLume的安装

下载地址 http://flume.apache.org/

安装
1、上传
2、解压
3、修改conf/flume-env.sh 文件中的JDK目录(设置为自己的jdk安装目录)
注意:JAVA_OPTS 配置 如果我们传输文件过大 报内存溢出时 需要修改这个配置项
4、验证安装是否成功 ./flume-ng version
5、配置环境变量(我安装在opt下面,并且重命名为flume-1.6.0)
export FLUME_HOME=/opt/flume-1.6.0/bin
export PATH= PATH: FLUME_HOME//bin
6、source .bash_profile


Flume的概念

这里写图片描述
flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到图中的HDFS,简单来说flume就是收集日志的。

Event的概念

在这里有必要先介绍一下flume中event的相关概念:flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
为了方便大家理解,给出一张event的数据流向图:
这里写图片描述

一个完整的event包括:event headers、event body、event信息(即文本文件中的单行记录),如下所以:

这里写图片描述
其中event信息就是flume收集到的日记记录。

Source、Channel、Sink有哪些类型

Flume Source
Source类型                  | 说明
Avro Source                 | 支持Avro协议(实际上是Avro RPC),内置支持
Thrift Source             | 支持Thrift协议,内置支持
Exec Source                 | 基于Unix的command在标准输出上生产数据
JMS Source                | 从JMS系统(消息、主题)中读取数据
Spooling Directory Source | 监控指定目录内数据变更
Twitter 1% firehose Source| 通过API持续下载Twitter数据,试验性质
Netcat Source             | 监控某个端口,将流经端口的每一个文本行数据作为Event输入
Sequence Generator Source | 序列生成器数据源,生产序列数据
Syslog Sources            | 读取syslog数据,产生Event,支持UDP和TCP两种协议
HTTP Source                 | 基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式
Legacy Sources            | 兼容老的Flume OG中Source(0.9.x版本)

Flume Channel
Channel类型     说明
Memory Channel             | Event数据存储在内存中
JDBC Channel               | Event数据存储在持久化存储中,当前Flume Channel内置支持Derby
File Channel               | Event数据存储在磁盘文件中
Spillable Memory Channel   | Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件
Pseudo Transaction Channel | 测试用途
Custom Channel             | 自定义Channel实现

Flume Sink
Sink类型  说明
HDFS Sink           | 数据写入HDFS
Logger Sink           | 数据写入日志文件
Avro Sink           | 数据被转换成Avro Event,然后发送到配置的RPC端口上
Thrift Sink           | 数据被转换成Thrift Event,然后发送到配置的RPC端口上
IRC Sink              | 数据在IRC上进行回放
File Roll Sink      | 存储数据到本地文件系统
Null Sink           | 丢弃到所有数据
HBase Sink          | 数据写入HBase数据库
Morphline Solr Sink | 数据发送到Solr搜索服务器(集群)
ElasticSearch Sink  | 数据发送到Elastic Search搜索服务器(集群)
Kite Dataset Sink   | 写数据到Kite Dataset,试验性质的
Custom Sink           | 自定义Sink实现

案例1:simple example
随便在一个目录下面创建一个文件(我的是在conf目录下,创建一个叫simple1的文件)
vi simple1
配置文件内容

############################################################
# Name the components on this agent,给三个参数定义别名
a1.sources = r1        接受数据
a1.sinks = k1       临时存储
a1.channels = c1    数据输出

# Describe/configure the source
a1.sources.r1.type = netcat     指定sources的数据类型
a1.sources.r1.bind = CentOS8    绑定访问节点
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            channels窗口的配置
a1.channels.c1.capacity = 1000          最多存1000条数据
a1.channels.c1.transactionCapacity = 100    一次取100条数据

# Bind the source and sink to the channel
a1.sources.r1.channels = c1     sources的数据存放位置,把sources和channels绑定
a1.sinks.k1.channel = c1        sinks的数据读取位置,把sink和channels绑定
############################################################

在bin目录下面启动flume
./flume-ng agent -n a1 -c conf -f ../conf/simple1 -Dflume.root.logger=INFO,console

安装telnet
yum install telnet (退出 ctrl+] quit)
访问telnet CentOS8 44444 (如果没有配置访问节点,则默认为127.0.0.1)
然后打印数据,将会显示在Flume启动的界面上面

Memory Chanel 配置
capacity:默认该通道中最大的可以存储的event数量是100,
trasactionCapacity:每次最大可以source中拿到或者送到sink中的event数量也是100
keep-alive:event添加到通道中或者移出的允许时间
byte**:即event的字节量的限制,只包括eventbody


案例2、两个Flume做集群(CentOS8接收数据,输出到CentOS9)
CentOS8服务器中,配置文件

############################################################
# 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 = CentOS8
a1.sources.r1.port = 44444

# Describe the sink
# a1.sinks.k1.type = logger
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = CentOS9
a1.sinks.k1.port = 60000

# 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
############################################################

CentOS9服务器中,安装Flume(步骤略)
配置文件

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

# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.bind = CentOS9
a1.sources.r1.port = 60000

# 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
############################################################

先启动CentOS9的Flume
flume-ng agent -n a1 -c conf -f ../conf/fimple1 -Dflume.root.logger=INFO,console

再启动CentOS8的Flume
flume-ng agent -n a1 -c conf -f ../conf/simple2 -Dflume.root.logger=INFO,console

打开telnet 测试 node02控制台输出结果
telnet CentOS8 44444


案例3、Exec Source
http://flume.apache.org/FlumeUserGuide.html#exec-source

配置文件
############################################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/flume.exec.log

# 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
############################################################
启动Flume
flume-ng agent -n a1 -c conf -f exec.conf -Dflume.root.logger=INFO,console

创建空文件演示 touch flume.exec.log
循环添加数据
for i in {1..50}; do echo "$i hi flume" >> flume.exec.log ; sleep 0.1; done

案例4、Spooling Directory Source
http://flume.apache.org/FlumeUserGuide.html#spooling-directory-source
配置文件

############################################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/logs
a1.sources.r1.fileHeader = true

# 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
############################################################
启动Flume
flume-ng agent -n a1 -c conf -f spool.conf -Dflume.root.logger=INFO,console

拷贝文件演示
mkdir logs
cp flume.exec.log logs/

案例5、hdfs sink
http://flume.apache.org/FlumeUserGuide.html#hdfs-sink

    配置文件
############################################################
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /home/logs
a1.sources.r1.fileHeader = true

# Describe the sink
***只修改上一个spool sink的配置代码块 a1.sinks.k1.type = logger
a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://bx/flume/%Y-%m-%d/%H%M

##每隔60s或者文件大小超过10M的时候产生新文件
# hdfs有多少条消息时新建文件,0不基于消息个数
a1.sinks.k1.hdfs.rollCount=0
# hdfs创建多长时间新建文件,0不基于时间
a1.sinks.k1.hdfs.rollInterval=60
# hdfs多大时新建文件,0不基于文件大小
a1.sinks.k1.hdfs.rollSize=10240
# 当目前被打开的临时文件在该参数指定的时间(秒)内,没有任何数据写入,则将该临时文件关闭并重命名成目标文件
a1.sinks.k1.hdfs.idleTimeout=3

a1.sinks.k1.hdfs.fileType=DataStream
a1.sinks.k1.hdfs.useLocalTimeStamp=true

## 每五分钟生成一个目录:
# 是否启用时间上的”舍弃”,这里的”舍弃”,类似于”四舍五入”,后面再介绍。如果启用,则会影响除了%t的其他所有时间表达式
a1.sinks.k1.hdfs.round=true
# 时间上进行“舍弃”的值;
a1.sinks.k1.hdfs.roundValue=5
# 时间上进行”舍弃”的单位,包含:second,minute,hour
a1.sinks.k1.hdfs.roundUnit=minute

# 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
############################################################

创建HDFS目录
hadoop fs -mkdir /flume

启动Flume
flume-ng agent -n a1 -c conf -f hdfs.conf -Dflume.root.logger=INFO,console

在/home/logs目录下面进行操作
vi /home/logs/test01 保存退出,则会自动生成一个文件

查看hdfs文件
hadoop fs -ls /flume/…
hadoop fs -get /flume/…

猜你喜欢

转载自blog.csdn.net/zhangfengbx/article/details/78880143
今日推荐