【大数据】Flume中间件
.
海洋 之心
阿里云社区专家博主,图神经网络-大数据-推荐系统研究者,专注于计算机领域前沿技术的分享等人工智能算法研究工作
展开
-
【Flume中间件】(14)自定义Sink
自定义Sink自定义Sink的流程就是:首先需要或取sink对应的channel,然后从指定的channel中获取事务,然后再从channel中拉取事件,将事件进行处理,根据业务逻辑将数据写出,然后提交事务,如果成功,channel将该事件清除,否则进行回滚。a1.sources = r1a1.sinks = k1a1.channels = c1a1.sources.r1.type = taildira1.sources.r1.positionFile = /opt/module/flume原创 2021-06-11 13:14:59 · 180 阅读 · 0 评论 -
【Flume中间件】(13)自定义Source
自定义Source有时候,flume中的source不符合我们的需求,这时就可以进行自己定义Source。自定义Source的流程就是首先继承并实现官方类,然后实现相应的方法,重点是读取数据的方法,在该内部可以定义jdbc或者是IO流进行读取数据。然后将数据封装成事件,交给channel处理器。处理器的内部流程是先将该事件交给拦截器进行处理(封装头部信息等),然后判断是否为空,不为空,将其将给选择器,将该事件交给自己对应的channel。自定义的Source类型为自己编写的代码的全类名。注意要将原创 2021-06-11 13:14:41 · 248 阅读 · 1 评论 -
【Flume中间件】(12)自定义拦截器
自定义拦截器在有些情况下,我们需要对采集来的数据进行分类,那么我们就可以采用multiplexing拦截器的方式,在数据中添加头部的键值,根据键值选择相应的channel。我们自定义拦截器需要实现官方的Interceptor,实现相应的方法,而且还需要一个静态内部类,用于返回Interceptor类。而且在实现interceptor方法时,可以进行丢失据,就是有些不符合条件的数据就抛弃掉,可以进行简单的过滤,直接返回null即可。下面实现的就是服务器1进行监听一个数据,如果该数据中存在“hello”原创 2021-06-10 22:38:31 · 118 阅读 · 0 评论 -
【Flume中间件】(11)聚合组
聚合组在生产中后台服务器很多,他们会将他们产生的数据传输到一个服务器进行聚合操作,下面配置的是服务器1和服务器2分别监控自己的文件,将监听到的数据统一发送到服务器3上完成聚合操作。a1.sources = r1a1.sinks = k1a1.channels = c1a1.sources.r1.type = taildir# 文件读取位置信息路径a1.sources.r1.positionFile = /opt/module/flume/position/position.json# 配置原创 2021-06-10 22:38:00 · 234 阅读 · 0 评论 -
【Flume中间件】(10)sink组负载均衡
sink组负载均衡负载均衡的目的就是为了防止单个服务器的压力较大,所以采用两个sink进行负载,channel会随机的从sink组中挑选一个sink进行传输。这里有一个问题,我设置了负载均衡,然后配置的是round_robin,采用轮询方式,如果我数据一条一条的发送,最终是进行轮询,将数据分别进行发送,但是如果数据发送过快,我发现就不是轮询,而是将所有数据都发往同一个sink了,这里我的理解就是说,它说的轮询并不是按数据条来,而是按数据批次,他是按照每一批数据进行轮询,也是大数据集群肯定是不能够以一条数原创 2021-06-10 22:37:30 · 378 阅读 · 0 评论 -
【Flume中间件】(9)sink组故障转移
sink组故障转移有的时候需要设置故障转移,就是比如说现在有一个channel,如果只设置一个的话,一旦该sink端崩掉的话就会造成输出数据中断,所以需要就是配置两个sink,并且设置优先级,优先发送哪个,如果优先级高的sink没有问题的话,channel的数据就会一直发送到它,但是一旦它崩掉,channel就会发送到sink组中另外一个优先级高的sink,如果过了阈值时间,优先级最高的起来的话,channel会继续选择它进行发送数据。下面是flume的配置,flume1会配置两个sink,并设置优先级原创 2021-06-10 22:36:59 · 273 阅读 · 0 评论 -
【Flume中间件】(8)channel选择器副本机制
channel选择器副本机制我们现在的需求就是实时的监听一个文件的变化,然后将变化的数据上传到HDFS,另外需要在本地文件系统保存副本,所以此次的sink去向有两个,一个是HDFS,另外一个就是本地文件系统。其实我们可以用一个flume就可以实现将第一个flume的sink分别设置为两个去向,为什么下图要多用两个flume呢?是因为有时HDFSsink端写数据较慢,生产数据较快,那就有可能生产大于消费,刚开始还可以在channel进行缓存,如果channel也满了就会崩掉,多两个flume也是为了增加缓原创 2021-06-09 21:22:52 · 359 阅读 · 0 评论 -
【Flume中间件】(7)Flume详细传输流程
Flume详细传输流程Flume首先会从数据源接受数据到Source,然后Source将数据封装成事件,然后交给Channel Processor,再把它传递给拦截器链,这里拦截器可以有多个,为了解耦,但是来说还是一个拦截器链比较快,再拦截器部会封装头部信息,然后将处理好的信息交给Channel选择器,就是复制和多路复用,控制Source的数据发往哪个Channel,然后将按照Channel的配置策略将事件发往指定Channel,之后经过Sink组,他是做轮询和负载均衡这些。...原创 2021-06-09 21:22:04 · 583 阅读 · 0 评论 -
【Flume中间件】(6)Flume事务
Flume事务在整个Flume采集数据的过程中,内部发生了很多的事务,在Source阶段有一个Put事务,在sink阶段有一个Take阶段,他们的任务分别是推送时间和拉取事件。Put事务流程:doPut:将批数据先写入临时缓冲区putListdoCommit:检查channel内存队列是否足够合并doRollback:channel内存对垒事务不足进行回滚数据Take事务:doTake:将数据拉取到临时缓冲区takeList,并将数据发送到HDFSdoCommit:如果数据全部发送成原创 2021-06-09 21:21:28 · 171 阅读 · 0 评论 -
【Flume中间件】(5)实时监控多个文件实现断点续传
实时监控多个文件实现断点续传我们之前使用的是exec进行监控一个文件是否有追加数据,这时候会面临问题就是一旦该机器宕机,那么该阶段的数据就会丢失,也不是丢失,就是如果flume停止了,但是此时数据还在进行追加,因为tail -F是读取文件的最后10行,那么之前的数据就会没有读取到,但是更改tail 的参数让flume从头读,这样是不会丢失数据,但是会产生重复数据。所以有一种解决办法就是我们监控的同时记录下当前读取文件的位置信息,并把它保存到磁盘,这样flume任务再次开启时,就会读取该json文件,继续原创 2021-06-09 15:19:56 · 271 阅读 · 0 评论 -
【Flume中间件】(4)实时监控一个文件目录下的多个文件
实时监控一个文件目录下的多个文件有时我们不需要监控一个文件的追加数据,而是进行检测一个文件目录下是否有新的文件,这是就可以采用spool源进行替代exec那种方式,其实用exec也可以,将命令换一下,但是可能效率较低,因为是一行一行的读取嘛。采用spool源就可以指定文件目录进行监控,它的作用机制是当我们向该文件夹中传输文件时,flume会将该文件传到sink,然后flume会将传进来的数据加个后缀,用来区别该文件是否上传过,所以当我们把一个文件传输进来后,再次进行更改该文件,flume不会监听的到,因原创 2021-06-09 15:18:30 · 585 阅读 · 0 评论 -
【Flume中间件】(3)实时监听文件到HDFS系统
实时监听文件到HDFS系统之前测试了监听一个文件的新内容,然后打印到了控制台,现在我们需要将监控到的内容放到HDFS中进行存储,其实和控制台一样,只不过是将sink源改到HDFS,修改一下相关的配置。a1.sources = r1a1.sinks = k1a1.channels = c1a1.sources.r1.type = execa1.sources.r1.command=tail -F /home/hadoop/data/file# 指定用什么去解析上面的命令a1.sources原创 2021-06-09 15:16:55 · 323 阅读 · 0 评论 -
【Flume中间件】(2)实时监听一个文件末尾产生的数据
实时监听一个文件末尾产生的数据有时我们会产生需求实时的监控一个文件的数据,一般来说是日志这种信息,这种情况我们可以使用Flume进行解决,我们需要将source端改为exec,它是按照给定指令进行监控,一般监控文件末尾数据就是tail -F /home/file,这里的-F有一定的讲究就是,如果我们采用大F,那么如果采集出现问题,我们的程序会不断进行尝试,而小f不会。我们为了简单就监听一个普通文件末尾的数据,我们会不断地向file末尾写入新的数据观察flume会不会监听到,为了测试方便,就将输出结果打印原创 2021-06-08 21:08:01 · 295 阅读 · 0 评论 -
【Flume中间件】(1)监听netcat44444端口并将数据打印到控制台
netcat-memory-loggernetcat是用来监听某一端口的数据,所以我们可以使用nc命令进行模拟,然后用Flume的source端监听该端口,然后传输到channel,最终传到logger控制台。channel通常有两种形式,一种是memory,另外一种是file,两种方式分别基于内存和磁盘,可想而知,memory的效率会高很多,而磁盘的效率会相对差一点,但是基于磁盘的缓冲有一个优点就是能够大幅度的防止数据丢失,因为如果采用内存的话,一旦该服务器宕机,那么缓存在内存中的数据就会丢失,而缓冲原创 2021-06-08 21:07:06 · 1228 阅读 · 1 评论