Apache Flume大数据开发工具概述与入门(七)

208 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

一、 Flume高阶自定义组件

1. Flume自定义Source (扩展)

1.1. 自定义Source说明

Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy。官方提供的source类型已经很多,但是有时候并不能满足实际开发当中的需求,此时我们就需要根据实际需求自定义某些source。

如:实时监控MySQL,从MySQL中获取数据传输到HDFS或者其他存储框架,所以此时需要我们自己实现MySQLSource

官方也提供了自定义source的接口:

官网说明:flume.apache.org/FlumeDevelo…

1.2. 自定义Source原理

根据官方说明自定义mysqlsource需要继承AbstractSource类并实现Configurable和PollableSource接口。

实现相应方法:

getBackOffSleepIncrement()    //暂不用

getMaxBackOffSleepInterval()  //暂不用

configure(Context context)    //初始化context

process()   //获取数据(从mysql获取数据,业务处理比较复杂,所以我们定义一个专门的类——QueryMysql来处理跟mysql的交互),封装成event并写入channel,这个方法被循环调用

stop()   //关闭相关的资源

1.3. 自定义Source具体实现

创建mysql数据库以及mysql数据库表

CREATE DATABASE mysqlsource;

USE mysqlsource;

/*Table structure for table flume_meta */

DROP TABLE

IF EXISTS flume_meta;

 

CREATE TABLE flume_meta (

source_tab VARCHAR (255) NOT NULL,

currentIndex VARCHAR (255) NOT NULL,

PRIMARY KEY (source_tab)

) ENGINE = INNODB DEFAULT CHARSET = utf8;

 

/*Data for the table flume_meta */

INSERT INTO flume_meta (

source_tab,

currentIndex

)

VALUES

('student', '4');

 

/*Table structure for table student */

DROP TABLE

IF EXISTS student;

 

CREATE TABLE student (

id INT (11) NOT NULL AUTO_INCREMENT,

name VARCHAR (255) NOT NULL,

PRIMARY KEY (id)

) ENGINE = INNODB AUTO_INCREMENT = 5 DEFAULT CHARSET = utf8;

 

/*Data for the table student */

INSERT INTO student (id, name)

VALUES

(1, 'zhangsan'), (2, 'lisi'), (3, 'wangwu'), (4, 'zhaoliu');

创建maven工程导入pom依赖

<dependencies>
<dependency>
<groupId>org.apache.flume</groupId>
<artifactId>flume-ng-core</artifactId>
<version>1.8.0</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
</dependencies>

功能测试

使用maven对工程进行打包,需要将mysql的依赖包一起打到jar包里,然后将打包好的jar包放到flume的lib目录下。

编辑flume的配置文件如下:

a1.sources = r1

a1.sinks = k1

a1.channels = c1

 

Describe/configure the source

a1.sources.r1.type = cn.itcast.flumesource.MySqlSource

a1.sources.r1.connection.url = jdbc:mysql://node-1:3306/mysqlsource

a1.sources.r1.connection.user = root

a1.sources.r1.connection.password = hadoop

a1.sources.r1.table = student

a1.sources.r1.columns.to.select = *

a1.sources.r1.incremental.column.name = id

a1.sources.r1.incremental.value = 0

a1.sources.r1.run.query.delay=3000

 

Describe the sink

a1.sinks.k1.type = logger

 

Describe the 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