Flume详解

1、Flume简介

(1)、flume提供分布式,可靠的,对海量的日志进行搞笑收集,聚集,移动的服务,flume只能在unix环境下运行;
(2)、flume基于流式架构,容错性强,也很灵活简单;
(3)、flume,kafka用来进行实时数据收集,spark、storm用来实时处理数据,impala用来实时查询;

二、Flume架构

Flume架构图
2.1、source
用于采集收据,source是产生数据流的地方官,同时source会将产生的数据流传输到Channel。
2.2、channel
用于桥接source和sinks,类似于一个队列。
2.3、sinks
从channel收集数据,将数据写到目标源(可以是下一个source,也可以是hdfs或者hbase)。
2.4、event
是flume数据传输的基本单元,以时间的形式讲过数据从源头传送到目的地。

3、Flume传输流程

source监控某个文件或者数据流,数据源产生过新的数据,拿到该数据后,将数据封装在一个event中,并put到channel后commit提交,channel队列,先进先出,sink主动去channel队列中拉去数据,然后写到hdfs。

4、Flume使用

4.1、安装 略
文件配置:修改flume-env.sh,export JAVA_HOME=/usr/local/jdk1.8
4.2、案例
(1)案例一:监控端口数据
目标:flume监控一端Console,另一端Console发消息,使被监控端实时显示。
分布实现:

1、安装telnet工具
rpm -ivh xinetd-2.3.14-40.el6.x86_64.rpm
rpm -ivh telnet-0.17-48.el6.x86_64.rpm
rpm -ivh telnet-server-0.17-48.el6.x86_64.rpm
2、创建flume agent配置文件 flume-telnet.conf
#给agent的组件命名
a1.sources=r1
a1.sinks=k1
a1.channels=c1
#配置source
a1.sources.r1.type=netcat
a1.sources.r1.bind=localhost
a1.sources.r1.port=44444
#配置sink
a1.sinks.type=logger
#配置channel
a1.channel.c1.type=memory
a1.channel.c1.capacity=1000
a1.channel.c1.transactionCapacity=100
#配置channel与source和sink连接
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1  //注意,这里的channel不带s,否则报错
3、判断44444端口是否被占用
netstat -tunlp|grep 44444
4、先开启flume监听端口
 bin/flume-ng agent --conf conf/ --name a1 --conf-file job/flume-telnet.conf
-Dflume.root.logger==INFO,console

(2)案例二:实时读取本地文件到hdfs
目标:实时监控hive日志,并上传到hdfs中
分布实现:

1、拷贝hadoop相关jar包到flume的lib下
cp share/hadoop/common/lib/hadoop-auth-2.5.0-cdh5.3.6.jar ./lib/
cp share/hadoop/common/lib/commons-configuration-1.6.jar ./lib/
cp share/hadoop/mapreduce1/lib/hadoop-hdfs-2.5.0-cdh5.3.6.jar ./lib/
cp share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar ./lib/
cp share/hadoop/hdfs/lib/htrace-core-3.1.0-incubating.jar ./lib/
cp share/hadoop/hdfs/lib/commons-io-2.4.jar ./lib/
提示:最后两个jar包为1.99版本flume必须引用的jar包
2、创建flume-hivelog2hdfs.conf
a2.sources = r2
a2.sinks = k2
a2.channel = c1
a2.sourcers.r2.type = exec
a2.sources.r2.command = tail -F /usr/local/hive2.3/hive.log
a2.sources.r2.shell = /bin/bash -c
a2.sinks.k2 = hdfs
a2.sinks.k2.hdfs.path = hdfs://ns1:8020/flume/%Y%m%d%H
#上传文件的前缀
a2.sinks.k2.hdfs.filePrefix = logs-
#是否按照文件的前缀滚动文件夹
a2.sinks.k2.round = true
#多少时间单位创建一个新的文件夹
a2.sinks.k2.hdfs.roundValue = 1
#重新定义时间单位
a2.sinks.k2.hdfs.roundUnit = hour
#是否使用本地时间戳
a2.sinks.k2.hdfs.useLocalTimeStamp = true
#积攒多少个event才flush到hdfs一次
a2.sinks.k2.hdfs.batchSize = 1000
#设置文件类型,可支持压缩
a2.sinks.k2.hdfs.fileType = DataStream
#多久生成一个新的 文件
a2.sinks.k2.hdfs.rollInteval = 600
#设置每个文件的滚动大小
a2.sinks.k2.hdfs.rollSize = 134217700
#文件的滚动与event数量无关
a2.sinks.k2.hdfs.rollCount = 0
#最小冗余数
a2.sinks.k2.hdfs.mainBlockReplicas = 1

