Flume案例四【扇入】

Posted on 2020-03-27 15:06  MissRong  阅读(227)  评论(0)    收藏  举报

案例四:扇入(fan in)-FlumeFlume之间数据传递,多Flume汇总数据到单Flume

 目标:flume-1监控文件hive.log,flume-2监控某一个端口的数据流,flume-1与flume-2将数据发送给flume-3,flume-3将最终数据写入到HDFS。

分步实现:

1.创建flume-1.conf,用于监控55555端口,同时sink数据到bigdata113

#定义agent的三个角色

# 1 agent

a1.sources = netcat-a1

a1.sinks = avro113

a1.channels = c1

 

#配置source

# 2 source

#bigdata111监控端口

a1.sources.netcat-a1.type = netcat

#端口所在的地址-监控本机

a1.sources.netcat-a1.bind = bigdata111

#监控的端口(随意-不要和之前的重复)

a1.sources.netcat-a1.port = 55555

 

#配置sink

# 3 sink-avro是用于flume之间的资源

a1.sinks.avro113.type = avro

a1.sinks.avro113.hostname = bigdata113

#端口不能和之前的冲突

a1.sinks.avro113.port = 4141

 

#配置channel

# 4 channel

#存到内存-memory

a1.channels.c1.type = memory

#channel的大小

a1.channels.c1.capacity = 1000

#每次可以从channel拿出数据的多少

a1.channels.c1.transactionCapacity = 100

 

#连接source,channels

# 5. Bind

a1.sources.netcat-a1.channels = c1

a1.sinks.avro113.channel = c1

2. 创建flume-2.conf,用于监控端口55555数据流,同时sink数据到bigdata113

#定义agent的三个角色

# 1 agent

a2.sources = tail-file

a2.sinks = avro113

#代表各个flume中channel的cx是针对该flume自定义的,这个和ax的定义规则不同

a2.channels = c1

 

#配置source

# 2 source

#bigdata112监控文件

a2.sources.tail-file.type = exec

#文件所在的路径

a2.sources.tail-file.command =tail -F /opt/plus

#监控的文件

a2.sources.tail-file.shell = /bin/bash -c

 

#配置sink

# 3 sink -avro是用于flume之间的资源

a2.sinks.avro113.type = avro

a2.sinks.avro113.hostname = bigdata113

#端口不能和之前的冲突-但要和一起扇入的其他sink端口一样

a2.sinks.avro113.port = 4141

 

#配置channel

# 4 channel

#存到内存-memory

a2.channels.c1.type = memory

#channel的大小

a2.channels.c1.capacity = 1000

#每次可以从channel拿出数据的多少

a2.channels.c1.transactionCapacity = 100

 

#连接source,channels

# 5. Bind

a2.sources.tail-file.channels = c1

a2.sinks.avro113.channel = c1

 3.创建flume-3.conf,用于接收flume-1与flume-2发送过来的数据流,最终合并后sink到HDFS

# 1 agent

a3.sources = r1

a3.sinks = k1

a3.channels = c1

 

# 2 source

#和bigdata111是对应的-监控bigdata113的4141端点

#sources-avro是用于flume之间的资源

a3.sources.r1.type = avro

a3.sources.r1.bindbigdata113

a3.sources.r1.port = 4141

 

# 3 sink

a3.sinks.k1.type = hdfs

a3.sinks.k1.hdfs.path = hdfs://bigdata111:9000/flume3/%H

#上传文件的前缀

a3.sinks.k1.hdfs.filePrefix = flume3-

#是否按照时间滚动文件夹

a3.sinks.k1.hdfs.round = true

#多少时间单位创建一个新的文件夹

a3.sinks.k1.hdfs.roundValue = 1

#重新定义时间单位

a3.sinks.k1.hdfs.roundUnit = hour

#是否使用本地时间戳

a3.sinks.k1.hdfs.useLocalTimeStamp = true

#积攒多少个Event才flush到HDFS一次

#batchSize<=transactionCapacity<capacity

a3.sinks.k1.hdfs.batchSize = 100

#设置文件类型,可支持压缩

a3.sinks.k1.hdfs.fileType = DataStream

#多久生成一个新的文件

#如果设置成一个0,就不按时间进行滚动-一直往一个文件里写

a3.sinks.k1.hdfs.rollInterval = 600

#设置每个文件的滚动大小大概是128M

a3.sinks.k1.hdfs.rollSize = 134217700

#文件的滚动与Event数量无关

a3.sinks.k1.hdfs.rollCount = 0

#最小冗余数

a3.sinks.k1.hdfs.minBlockReplicas = 1

 

# 4 channel

a3.channels.c1.type = memory

a3.channels.c1.capacity = 1000

a3.channels.c1.transactionCapacity = 100

 

# 5 Bind

a3.sources.r1.channels = c1

a3.sinks.k1.channel = c1

 4.执行测试:分别开启对应flume-job(依次启动flume-3,flume-2,flume-1) , 同时产生文件变动并观察结果

