Flume多source,多sink组合框架搭建

Flume多source,多sink组合框架搭建


一、实验目的

1.了解Flume数据传输原理

2.了解Flume的配置文件

3.了解Flume采集与投递数据的框架搭建

二、实验原理

Flume运行的核心是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是Source、Channel、Sink。通过这些组件,Event可以从一个地方流向另一个地方。

Source可以接收外部源发送过来的数据。不同的Source可以接受不同的数据格式。

Channel是一个存储地,接收Source的输出,直到有Sink消费掉Channel中的数据。

Sink消费Channel中的数据,将数据推送给外部源或者其他Source。当Sink写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。

在实际生产环境中,Flume允许多个Agent连在一起,形成前后相连的多级跳。Flume有多种组合方式。比如多个Source收集不同格式的数据输出到同一个Sink中,或者一个Source收集的数据输出到多个Sink中去。

现在有三台机器,分别是:Hadoop1,Hadoop2,Hadoop3,以Hadoop1为日志汇总
在这里插入图片描述
Hadoop1汇总的同时往多个目标进行输出。
在这里插入图片描述

三、实验环境

Linux Ubuntu 16.04

jdk-7u75-linux-x64

hadoop-2.6.0-cdh5.4.5

flume-ng-1.5.0-cdh5.4.5

四、实验内容

在这里插入图片描述
1.使用nc命令产生Syslog日志,发送到6868端口。

2.创建两个Channel,Channel1和Channel2,用于暂存Syslog日志。

3.创建两个Sink,Sink1_To_HDFS是将数据传入到HDFS文件系统/myflume/syslog_mem_hdfsandlogger中,Sink2_To_Logger是将数据以logger的形式,发送到console界面上。

五、实验步骤

1.首先检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。

cd /apps/hadoop/sbin
./start-all.sh

在这里插入图片描述

2.切换目录到/apps/flume/conf目录下,创建Flume的配置文件。

cd /apps/flume/conf
touch syslog_mem_hdfsandlogger.conf

在这里插入图片描述

3.使用vim打开syslog_mem_hdfsandlogger.conf文件。

vim syslog_mem_hdfsandlogger.conf

在这里插入图片描述

定义各个组件

#定义各个组件
agent1.sources  = src
agent1.channels = ch1 ch2
agent1.sinks    = des1 des2

在这里插入图片描述

配置Flume的Source为syslogtcp,并监听6868端口。

#配置source
agent1.sources.src.type = syslogtcp
agent1.sources.src.bind = localhost
agent1.sources.src.port = 6868

在这里插入图片描述

配置两个Channel,都设置为memory。

#配置channel
agent1.channels.ch1.type = memory
agent1.channels.ch2.type = memory

在这里插入图片描述

配置hdfs sink,将数据发送到HDFS上。

#配置hdfs sink
agent1.sinks.des1.type = hdfs
agent1.sinks.des1.hdfs.path = hdfs://localhost:9000/myflume4/syslog_mem_hdfsandlogger/
agent1.sinks.des1.hdfs.useLocalTimeStamp = true
#设置flume临时文件的前缀为 . 或 _ 在hive加载时,会忽略此文件。
agent1.sinks.des1.hdfs.inUsePrefix=_
#设置flume写入文件的前缀是什么
agent1.sinks.des1.hdfs.filePrefix = q7
agent1.sinks.des1.hdfs.fileType = DataStream
agent1.sinks.des1.hdfs.writeFormat = Text
#hdfs创建多久会新建一个文件,0为不基于时间判断,单位为秒
agent1.sinks.des1.hdfs.rollInterval = 20
#hdfs写入的文件达到多大时,创建新文件 0为不基于空间大小,单位B
agent1.sinks.des1.hdfs.rollSize = 10
#hdfs有多少条消息记录时,创建文件,0为不基于条数判断
agent1.sinks.des1.hdfs.rollCount = 5
#hdfs空闲多久就新建一个文件,单位秒
agent1.sinks.des1.hdfs.idleTimeout = 20

在这里插入图片描述

配置logger sink。

#配置logger sink
agent1.sinks.des2.type = logger

在这里插入图片描述

把上面设置的组件关联起来。

##下面是把上面设置的组件关联起来(把点用线连起来)
agent1.sources.src.channels = ch1 ch2
agent1.sinks.des1.channel   = ch1
agent1.sinks.des2.channel   = ch2

在这里插入图片描述

4.启动Flume,执行收集工作。

切换目录到/apps/flume目录下,启动flume-ng的配置。

cd /apps/flume
flume-ng agent -c /conf -f /apps/flume/conf/syslog_mem_hdfsandlogger.conf -n agent1 -Dflume.root.logger=DEBUG,console

在这里插入图片描述

新打开一个窗口,执行nc命令,向6868端口发送消息。

echo "hello can you hear me?" | nc localhost 6868

在这里插入图片描述

5.查看执行效果

可以看到,执行flume-ng配置的界面输出效果为:
在这里插入图片描述

从上面可以看到sink.LoggerSink,也就是发送给logger的输出。

再来查看HDFS上的输出。

hadoop fs -ls -R /
hadoop fs -cat /myflume4/syslog_mem_hdfsandlogger/*

在这里插入图片描述

总结

以上就是今天要讲的内容,本文简单介绍了Flume运行的核心是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是Source、Channel、Sink。通过这些组件,Event可以从一个地方流向另一个地方。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flume中使用Kafka作为Sink的步骤如下: 1. 安装Kafka:首先需要安装Kafka,可以从官网上下载最新版本:https://kafka.apache.org/downloads 2. 配置Kafka:配置Kafka的端口号、主题名称、副本数等参数。在config/server.properties文件中进行配置。 3. 在Flume中添加Kafka Sink:在Flume配置文件中添加一个Kafka Sink,并配置它与Kafka的连接信息和主题等。 4. 启动Kafka和Flume:启动Kafka和Flume。 以下是一个示例Flume配置文件,使用Kafka作为Sink: ``` # Name the components on this agent agent.sources = source agent.sinks = kafkaSink agent.channels = memoryChannel # Describe/configure the source agent.sources.source.type = netcat agent.sources.source.bind = localhost agent.sources.source.port = 44444 # Describe the sink agent.sinks.kafkaSink.type = org.apache.flume.sink.kafka.KafkaSink agent.sinks.kafkaSink.brokerList = localhost:9092 agent.sinks.kafkaSink.topic = myTopic agent.sinks.kafkaSink.serializer.class = kafka.serializer.StringEncoder # Use a channel which buffers events in memory agent.channels.memoryChannel.type = memory agent.channels.memoryChannel.capacity = 1000 # Bind the source and sink to the channel agent.sources.source.channels = memoryChannel agent.sinks.kafkaSink.channel = memoryChannel ``` 在这个配置中,使用netcat作为源,监听本地的44444端口。在Kafka Sink中,配置连接信息和主题名称等参数。同时也使用了一个内存中间件,用于缓存事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i阿极

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值