关于flume的配置文件spool.conf,看不大懂,求高手帮我解释下什么意思

关于flume的配置文件spool.conf,看不大懂,求高手帮我解释下什么意思,第1张

1. flume Event:flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。(json格式的字符串,由headers和body两部分组成)

2. flume Agent:flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel和sink。

3. Source:数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。

4. Channel:数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。

5. Sink : 数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标.

配置文件模版:在 conf目录里面新建一个文件,文件名自定义

#example.conf:单节点Flume配置

#命名Agent a1的组件

a1.sources = r1

a1.sinks = k1

a1.channels = c1

#描述/配置Source

a1.sources.r1.type = netcat Source 类型(还有其他很多)

a1.sources.r1.bind = 0.0.0.0 绑定ip

a1.sources.r1.port = 44444端口号

#描述Sink

a1.sinks.k1.type = logger sink类型

#描述内存Channel

a1.channels.c1.type = memory

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100

#为Channle绑定Source和Sink

a1.sources.r1.channels = c1

a1.sinks.k1.channel = c1

注意:

(1)一个配置文件中可以配置多个Agent,一个Agent中可以包含多个Source、Sink、Channel。

(2)一个Source 可以绑定到多个通道,但一个Sink只能绑定到一个通道

Source类型:

Avro Source 序列化

Exec Source 命令输出作为源

#描述/配置Source

a1.sources.r1.type = exec

a1.sources.r1.command = ping 192.168.242.102

Spooling Directory Source

这个Source允许你将将要收集的数据放置到"自动搜集"目录中。这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个漏孝段文件被完全读入通道,它会被重命名或可选的直接删除。

要注意的是,放置到自动搜集目录下的慎肆文件不能修改,如果修改,则flume会报错返誉。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错

#描述/配置Source

a1.sources.r1.type = spooldir

a1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata

NetCat Source 监听一个指定端口,并将接收到的数据的每一行转换为一个事件

Sequence Generator Source 简单的序列发生器,不断的产生事件,值是从0开始每次递增1。

HTTP Source 接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验(默认jsonhandler,文件上传 blobhandler)

#描述/配置Source

a1.sources.r1.type = http

a1.sources.r1.port = 66666

主要用来进行测试

安装地址:

安装部署:

本地使用的是CDH 6.3.1 版本,已安樱缺装Flume,此处略过安装步骤

使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。

安装netcat并检查端口是否被占用

在Flume的安装目录下创建conf/lib目录,并创建flume的配置文件

添加内容如下:

第一种写法:

第二种写法:

参数说明:

--conf/-c:表示配置文件存储在 conf/目录

--name/-n:表示给 agent 起名为 a1

--conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 flume-telnet.conf

文件。

-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger

参数属性值,并将控制台日志打印级别设置为 INFO 级别。日志级别包括:log、info、warn、

error。

通过nc输入的数据,flume监听页面都接受到了,并且输出到了控制台

实时监控 Hive 日志,并上传到 HDFS 中

注:要想读取 Linux 系统中的文件,就得按照 Linux 命令的规则执行命令。由于 Hive 日志在 Linux 系统中所以读取文件的类型选择:exec 即 execute 执行的意思。表示执行Linux 命令来读取文件。

添加如下内容:

注意: 对于所有与时间相关的转义序列,Event Header 中必须存在以 “timestamp”的key(除非 hdfs.useLocalTimeStamp 设置为 true,此方法会使用 TimestampInterceptor 自动添加 timestamp)。

a3.sinks.k3.hdfs.useLocalTimeStamp = true

从日志可以看到文件已经上传到HDFS:

在HDFS上查看:

1小时自动生产一个目录

1分钟自动生产一仿早个文件

tmp结尾的文件为正在写入的文件,时间到了后就会自动重命名

使用 Flume 监脊大辩听整个目录的文件,并上传至 HDFS

添加如下内容:

flume日志:

从日志输出可以看到原目录的 c.txt直接被修改为 c.txt.COMPLETED,然后c.txt上传到一个另外名字的文件,而且从输出可以看到,多个文件的内容会合并上传到一个hdfs上的文件。

hdfs上看输出:

同样是1分钟一个文件,但是有写入才会创建,如果没有写入是不行的。

  Exec source 适用于监控一个实时追加的文件,不能实现断点续传;Spooldir Source 适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;而 Taildir Source 适合用于监听多个实时追加的文件,并且能够实现断点续传。

案例需求:

使用 Flume 监听整个目录的实时追加文件,并上传至 HDFS 。

添加如下内容:

flume控制台输出:

HDFS查看输出文件:

Taildir Source 维护了一个 json 格式的 position File,其会定期的往 position File中更新每个文件读取到的最新的位置,因此能够实现断点续传

注:

Linux 中储存文件元数据的区域就叫做 inode,每个 inode 都有一个号码, *** 作系统用 inode 号码来识别不同的文件,Unix/Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。

改名后inode不会发生变化,这点要注意


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12203263.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存