a2.channels.c2.type = memory
a2.channels.c2.capacity = 1000
a2.channels.c2.transactionCapacity = 100
a2.sources.r2.channels = c2
a2.sinks.k2.channel = c2
3、执行监控配置
bin/flume-ng agent --conf conf/ --namea2 --conf-file job/flume-hivelog2hdfs.conf

(3)案例三:实时读取目录文件到hdfs
目标:使用flume监听整个目录的文件
分步实现:

1、创建配置文件 flume-dir2hdfs.conf
a3.sources = r3
a3.sinks = k3
a3.channels = c3

a3.sources.r3.type = spooldir
a3.sources.r3.spoolDir = /root/testdata
# 扫描完成的文件加一个后缀
a3.sources.r2.fileSuffix =  .COMPLETED
a3.sources.r2.fileHeader = true
#忽略所有以.tmp 结尾的文件,不上传
a3.sources.r3.ignorePattern = ([^ ]*\.tmp)

a3.sinks.k3.type = hdfs
a3.sinks.k3.hdfs.path = hdfs://hadoop01:8020/flume/testdata/%Y%m%d/%H
...其余配置同案例2
a3.channels.c3.type = memory
a3.channels.c3.capacity = 1000
a3.channels.c3.transactionCapacity = 100
a3.sources.r3.channels = c3
a3.sinks.k3.channel = c3
2、执行测试
bin/flume-ng agent --conf conf/ --name a3 --conf-file job/flume-dir.conf

(4)案例四:Flume与Flume之间数据传递:单flume多channel、sink
flume与flume之间的数据传递
目标:使用flume-1监控文件变动,分别flume-1将变动内容传给flume-2,flume2负责存储到hdfs;同时flume-1将变动传递给flume-3,flume-3负责输出到local filesystem
分步实现:

1、创建flume-1.conf,用于监控hive.log文件的变动,同时产生两个channel和两个sink分别输送给flume-2和flume-3:
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1 c2
# 将数据流复制给多个 channel
a1.sources.r1.selector.type = replicating
#  source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /usr/loca/hive2.3/hive.log
a1.sources.r1.shell = /bin/bash -c
#sink
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop01
a1.sinks.k1.port = 4141
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = hadoop01
a1.sinks.k2.port = 4142
# Describe the channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c2.type = memory
a1.channels.c2.capacity = 1000
a1.channels.c2.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2
2、创建flume-2.conf,用于接收flume-1的event,同时产生一个channel和1个sink,将数据传输给hdfs
a2.sources = r1
a2.sinks = k1
a2.channels = c1
#source
a2.sources.r1.type = avro
a2.sources.r1.bind = hadoop01
a2.sources.r1.port = 4141
#sink
a2.sinks.k1.type = hdfs
a2.sinks.k1.hdfs.path = hdfs://ns1:8020/flume/%Y%m%d/%H
#上传文件的前缀
a2.sinks.k1.hdfs.filePrefix = flume2-
...
#channel
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100

a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1
3、创建flume-3.conf,用于接收flume-1的event,同时产生1个channel和1个sink,将数据传送到本地目录
a3.sources = r1
a3.sinks = k1
a3.channels = c1
#source
a3.sources.r1.type = avro
a3.sources.r1.bind = hadoop01
a3.sources.r1.port = 4142
#sink
a3.sinks.k1.type = file_roll
a3.sinks.k1.sink.directory = /root/testdata/flume3
#channel
a3.channels.c1.type = memory
a3.channels.c1.capacity = 1000
a3.channels.c1.transactionCapacity = 100
a3.sources.r1.channels = c1
a3.sinks.k1.channel = c1
注意:输出的本地目录必须是已经存在的目录,如果不存在,不会自动创建
4、执行测试:分别开启对应flume-job(依次启动flume-3、flume-2、flume-3)
bin/flume-ng agent --conf conf/ --name a3 --conf-file job/group-job1/flume-3.conf
bin/flume-ng agent --conf conf/ --name a2 --conf-file job/group-job1/flume-2.conf
bin/flume-ng agent --conf conf/ --name a1 --conf-file job/group-job1/flume-1.conf

(5)案例5:flume与flume之间数据传递,多flume汇总数据到单flume
多flume汇总到单flume
目标:flume-1监控hive.log,flume-2监控某一个端口的数据流,flume-1和flume-2将数据发送给flume-3,flume-3将数据写入hdfs
分步实现:

