Flume学习笔记:01-Flume的安装与简单入门示例

文章目录

  • 概述
  • Flume的基础架构
    • Agent
      • Source
      • Sink
      • Channel
    • Event
  • Flume的安装与配置
    • 环境准备
    • 下载flume的安装包
    • 解压安装包
    • 删除guava-11.0.2.jar,以兼容hadoop3.1.3
    • 配置flume环境变量
    • 验证安装是否成功
  • Flume的入门案例
    • 需求描述
    • 实现
      • 一、创建flume的job的配置文件
      • 二、启动agent
      • 三、使用netcat往主机的44444端口模拟发送数据
    • 可能遇到的问题

概述

Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。基于流式架构,使用灵活简单,最主要的作用就是读取服务器本地磁盘的数据,将数据写入到HDFS。

Flume的基础架构

flume.png

Agent

Agent是一个JVM进程,它以事件的形式,将数据从数据源传输到目标中。

Source

Source是负责接收数据到Flume Agent的组件。它可以处理各种类型、各种格式的数据,包括avro、thrift、exec、jms、spooling directory、netcat、taildir、sequence generator、syslog、http、legacy。

Sink

Sink不断地轮询Channel中的事件,且批量地移除他们,并将这些时间批量写入到存储或者索引系统、或者被发送到另外一个Flument Agent。
Sink组件的目的地包括hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义Sink等等。

Channel

Channel是位于Source和Sink之间的缓冲区(可以理解为消息队列)、因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source写入的操作和几个Sink的读取操作。Flume自带两种Channel:Memory ChannelFile Channel

  • Memory Channel

    Memory Channel是内存中的队列。Memory Channel在不需要关心数据丢失的情景下使用。如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序崩溃,机器宕机、或者重启都会导致Memory Channel中的数据丢失。

  • File Channel

    File Channel 将所有的事件写入到磁盘。因此在程序关闭或者机器宕机的情况下不会发生数据丢失。

Event

Event是Flume数据传输的基本单元。在Flume中,数据以Event的形式从Source流向Channel,再从Channel中被Sink读取最后写入到目的地。

event.png

Event由HeaderBody两部分组成。Header用来存放Event的一些属性,为K-V结构,Body用来存放该条数据的内容,为字节数组。

Flume的安装与配置

Flume的安装还是相当简单的,基本上“开箱可用”。

环境准备

  • 安装好Java环境,java版本要求>=1.8

下载flume的安装包

官方连接:https://dlcdn.apache.org/flume/1.10.1/apache-flume-1.10.1-bin.tar.gz

[root@k8s-node3 software]# wget https://dlcdn.apache.org/flume/1.10.1/apache-flume-1.10.1-bin.tar.gz --no-check-certificate 

解压安装包

[root@k8s-node3 software]# tar -xzvf apache-flume-1.10.1-bin.tar.gz
[root@k8s-node3 software]# cd apache-flume-1.10.1-bin/

[root@k8s-node3 apache-flume-1.10.1-bin]# ls
archive  bin  CHANGELOG  conf  DEVNOTES  doap_Flume.rdf  docs  flume.log  job  lib  LICENSE  NOTICE  README.md  RELEASE-NOTES  test.conf  tools
[root@k8s-node3 apache-flume-1.10.1-bin]# cd conf/

[root@k8s-node3 conf]# ls
flume-conf.properties  flume-conf.properties.template  flume-env.ps1.template  flume-env.sh  flume-env.sh.template  log4j2.xml
 
[root@k8s-node3 conf]# cp flume-env.sh.template flume-env.sh

删除guava-11.0.2.jar,以兼容hadoop3.1.3

[root@k8s-node3 apache-flume-1.10.1-bin]# cd lib
[root@k8s-node3 lib]# rm guava-11.0.2.jar

配置flume环境变量

在/etc/profile.d/目录下新建flume.sh文件,

[root@k8s-node3 profile.d]# toucd /etc/profile.d/flume.sh

文件内容如下

export FLUME_HOME=/home/software/apache-flume-1.10.1-bin
export PATH=$FLUME_HOME/bin/:$PATH

验证安装是否成功

[root@k8s-node3 profile.d]# source /etc/profile.d/flume.sh
[root@k8s-node3 profile.d]# flume-ng version
Flume 1.10.1
Source code repository: https://git.apache.org/repos/asf/flume.git
Revision: 047516d4bd5574c3e67a5d98ca2cfe025886df7c
Compiled by rgoers on Sat Aug 13 11:16:08 MST 2022
From source with checksum de1cf990338c759d311522e65597e457

Flume的入门案例

需求描述

使用netcat的source,监听主机上的网络端口,将网络端口上的字符流数据打印到输出台上。

实现

一、创建flume的job的配置文件

在flume的安装目录下创建目录名为job的目录,并创建一个flume-netcat-logger.conf 文件,文件内容如下

# 定义source、channels、sinks变量名,a1 为agent的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1

# 定义source,source的类型是netcat,监听本机的端口是44444
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444

# 定义channel,使用memory channel类型
a1.channels.c1.type = memory
a1.channels.c1.Capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 定义sink
a1.sinks.k1.type = logger

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

Tips:注意在绑定sink与channel时,a1.sinks.k1.channel = c1不要在channel后面添加s,这是很容易出错的点,因为一个sink只能绑定一个channel。

二、启动agent

[root@k8s-node3 apache-flume-1.10.1-bin]# flume-ng agent -c conf -f job/flume-netcat-logger.conf -n a1 -Dflume.root.logger=INFO,Console 

启动参数说明:

  • -c conf 指定flume的conf目录
  • -f job/flume-netcat-logger.conf 指定使用哪个job的配置文件
  • -n a1 指定agent的名称为“a1”,名称必须和flume-netcat-logger.conf配置文件中的名称一致,且同一主机上的多个flume agent之间不能重名。

三、使用netcat往主机的44444端口模拟发送数据

[root@k8s-node3 ~]# nc localhost 44444
hello,world
OK

在flume的agent的运行窗口可以看到

2022-08-30 06:26:52,501 (lifecycleSupervisor-1-1) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:166)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:44444]
2022-08-30 06:33:38,519 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 6C 6C 6F 2C 77 6F 72 6C 64                hello,world }

如果能正常显示netcat发送的数据,那么就说明job的配置是正常的。

可能遇到的问题

  • 如果按照以上步骤或者按照官方文档的步骤操作,很有可能在控制台是看不到netcat发送的消息的,这是因为flume的logger sink默认会将结果打印到文件中。可以打开$FLUME_HOME/flume.log文件查看接收到的数据。

  • 如果需要在控制台输出接收到的数据,则需要更改conf/log4j2.xml文件

找到下面内容,添加Console日志输出

<Root level="INFO">
  <AppenderRef ref="LogFile" />
  <AppenderRef ref="Console" />
Root>

你可能感兴趣的:(大数据,Flume学习笔记,flume,学习,大数据)