大数据技术之flume——日志收集系统
创始人
2025-05-29 04:16:14

一、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.sh2. 配置flume-env.sh文件 (修改22行和25行)
[root@hadoop02 conf]#  vim flume-env.sh22 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=100a1.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.csva1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100a1.sinks.k1.type=hdfs
a1.sinks.k1.hdfs.path=hdfs://hadoop02:9000/flume/upload/%Y%m%d/%Ha1.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内存队列。

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...