1、创建flume-1.conf,用于监控hive.log,同时sink数据到flume-3
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /usr/loca/hive2.3/hive.log
a1.sources.r1.shell = /bin/bash -c
#sink
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop01
a1.sinks.k1.port = 4141
#channel
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
2、创建flume-2.conf,用于监控44444数据流,同时sink到flume-3
a2.sources = r1
a2.sinks = k1
a2.channels = c1
# source
a2.sources.r1.type = netcat
a2.sources.r1.bind = hadoop01
a2.sources.r1.port = 44444
# sink
a2.sinks.k1.type = avro
a2.sinks.k1.hostname =hadoop01
a2.sinks.k1.port = 4141
# channel
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1
3、创建flume-3.conf用于接收flume-1和flume-2发送的数据,并sink到hdfs
a3.sources = r1
a3.sinks = k1
a3.channels = c1
# source
a3.sources.r1.type = avro
a3.sources.r1.bind = hadoop01
a3.sources.r1.port = 4141
#sink
a3.sinks.k1.type = hdfs
a3.sinks.k1.hdfs.path = hdfs://hadoop01:8020/flume/%Y%m%d/%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 一次
a3.sinks.k1.hdfs.batchSize = 100
#设置文件类型,可支持压缩
a3.sinks.k1.hdfs.fileType = DataStream
#多久生成一个新的文件
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
# channel
a3.channels.c1.type = memory
a3.channels.c1.capacity = 1000
a3.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a3.sources.r1.channels = c1
a3.sinks.k1.channel = c1
4、执行测试:分别开启flume-job(依次启动flume-3,flume-2,flume-1)
5、Flume监控工具Ganglia

5.1、Ganglia的安装与部署

(1)安装httpd服务与php
# yum -y install httpd php
(2)安装依赖
# yum -y install rrdtool perl-rrdtool rrdtool-devel
# yum -y install apr-devel
(3)安装ganglia (这里安装centos6 64位版本)
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum -y install ganglia-gmetad
# yum -y install ganglia-web
# yum install -y ganglia-gmond
(4)修改配置文件
# vi /etc/httpd/conf.d/ganglia.conf 修改为
	<Location /ganglia>
	Order deny,allow
	Deny from all
	Allow from all
	# Allow from 127.0.0.1
	# Allow from ::1
	# Allow from .example.com
	</Location>
