flume的配置与安装,以及简介

定位:
实时日志收集系统
在这里插入图片描述
特点:
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。
flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。
Source:从Client专门用来收集数据,传递给Channel,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、自定义。
Sink:从Channel收集数据,运行在一个独立线程,sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、null、Hbase、solr、自定义。
Channel:连接 sources 和 sinks ,这个有点像一个队列,source组件把数据收集来以后,临时存放在channel中,即channel组件在agent中是专门用来存放临时数据的——对采集到的数据进行简单的缓存,可以存放在memory、jdbc、file等等。

Agent的概念
Flume以agent为最小的独立运行单位。一个agent就是一个JVM,agent本身是一个Java进程,运行在日志收集节点—所谓日志收集节点就是服务器节点。
单agent由Source、Sink和Channel三大组件构成,类似生产者、仓库、消费者的架构.如下图:

在这里插入图片描述
Event的概念
flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
在这里插入图片描述
一个完整的event包括:event headers、event body、event信息(即文本文件中的单行记录)

运行机制
flume的核心就是一个agent,这个agent对外有两个进行交互的地方,一个是接受数据的输入——source,一个是数据的输出sink,sink负责将数据发送到外部指定的目的地。source接收到数据之后,将数据发送给channel,chanel作为一个数据缓冲区会临时存放这些数据,随后sink会将channel中的数据发送到指定的地方—-例如HDFS等,注意:只有在sink将channel中的数据成功发送出去之后,channel才会将临时数据进行删除,这种机制保证了数据传输的可靠性与安全性。
安装
1、修改 flume-env.sh 配置文件,主要是JAVA_HOME变量设置
2、验证是否安装成功
3、指定要读取文件的位置(测试阶段)/home/hbase/logs/access.log
4、在配置文件flume-conf.properties.template中因为需要的大部分配置信息都不准确,所以自己新建一个配置文件——dir_hdfs.conf
配置信息:
vi dir_hdfs.conf(启动flume的时候加上这个配置文件就行)(这个配置文件是自己创建的,可以放在hbase下)
#定义三大组件的名称
ag1.sources = source1(source1是自己定义的,下同)
ag1.sinks = sink1
ag1.channels = channel1
# 配置source组件
ag1.sources.source1.type = spooldir(spooldir当日志文件多一条就会采集一次)
ag1.sources.source1.spoolDir = /home/hbase/logs/(需要采集的目录,目录下增加一个文件就会采集一次)
ag1.sources.source1.fileSuffix=.FINISHED(被采集过的文件就会被添加一个后缀,可以改)
ag1.sources.source1.deserializer.maxLineLength=5120(设置每行所读取的最大长度,多余的就不读了)
# 配置sink组件
ag1.sinks.sink1.type = hdfs(往hdfs中下沉,存放)
ag1.sinks.sink1.hdfs.path =hdfs://hbase1:9000/logs/%y‐%m‐%d/%H‐%M(写到hdfs的位置)
ag1.sinks.sink1.hdfs.filePrefix = app_log(采集到的文件的前缀,后面有uuid)
ag1.sinks.sink1.hdfs.fileSuffix = .log(后缀)
ag1.sinks.sink1.hdfs.batchSize= 100(批量下沉的大小)
ag1.sinks.sink1.hdfs.fileType = DataStream(下沉文件的类型)
ag1.sinks.sink1.hdfs.writeFormat =Text(write格式化输出的类型)
## roll:滚动切换:控制写文件的切换规则
ag1.sinks.sink1.hdfs.rollSize = 512000 ## 按文件体积(字节)来切
ag1.sinks.sink1.hdfs.rollCount = 1000000 ## 按event条数切
ag1.sinks.sink1.hdfs.rollInterval = 60 ## 按时间间隔切换文件
## 控制生成目录的规则
ag1.sinks.sink1.hdfs.round = true
ag1.sinks.sink1.hdfs.roundValue = 10
ag1.sinks.sink1.hdfs.roundUnit = minute
ag1.sinks.sink1.hdfs.useLocalTimeStamp = true
# channel组件配置
ag1.channels.channel1.type = memory
ag1.channels.channel1.capacity = 500000 ## event条数
ag1.channels.channel1.transactionCapacity = 600 ##flume事务控制所需要的缓存容量600条event
# 绑定source、channel和sink之间的连接
ag1.sources.source1.channels = channel1
ag1.sinks.sink1.channel = channel1

添加配置文件( tail_avro.conf)(过滤文件信息)
					##################
			# Name the components on this agent
			a1.sources = r1
			a1.sinks = k1
			3 avro_hdfs.conf
			a1.channels = c1
			# Describe/configure the source
			a1.sources.r1.type = exec
			a1.sources.r1.command = tail ‐F /home/hive1/ego/access.log
			# Describe the sink
			a1.sinks.k1.type = avro
			a1.sinks.k1.hostname = hive2
			a1.sinks.k1.port = 4141
			a1.sinks.k1.batch‐size = 2
			# 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

avro_hdfs.conf
				# Name the components on this agent
			a1.sources = r1
			a1.sinks = k1
			a1.channels = c1
			# Describe/configure the source
			##source中的avro组件是一个接收者服务
			a1.sources.r1.type = avro
			a1.sources.r1.bind = hive2
			a1.sources.r1.port = 4141
			# Describe the sink
			a1.sinks.k1.type = hdfs
			a1.sinks.k1.hdfs.path = /flume/taildata/%y‐%m‐%d/
			a1.sinks.k1.hdfs.filePrefix = tail‐
			a1.sinks.k1.hdfs.round = true
			a1.sinks.k1.hdfs.roundValue = 24
			a1.sinks.k1.hdfs.roundUnit = hour
			a1.sinks.k1.hdfs.rollInterval = 0
			a1.sinks.k1.hdfs.rollSize = 0
			a1.sinks.k1.hdfs.rollCount = 50
			a1.sinks.k1.hdfs.batchSize = 10
			a1.sinks.k1.hdfs.useLocalTimeStamp = true
			#生成的文件类型,默认是Sequencefile,可用DataStream,则为普通文本
			a1.sinks.k1.hdfs.fileType = DataStream
			4 先启动avro,再启动tail
			第二节 Sqoop入门介绍
			1 介绍
			2 安装sqoop
			2.1 配置文件:sqoop-env.sh
			2.2 使用sqoop的命令测试sqoop安装是否成功
			2.3 必须要把mysql的驱动导入到sqoop的lib中
			3 导入数据
			3.1 mysql导入数据到hdfs
			# 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

先启动avro,再启动tail
启动
前台启动: bin/flume-ng agent -c conf/ -f …/…/dir_hdfs.conf -n ag1 -Dflume.root.logger=DEBUG,console(-c = --conf)(启动的时候先加载自带的conf,再启动自己编辑的conf,然后指定使用的ag是哪一个,然后打印启动的日志文件)
后台启动: bin/flume-ng agent -c conf/ -f …/…/dir_hdfs.conf -n ag1 1>/dev/null 2>&1 &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值