目录
flume环境配置和测试在前两章讲到了,大家可以移步主页
Flume的可靠性保证-负载均衡
配置的采集方案是通过唯一一个Sink作为接收器接收后续需要的数据,但会出现当前Sink故障或数据收集请求量较大的情况,这时单一Sink配置可能就无法保证Flume开发的可靠性。因此,Flume 提供Flume Sink Processors解决上述问题。
Sink处理器允许定义Sink groups,将多个sink分组到一个实体中,Sink处理器就可通过组内多个sink为服务提供负载均衡功能。
搭建并配置flume集群
三台服务器的flume集群:hadoop01、hadoop02、hadoop03
分发hadoop01上的flume文件到hadoop02和hadoop03上
分发环境变量配置文件
环境变量起作用
配置采集方案
查看官方文档的示例
hadoop001上配置第一级采集方案
两级的配置方案
Avro
# Name the components on this agent
# 定义代理的名字a1及各个组件sources、sinks和channels
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1
#定义组的属性
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = load_balance
定义负载均衡
a1.sinkgroups.g1.processor.backoff = true
a1.sinkgroups.g1.processor.selector = random
a1.sinkgroups.g1.processor.selector.maxTimeOut = 30000
# Describe/configure the source
# 定义数据源,监控文件的变化
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/test1.log
# Describe the sink
# 定义数据的目的地(下沉)
a1.sinks.k1.type = avro
a1.sinks.k1.channel = c1
a1.sinks.k1.hostname = hadoop002
a1.sinks.k1.port = 4545
# Describe the sink
# 定义数据的目的地(下沉)
a1.sinks.k2.type = avro
a1.sinks.k2.channel = c1
a1.sinks.k2.hostname = hadoop003
a1.sinks.k2.port = 4545
# Use a channel which buffers events in memory
# 定义管道,缓冲数据
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 启动命令
# flume-ng agent --conf conf --conf-file conf/exec-avro.conf --name a1 -Dflume.root.logger=INFO,console
在hadoop02和hadoop03上配置第二级方案
hadoop002
# example.conf: A single-node Flume configuration
# Name the components on this agent
# 定义代理的名字a1及各个组件sources、sinks和channels
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
# 定义数据源
a1.sources.r1.type = avro
a1.sources.r1.bind = hadoop002
a1.sources.r1.port = 4545
# Describe the sink
# 定义数据的目的地(下沉)
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
a1.sinks.k1.hdfs.filePrefix = events-
# 是否循环创建文件夹
a1.sinks.k1.hdfs.round = true
# 循环创建文件夹的时间间隔是十分钟
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
# 使用本地时间个数
a1.sinks.k1.hdfs.useLocalTimeStamp = true
// 列编辑模式,按住alt选择多列
# 时间间隔
a1.sinks.k1.hdfs.rollInterval = 3
# 大小间隔
a1.sinks.k1.hdfs.rollSize = 20
# event的个数,这三个参数谁先满足就出发循环滚动
a1.sinks.k1.hdfs.rollCount = 5
# 批处理数量
a1.sinks.k1.hdfs.batchSize = 1
# 文件格式 表示普通文本文件
a1.sinks.k1.hdfs.fileType = DataStream
# Use a channel which buffers events in memory
# 定义管道
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
# 组装组件
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
# 启动命令
# flume-ng agent --conf conf --conf-file conf/avro-hdfs.conf --name a1 -Dflume.root.logger=INFO,console
启动flume
在hadoop002和hadoop003上flume
从最后一级开始启动flume
Hadoop002
Hadoop003
在hadoop01上启动flume
启动成功后,提示连接信息
同时在hadoop02和hadoop03上也提示连接成功
负载均衡的测试
克隆hadoop01的一个会话,编写脚本并运行
查看结果
出现错误,没反应
检查
重新运行
Hadoop002
Hadoop003
Hadoop的web ui上
停止的时候也要从前往后
到这里flume的负载均衡测试就测试完成了
总的来说就是flume把任务平均分给每个节点,来保证所有节点不会负载太多
Flume的可靠性保证-故障恢复
配置采集方案
只需要改动第一级采集方案部分内容
改为故障恢复:
第二级采集方案不用修改
启动flume
flume-ng agent --conf conf --conf-file conf/avro-hdfs.conf --name a1 -Dflume.root.logger=INFO,console
从最后一级开始启动flume
再启动测试脚本
flume-ng agent --conf conf --conf-file conf/exec-avro-failover.conf --name a1 -Dflume.root.logger=INFO,console
03工作02待机
故障恢复
把hadoop03的flume关闭,等待十秒钟(超时时间,在采集方案中进行的定义)
flume的学习到这里就告一段落了,下一文章(11)就是sqoop数据迁移的简单介绍了