关于 Flume

2022-02-09 14:48:17 浏览数 (1)

Flume

简介

在一个完整的大数据处理系统中,除了hdfs mapreduce hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图所示:

设计Flume的宗旨是向Hadoop批量导入基于事件的海量数据。一个典型的例子是利用Flume从一组Web服务器中收集日志文件,然后把这些文件中的日志事件转移到一个新的HDFS汇总文件中以做进一步处理,其终点(sink)通常为HDFS。也可以写到HBASE或Solr等其他系统。

概述

  • Flume是Cloudera提供的一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
  • Flume可以采集文件,socket数据包、文件夹等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中
  • 一般的采集需求,通过对flume的简单配置即可实现
  • Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景

当前Flume有两个版本:

  • Flume 0.9X版本的统称Flume-og
  • Flume1.X版本的统称Flume-ng 由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分

运行机制

1、要想使用Flume,就需要运行Flume代理。Flume代理是由持续运行的source(数据源),sink(数据目标)已经channel(用于连接source和sink)构成的Java进程。Flume 是由一组以分布式结构相互连接的代理构成

2、Flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成

3每一个agent相当于一个数据传递员(Source 到 Channel 到 Sink之间传递数据的形式是Event事件;Event事件是一个数据流单元),内部有三个组件:

  • Source:采集源,用于跟数据源对接,以获取数据
  • Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据
  • Channel:angent内部的数据传输通道,用于从source将数据传递到sink

Flume采集系统结构图

简单结构

单个agent采集数据

复杂结构

多级agent之间串联
1.第一种:2个agent串联
2.多个agnet的采集的数据进行汇总
3.采集的数据可以下层到不同的系统中

安装Flume

Flume的下载

下载地址https://flume.apache.org/download.html或http://archive.apache.org/dist/flume/

Flume的安装

Flume框架对hadoop和zookeeper的依赖只是在jar包上,并不要求flume启动时必须将hadoop和zookeeper服务也启动。

将安装包上传到服务器并解压
代码语言:javascript复制
tar -zxvf apache-flume-1.8.0-bin.tar.gz
修改安装包名称
代码语言:javascript复制
mv apache-flume-1.8.0-bin flume-1.8.0
修改配置文件
代码语言:javascript复制
cd flume-1.8.0/conf
cp flume-env.sh.template flume-env.sh
chmod 777 flume-env.sh

在flume-env.sh脚本中配置JAVA_HOME

export JAVA_HOME= /usr/jdk1.8.0_131

flume-env.shflume-env.sh

配置环境变量

代码语言:javascript复制
vi /etc/profile

添加如下内容

代码语言:javascript复制
末尾追加
#FLUME
export FLUME_HOME=/opt/flume/flume-1.8.0
export PATH=$PATH:$FLUME_HOME/bin

保存后,加载生效

代码语言:javascript复制
source /etc/profile
查看版本
代码语言:javascript复制
flume-ng version

出现问题

解决方案

1、修改 Flume 的 flume-ng 文件

代码语言:javascript复制
vim flume-ng

2、编辑内容

代码语言:javascript复制
local HBASE_JAVA_LIBRARY_PATH=$(HBASE_CLASSPATH="$FLUME_CLASSPATH" 
        ${HBASE_IN_PATH} org.apache.flume.tools.GetJavaProperty 
        java.library.path 2>/dev/null | grep hbase)

修改前

修改后

查看版本

0 人点赞