Flume安装与使用

1.概念

Flume是分布式、高可靠、高可用的海量日志采集、聚合、传输系统。支持在日志系统中定制各类数据发送方,用以采集数据,也提供对数据进行简单处理,并写到各种数据接收方的能力。简单来说:Flume是实时采集日志的数据采集引擎。

Flume安装与使用_第1张图片

  1. flume的三个重要的组成部门:Source、Channel、Sink,这三个组件组成agent,Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。

  2. Source:数据接收组件,处理各种类型、各种格式的日志数据,如:avro、exec、spooldir、netcat

  3. Channel:位于source和sink的缓冲区。Channel允许Source和Sink运作在不同的速率上,Channel是线程安全的,可以同时处理多个Source的写入操作及多个Sink的读取操作。
    常用的Channel包括:
    Memory Channel是内存中的队列。大小有限,容量有限,容易丢数据,速度快。Memory Channel在允许数据丢失的情 景下适用。如果不允许数据丢失,应该避免使用Memory Channel,因为程 序死亡、机器宕机或者重启都可能会导致数据丢失;
    File Channel将所有事件写到磁盘。速度慢,容量大, 不丢数据。因此在程序关闭或机器宕机的情况下不会丢失数据;
    kafka Channel
    Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

  4. Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。Sink组件包括hdfs、logger、avro、file、null、HBase、消息队列等。

  5. Event是Flume中数据传输最小单位,定义的一个数据流传输的最小单位。

2.安装flume

  1. 环境准备:centOS7,JDK,HDFS
  2. 文件下载上传到服务器/opt/install目录下
    下载flume文件:apache-flume-1.9.0-bin.tar.gz
    下载地址
    提取码:bgdt
  3. 文件解压
tar -zxf apache-flume-1.9.0-bin.tar.gz -C ../soft/
  1. 修改目录名称
mv apache-flume-1.9.0-bin flume190
  1. 配置环境变量
cd ./flume190/conf/
cp flume-env.sh.template flume-env.sh
vim flume-env.sh
修改配置如下
export JAVA_HOME=/opt/soft/jdk180
export JAVA_OPTS="-Xms1000m -Xmx2000m -Dcom.sun.management.jmxremote"
  1. 配置安装完成

3.flume使用

3.1监听端口
  1. 安装netcat、telnet
yum install -y nc
yum install telnet-server
yum install telnet.*
  1. 测试连接
nc -lk 888//服务器端
telnet 192.168.140.33 888//另一个终端

此时两台机器可以实现通信

  1. flume实现
vim ./netcat-logger.conf //创建netcat-logger.conf文件
内容如下
vim netcat-logger.conf
a1.sources=r1
a1.sinks=k1
a1.channels=c1

a1.sources.r1.type=netcat
a1.sources.r1.bind=192.168.140.33
a1.sources.r1.port=8888

a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

a1.sinks.k1.type=logger

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

开启服务

[root@hadoop33 flume190]# ./bin/flume-ng agent --name a1 --conf ./conf/ --conf-file ./conf/netcat-logger.conf -Dflume.root.logger=INFO,console

打开另一终端连接服务器端口发送信息

telnet 192.168.140.33 8888

Flume安装与使用_第2张图片

3.2 flume获取指定文件的内容

Exec Source:监听一个指定的命令,获取一条命令的结果作为它的数据源

  1. 创建file-flume-logger.conf文件
#将指定文件中的内容输出到控制台
a2.sources=r1
a2.sinks=k1
a2.channels=c1

a2.sources.r1.type=exec
a2.sources.r1.command=tail -f /opt/soft/flume190/flumedemo.log

a2.channels.c1.type=memory
a2.channels.c1.capacity=1000
a2.channels.c1.transactionCapacity=100

a2.sinks.k1.type=logger

a2.sources.r1.channels=c1
a2.sinks.k1.channel=c1

Flume安装与使用_第3张图片
Spooling Directory Source:监听一个指定的目录,即只要应用程序向这个指定的目录中添加新的文件,source组件就可以获取到该信息,并解析该文件的内容,然后写入到channle。写入完成后,标记该文件已完成或者删除该文件

  1. 创建event-flume-logger.conf文件
[root@hadoop33 flume190]# vim ./conf/event-flume-logger.conf
events.sources=eventsSource
events.channels=eventsChannel
events.sinks=eventsSink

events.sources.eventsSource.type=spooldir
events.sources.eventsSource.spoolDir=/opt/flumelogfile/events
events.sources.eventsSource.deserializer=LINE
events.sources.eventsSource.deserializer.maxLineLength=32000
events.sources.eventsSource.includePattern=events_[0-9]{4}-[0-9]{2}-[0-9]{2}.csv

events.channels.eventsChannel.type=file
events.channels.eventsChannel.checkpointDir=/opt/flumelogfile/checkpoint/events
events.channels.eventsChannel.dataDirs=/opt/flumelogfile/data/events


events.sinks.eventsSink.type=logger

events.sources.eventsSource.channels=eventsChannel
events.sinks.eventsSink.channel=eventsChannel

启动flume

./bin/flume-ng agent --name events --conf ./conf/ --conf-file ./conf/event-flume-logger.conf -Dflume.root.logger=INFO,console

flume会对目标文件进行读取,读取过的文件会标记为COMPLETED,当出现符合读取格式的文件,flume会继续读取
在这里插入图片描述
对上面用的几个flume source进行适当总结:
① NetCat Source:监听一个指定的网络端口,即只要应用程序向这个端口里面写数据,这个source组件
就可以获取到信息。
②Spooling Directory Source:监听一个指定的目录,即只要应用程序向这个指定的目录中添加新的文
件,source组件就可以获取到该信息,并解析该文件的内容,然后写入到channle。写入完成后,标记
该文件已完成或者删除该文件。
③Exec Source:监听一个指定的命令,获取一条命令的结果作为它的数据源
常用的是tail -F file指令,即只要应用程序向日志(文件)里面写数据,source组件就可以获取到日志(文件)中最新的内容 。

你可能感兴趣的:(flume,flume,大数据,java)