$ bin/flume-ng agent --conf conf/ --name a3 --conf-file jobconf/flume33.conf

$ bin/flume-ng agent --conf conf/ --name a2 --conf-file jobconf/flume22.conf

$ bin/flume-ng agent --conf conf/ --name a1 --conf-file jobconf/flume11.conf

                       数据发送:

1) 打开端口telnet bigdata111 55555    打开后发送5555555

2) 在/opt/Andy 中追加666666

5.实践过程、结果分析

1) 这里开启了zookeeper、HDFS-HA服务(其实开完全分布式,不开HA的也可以,只要上传到active的namenode节点所在的HDFS即可)

[root@bigdata111 ~]# zkServer.sh start(三台同步)

[root@bigdata111 ~]# cd /opt/module/HA/hadoop-2.8.4/

[root@bigdata111 hadoop-2.8.4]# sbin/start-dfs.sh(仅一台)

查看进程:

[root@bigdata111 hadoop-2.8.4]# jps

2741 JournalNode

2278 QuorumPeerMain

2438 NameNode

2918 DFSZKFailoverController

3001 Jps

2542 DataNode

[root@bigdata112 ~]# jps

2416 DataNode

2276 QuorumPeerMain

2357 NameNode

2709 Jps

2614 DFSZKFailoverController

2526 JournalNode

[root@bigdata113 ~]# jps

2277 QuorumPeerMain

2441 JournalNode

2364 DataNode

2525 Jps

2) bigdata111中,创建配置文件并填入配置:

[root@bigdata111 myconf]# vi flume-1.conf

3) bigdata112、bigdata113中,创建配置文件并填入配置、给flume配置环境变量(就不用在bin目录下启动啥的了):

(1)先往bigdata112、bigdata113上上传flume相关的文件夹(如果有就不用),并删除myconf里面的flume-1.conf文件。

[root@bigdata111 module]# scp -r flume-1.8.0/ root@bigdata112:/opt/module/

[root@bigdata112 myconf]# rm flume-1.conf

[root@bigdata113 myconf]# rm flume-1.conf

(2)往bigdata112上创建文件并填入配置-和flume-2.conf里的内容差不太多

[root@bigdata112 myconf]# vi flume-2.conf

(3)往bigdata113上创建文件并填入配置

[root@bigdata113 myconf]# vi flume-3.conf

(4)配置环境变量--bigdata112和bigdata113同步

[root@bigdata112 myconf]# vi /etc/profile

#FLUME_HOME

export FLUME_HOME=/opt/module/flume-1.8.0/

export PATH=$PATH:$FLUME_HOME/bin

(5)然后别忘了使环境变量生效--也是bigdata112和bigdata113同步

[root@bigdata112 myconf]# source /etc/profile

4) 启动配置文件

(1) 先启动bigdata111上的flume

[root@bigdata111 myconf]# flume-ng agent --conf ../conf/ --name a1 --conf-file flume-1.conf -Dflume.root.logger==INFO,console

查看日志,会发现“拒绝连接”:

Connection refused: bigdata113/192.168.212.113:4141

这是因为此时的bigdata113还未启动

(2) 接着启动bigdata112的flume

[root@bigdata112 myconf]# flume-ng agent -c ../conf/ -n a2 -f flume-2.conf  -Dflume.root.logger==INFO,console

查看日志,也会发现“拒绝连接”:

Connection refused: bigdata113/192.168.212.113:4141

(3) 接着启动bigdata113的flume

[root@bigdata113 myconf]# flume-ng agent -c ../conf/ -n a3 -f flume-3.conf  -Dflume.root.logger==INFO,console

5) 传数据,监控

(1) 监控bigdata111的55555端口、传入数据并查看监控结果

[root@bigdata111 ~]# telnet bigdata111 55555

Trying 192.168.212.111...

Connected to bigdata111.

Escape character is '^]'.

1111111111111111111111

OK

1111111111111111111111

OK

监控结果如下:

 

 

 

 这表明:bigdata113的flume可以收到bigdata111通过检测55555端口传来的数据。

(2) 在bigdata112上监控指定的文件

  • 输入命令行的形式查看plus文件的内容-查看监控结果:

 

  •  查看Web页面方式:

 

 

这表明:bigdata113的flume也可以接收到bigdata112的flume传过来的数据。

(3) 接下来,同一时间段--将bigdata111从55555端口监控得来的数据和bigdata112监控/opt/plus文件得来的数据汇总到bigdata113。

  • 先往bigdata111的55555端口发送数据:

 

  •  再向bigdata112的/opt/plus文件里追加数据:

 

  •  命令行方式查看HDFS上的目录20所有文件的内容:

 

  •  Web端查看生成的文件:

 

  •  分析

20这个目录下面的所有文件的内容中:

两行都是“1”的内容是之前也在20这个时间段上发送的数据;

下面两行都是“a”的内容就是刚才从55555端口新上传的数据;

最后三行都是“b”的内容就是刚才新追加到/opt/plus文件的数据。

Flume中的Source源可以帮助打开端口-这里的4141。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3