0


大数据技术之flume——日志收集系统

一、flume概述

1.1 flume定义

大数据需要解决的三个问题:采集、存储、计算。

Apache flume是一个分布式、可靠的、高可用的海量日志数据采集、聚合和传输系统,将海量的日志数据从不同的数据源移动到一个中央的存储系统中。用一句话总结:Flume不生产数据,它只是数据的搬运工。

flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS。

1.2 flume基础框架

1.2.1 Agent

agent是一个JVM进程,它以事件的形式将数据从源头送至目的地。

agent主要有三个组成部分:Source、Channel、Sink。

Source:采集组件。

用户跟数据源对接,以获取数据;它有各种各样的内置实现。包括
avro、thrift、
exec、jms、
spooling directory、
netcat、
taildir等。

Sink:下沉组件。

不断轮询channel中的事件并批量地移除它们。将这些时间批量写入到存储或索引系统、或者被发送到另一个flume agent中。组件包括
hdfs、
logger、avro、thrift、ipc、
file、
HBase、solr、自定义。

Channel : 传输通道组件。

用于从source将数据传递到sink,起到缓冲的作用,是source和sink之间的缓冲区。如源头采集的数据和输出数据速率不对等,若没有channel,source采集的速率快于sink输出的数据时,会导致系统的崩溃。

channel是
线程安全的,可以同时处理几个source的写入操作和几个sink的读取操作。

flume自带两种channel:
memory channel和
file channel。
memory channel是内存中的队列,在
不需要关心数据丢失的情景下使用;
file channel将所有的事件写道磁盘,因此在程序关闭或者宕机的情况下
不会丢失数据。

1.2.2 Event

传输单元,Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。Event由Header和Body两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

Header(k=v)

Body(byte array)

二、Flume安装

2.1 解压文件

1. 解压文件到/opt/soft中
[root@hadoop02 install]# tar -zxf ./apache-flume-1.9.0-bin.tar.gz -C ../soft/

2. 在/opt/soft目录下将apache-flume-1.9.0-bin 改名为flume190
[root@hadoop02 soft]# mv apache-flume-1.9.0-bin/ flume190

2.2 修改配置文件

1. /opt/soft/flume190/conf目录中将临时配置文件flume-env.sh.template拷贝为配置文件flume-env.sh
[root@hadoop02 conf]# cp flume-env.sh.template flume-env.sh

2. 配置flume-env.sh文件 (修改22行和25行)
[root@hadoop02 conf]#  vim flume-env.sh

22 export JAVA_HOME=/opt/soft/jdk180
25 export JAVA_OPTS="-Xms1000m -Xmx2000m -Dcom.sun.management.jmxremote"

-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些。

-Xmx:java heap最大值,使用的最大内存。

2.3 安装nc(netcat) /telnet协议

[root@hadoop02 conf]# yum install -y nc

先查看telnet
[root@hadoop02  ~]# yum list telnet*
安装telnet
[root@hadoop02 ~]# yum install telnet-server
[root@hadoop02 ~]# yum install telnet.*

telnet是teletype network的缩写,现在已成为一个专有名词,表示远程登录协议和方式,分为Telnet客户端和Telnet服务器程序. Telnet可以让用户在本地Telnet客户端上远端登录到远程Telnet服务器上。

监听端口

先开服务端
[root@hadoop02 ~]# nc -lc 9999

再开客户端
[root@hadoop02 ~]# nc localhost(或输入ip地址) 9999

2.4 应用

2.4.1 监控端口并输出到控制台

1> 通过netcat工具向本机的8888端口发送数据。

2> flume监控本机的8888端口。通过flume的source端读取数据。

3> flume将获取的数据通过sink端写出到控制台。

新建netcat-logger.conf文件

[root@hadoop02 conf]# vim ./netcat-logger.conf
# 给agent命名为a1
a1.sources=r1
a1.sinks=k1
a1.channels=c1

# source的描述信息/配置
a1.sources.r1.type=netcat
a1.sources.r1.bind=192.168.152.192
a1.sources.r1.port=8888
 
# channel的描述信息/配置
a1.channels.c1.type=memory
-- 事务容量,单次发送最大的事件量。要小于总容量
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
 
a1.sinks.k1.type=logger
 
# 将source端和sink端进行绑定
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

启动监听:

监听端口:
以下命令需要进入到flume/bin目录下运行
[root@hadoop02 ~]# /opt/soft/flume190/bin/flume-ng agent --name a1 --conf /opt/soft/flume190/conf/ --conf-file /opt/soft/flume190/conf/netcat-logger.conf -Dflume.root.logger=INFO,console

访问端口:
[root@hadoop02 conf]# netcat 192.168.153.139 8888

运行命令说明:

flume-ng agent:

启动命令。

--name(-n):

agent的名字,这里为a1。

--conf(-c):

flume的配置文件存储在conf/目录。

--conf-file(-f):

flume本次启动的配置文件是conf/netcat-logger.conf文件。

-Dflume.root.logger=INFO,console:

普通运行模式,将运行日志输出到控制台。

-D表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error。

2.4.3 监控单个追加文件

新建flume-file-hdfs.conf文件

--文件保存在/opt/conf中

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

--监听hadoop datanode的log文件
a1.sources.r1.type=exec
a1.sources.r1.command=tail -F /opt/data/datas.csv

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

a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://hadoop02:9000/flume/upload/%Y%m%d/%H

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

启动hadoop

[root@hadoop02 ~]# start-all.sh

启动监听

[root@hadoop02 flume190]# ./bin/flume-ng agent -n a1 -c conf/ -f /opt/conf/flume-file-hdfs.conf 

三、flume事务

Source 采集数据并包装成Event,并将Event缓存再Channel中,Sink不断地从Channel 获取Event,并解决成数据,最终将数据写入存储或索引系统。

Put事务流程:
doPut:将批数据先写入临时缓冲区。

doCommit:检查channel内存队列是否足够合并。

doRollback:channel内存队列空间不足,回滚事务。

Take事务:
doTake:将数据取到临时缓冲区takeList,并将数据发送到HDFS

doCommit:如果数据全部发送成功,则清楚临时缓冲区takeList。

doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给channel内存队列。

标签: 大数据 flume

本文转载自: https://blog.csdn.net/d905133872/article/details/129524360
版权归原作者 five小点心 所有, 如有侵权,请联系我们删除。

“大数据技术之flume——日志收集系统”的评论:

还没有评论