Flume实战(实时导入日志内容进ODPS)

简介:

利用flume监测每天的日志文件,实时导入新增的内容(1秒上千的增量)进ODPS(阿里云的大数据服务),网上较多的资料是通过直接配置配置文件来实现一些已经提供的监测功能,例如监测文件新增,以及端口数据监测等等(功能比较局限,并且导入的数据库比较局限),本文主要是基于flume,自己编写sink(具体后面会讲)代码,实现较简单的根据需求定制实现flume导入自己可定义的数据库。。

准备:

Flume1.7.0(下载地址
JAVA 1.8
MAVEN

前言:

首先介绍一下flume的一些重要的观念:
1、Event的概念
在这里有必要先介绍一下flume中event的相关概念:flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
为了方便大家理解,给出一张event的数据流向图:
简洁图

关于直接修改配置文件实现监控的例子,这篇文章(http://blog.csdn.net/a2011480169/article/details/51544664)已经讲的很清楚,大家可以阅读一下。

source:
sources是flume日志采集的起点,监控日志文件系统目录。支持exec(命令),端口监测,文件夹等等。

channel :
channel 是flume的中间数据缓存管道,有点类似kafka的机制,因此个组件的性能很重要。
我在项目中主要采用的是menmory channel,原因是数据量大,要求较大的数据吞吐量和速度,但是有一点不好的是
如果一旦flume进程down掉,是没有“续点传输”的机制的。
关键参数讲解:
(1) capacity : 存储在channel中的events的最大数量
(2) transactionCapacity : 每次数据由channel到sink传输的最大events的数量

sink :
sink组件的核心工作是把channel中数据进行输出到特定的终端,比如hdfs,hbase,database,avro等等。

JAVA内存的设计 :
主要通过修改 conf/flume-env.sh文件实现
主要设计Xmx和Xms两个参数,可以根据OS内存的大小进行合理设置, 一般以每秒处理5000行Apache日志的速度,需要配置 5-10个G 。
-Xms set initial Java heap size…………………….
-Xmx set maximum Java heap size…………………….

开始:

首先,配置文件(在flume安装目录的conf文件夹下,假设我的叫odpsSink.conf)。
agent1.sources = source1
agent1.sinks = odpsSink
agent1.channels = channel1

#Describe/configure source1
agent1.sources.source1.type = exec
agent1.sources.source1.command = /home/qcj/flume/flume.sh
agent1.sources.source1.channels = channel1

#Describe odpsSink
agent1.sinks.odpsSink.type=OdpsSink
agent1.sinks.odpsSink.accessId=****
agent1.sinks.odpsSink.accessKey=****
agent1.sinks.odpsSink.odpsUrl=http://service.odps.aliyun.com/api
agent1.sinks.odpsSink.project=****
agent1.sinks.odpsSink.table=****
agent1.sinks.odpsSink.channel = channel1
agent1.sinks.odpsSink.batchSize=3000

#Use a channel which buffers events in memory
agent1.channels.channel1.type = memory
agent1.channels.channel1.keep-alive=30
agent1.channels.channel1.capacity = 10000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值