# vi /etc/ganglia/gmetad.conf 修改为 data_source "linux" ip地址
# vi /etc/ganglia/gmond.conf 修改为
	cluster {
		name = "linux"
	增加两处 udp_send_channel {
				host = ip地址
			udp_recv_channel {
				bind = ip地址
# vi /etc/selinux/config 修改为 SELINUX=disabled
提示:selinux重启生效,或者临时省生效 setenfore 0
(5)启动ganglia
service httpd start
service gmetad star
service gmond start
(6)打开网页浏览ganglia页面
http://hadoop01/gganglia
提示:如果出现权限不足,修改/var/lib/ganglia目录的权限
sudo chmod -R 777 /var/lib/ganglia

5.2、操作flume测试监控

(1)修改flume-env.sh 配置
	JAVA_OPTS="-Dflume.monitoring.type=ganglia
	-Dflume.monitoring.hosts=你的ip:8649
	-Xms100m
	-Xmx200m"
(2)启动flume任务
 bin/flume-ng agent \
 --conf conf/ \
--name a1 \
--conf-file job/group-job0/flume-telnet.conf \
-Dflume.root.logger==INFO,console \
-Dflume.monitoring.type=ganglia \
-Dflume.monitoring.hosts=你的ip:8649
(3)发送数据观察ganglia检测图
 telnet localhost 44444

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
上层应用业务对实时数据的需求,主要包含两部分内容:1、 整体数据的实时分析。2、 AB实验效果的实时监控。这几部分数据需求,都需要进行的下钻分析支持,我们希望能够建立统一的实时OLAP数据仓库,并提供一套安全、可靠的、灵活的实时数据服务。目前每日新增的曝光日志达到几亿条记录,再细拆到AB实验更细维度时,数据量则多达上百亿记录,多维数据组合下的聚合查询要求秒级响应时间,这样的数据量也给团队带来了不小的挑战。OLAP层的技术选型,需要满足以下几点:1:数据延迟在分钟级,查询响应时间在秒级2:标准SQL交互引擎,降低使用成本3:支持join操作,方便维度增加属性信息4:流量数据可以近似去重,但订单行要精准去重5:高吞吐,每分钟数据量在千W级记录,每天数百亿条新增记录6:前端业务较多,查询并发度不能太低通过对比开源的几款实时OLAP引擎,可以发现Doris和ClickHouse能够满足上面的需求,但是ClickHouse的并发度太低是个潜在的风险,而且ClickHouse的数据导入没有事务支持,无法实现exactly once语义,对标准SQL的支持也是有限的。所以针对以上需求Doris完全能解决我们的问题,DorisDB是一个性能非常高的分布式、面向交互式查询的分布式数据库,非常的强大,随着互联网发展,数据量会越来越大,实时查询需求也会要求越来越高,DorisDB人才需求也会越来越大,越早掌握DorisDB,以后就会有更大的机遇。本课程基于真实热门的互联网电商业务场景为案例讲解,具体分析指标包含:AB版本分析,下砖分析,营销分析,订单分析,终端分析等,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。整个课程,会带大家实践一个完整系统,大家可以根据自己的公司业务修改,既可以用到项目中去,价值是非常高的。本课程包含的技术:开发工具为:IDEA、WebStormFlink1.9.0DorisDBHadoop2.7.5Hbase2.2.6Kafka2.1.0Hive2.2.0HDFS、MapReduceFlume、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.8.RELEASESpringCloud Finchley.SR2Vue.js、Nodejs、Highcharts、ElementUILinux Shell编程等课程亮点:1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink4.支持ABtest版本实时监控分析5.支持下砖分析6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.天级别与小时级别多时间方位分析9.数据库实时同步解决方案10.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI11.集成SpringCloud实现统一整合方案12.互联网大数据企业热门技术栈13.支持海量数据的实时分析14.支持全端实时数据分析15.全程代码实操,提供全部代码和资料16.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
在这个科技高速发展的时代,经历了PC时代几乎人手一台电脑,随之衍生出站长这个概念;移动互联网时代几乎人手一部智能手机,智能手机一般都会安装很多应用,目前应用呈爆发式的增长;随着产业的不断深入发展,小程序的发展也日益壮大,应用涵盖各个领域;如今一个公司就可能有多个软件应用,对于软件开发商来说,急需一套分析系统帮助软件运营,如果单独开发一个分析系统去针对一个软件进行分析的话,成本会非常的大,这个成本包含开发成本以及以后的维护成本。为了解决了上述的问题,我们开发出了一套云产品:亿级动态数据统计分析系统,本系统可以支持所有的终端  (Web端、移动端、小程序端等 )数据统计,只要简单的使用sdk就可以接入我们的系统,软件开发商可以很轻松的对软件使用的情况进行监控,及时辅助公司对该软件的运营。该产品历经2年的实践,商业价值极高。本套案例是完全基于真实的产品进行开发和讲解的,同时对架构进行全面的升级,采用了全新的 Flink 架构+Node.js+Vue.js等,完全符合目前企业级的使用标准。对于本套课程在企业级应用的问题,可以提供全面的指导。Flink作为第四代大数据计算引擎,越来越多的企业在往Flink转换。Flink在功能性、容错性、性能方面都远远超过其他计算框架,兼顾高吞吐和低延时。Flink能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。也就是说同时支持流处理和批处理。Flink将流处理和批处理统一起来,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。Flink技术特点1. 流处理特性支持高吞吐、低延迟、高性能的流处理支持带有事件时间的窗口(Window)操作支持有状态计算的Exactly-once语义支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作支持具有Backpressure功能的持续流模型支持基于轻量级分布式快照(Snapshot)实现的容错一个运行时同时支持Batch on Streaming处理和Streaming处理Flink在JVM内部实现了自己的内存管理支持迭代计算支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存2. API支持对Streaming数据类应用,提供DataStream API对批处理类应用,提供DataSet API(支持Java/Scala)3. Libraries支持支持机器学习(FlinkML)支持图分析(Gelly)支持关系数据处理(Table)支持复杂事件处理(CEP)4. 整合支持支持Flink on YARN支持HDFS支持来自Kafka的输入数据支持Apache HBase支持Hadoop程序支持Tachyon支持ElasticSearch支持RabbitMQ支持Apache Storm支持S3支持XtreemFS课程所涵盖的知识点包括:Flink、 Node.js、 Vue.js、 Kafka、Flume、Spring、SpringMVC、Dubbo、HDFS、Hbase、Highcharts等等  企业一线架构师讲授,代码在老师指导下可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值