Flume采集MySQL写入HDFS

一、采集背景

1、flume默认不支持连接mysql,所以需要导入flume-ng-sql-source-1.5.3.jar和mysql-connector-java-5.1.37.jar

2、在flume这个jar包中我修改了flume-ng-core和我flume的版本一致,没有测试不一样会怎么样

二、配置文件

#声明source, channel, sink
a1.sources=sqlSource
a1.channels=c1
a1.sinks=s1

#声明source类型
a1.sources.sqlSource.type=org.keedio.flume.source.SQLSource
a1.sources.sqlSource.hibernate.connection.url=jdbc:mysql://127.0.0.0:3306/数据库名
a1.sources.sqlSource.hibernate.connection.user=root
a1.sources.sqlSource.hibernate.connection.password=******

#这个参数很重要,任务自动提交,默认为false,如果不设置为true,查询不会自动执行
a1.sources.sqlSource.hibernate.connection.autocommit=true
#声明mysql的hibernate方言
a1.sources.sqlSource.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect
a1.sources.sqlSource.hibernate.connection.driver_calss=com.mysql.jdbc.Driver

#查询时间间隔
a1.sources.sqlSource.run.query.delay=10000

#声明保存flume状态的文件夹位置
a1.sources.sqlSource.status.file.path=/var/lib/flume
a1.sources.sqlSource.status.file.name=sql-Source.status

#声明查询开始位置
a1.sources.sqlSource.start.from=0

#sql语句自定义,但是要注意:增量只能针对id字段即主键列,经测试系统默认如此.
#而且必须要将主键查询出来,因为如果不查询主键,flume无法记录上一次查询的位置.
#$@$表示增量列上一次查询的值,记录在status文件中
a1.sources.sqlSource.custom.query=select * from tablename where id > $@$

#设置分配参数
a1.sources.sqlSource.batch.size=1000
a1.sources.sqlSource.max.rows=1000

#查询结果分隔符
a1.sources.sqlSource.delimiter.entty=,

#a1.sources.sqlSource.hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
#a1.sources.sqlSource.hibernate.c3p0.min_size=3
#a1.sources.sqlSource.hibernate.c3p0.max_size=10


#a1.sources.sqlSource.interceptors=i1
#a1.sources.sqlSource.interceptors.i1.type=search_replace
#a1.sources.sqlSource.interceptors.i1.searchPattern="
#a1.sources.sqlSource.interceptors.i1.replaceString=

## channel
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /opt/module/flume-1.9.0/checkpoint/behavior1
a1.channels.c1.dataDirs = /opt/module/flume-1.9.0/data/behavior1
a1.channels.c1.maxFileSize = 2146435071
a1.channels.c1.capacity = 1000000
a1.channels.c1.keep-alive = 6

a1.sinks.s1.type=HDFS
#ns为namenode的命名空间,两个作用,一个是防止集群坍塌,另一个是改参数只能作用在active的namenode节点上
a1.sinks.s1.hdfs.path=/flume/mysql/***
a1.sinks.s1.hdfs.round = false
#设置滚动时间,每隔多少时间生成一个文件.如果设置成0,则禁止滚动,可以使所有数据被写到一个文件中.
a1.sinks.s1.hdfs.rollInterval= 10
#设置文件存储数据多大的时候生成下一个文件,建议设置成128M和块大小相同
a1.sinks.s1.hdfs.rollSize=134217728
#设置文件多少行时,滚动生成下一个文件,设置成0时禁止滚动
a1.sinks.s1.hdfs.rollCount=0
## 控制输出文件是原生文件。
#a1.sinks.s1.hdfs.fileType = CompressedStream
#a1.sinks.s1.hdfs.codeC = gzip
a1.sinks.s1.hdfs.fileType=DataStream
a1.sinks.s1.hdfs.writeFormat=Text


a1.sources.sqlSource.channels=c1
a1.sinks.s1.channel=c1
 

三、一个配置文件采集多个mysql表:这部分还没有测试

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 使用Flume采集MySQL数据MySQL中建立数据库school,在数据库中建立表student。SQL语句如下: create database school; use school; create table student( id int not null, name varchar(40) , age int, grade int, primary key id ); 使用Flume实时捕捉MySQL数据库中的记录更新,一旦有新的记录生成,就捕获该记录并显示到控制台。可以使用如下SQL语句模拟MySQL数据库中的记录生成操作: insert into student(id , name , age , grade) values(1, 'Xiaoming' , 23 ,98); insert into student(id , name, age , grade) values(2, 'Zhangsan' , 24 ,96); insert into student(id , name, age , grade) values(3, 'Lisi' , 24 ,93); insert into student(id , name, age , grade) values(4, 'Wangwu' , 21 ,91); insert into student(id , name, age , grade) values(5, 'Weiliu' , 21 ,91); 2.Flume和Kafka的组合使用 编写Flume配置文件,将Kafka作为输入源,由生产者输入"HelloFlume"或其他信息;通过Flume将Kafka生产者输入的信息存入HDFS,存储格式为hdfs://localhost:9000/fromkafka/%Y%m%d/,要求存储时文件名为kafka_log(注:配置好Flume后生产者输入的信息不会实时写入HDFS,而是一段时间后批量写入)。 3.使用Flume写入当前文件系统 假设有一个目录"~/mylog/",现在新建两个文本文件l.txt与2.txt,在l.txt中输入"Hello Flume",在2.txt中输入"hello flume"。使用Flume对目录"~/mylog/"进行监控,当把l.txt与2.txt放入该目录时,Flume就会把文件内容写入"~/backup"目录下的文件中(注:配置文件中Source的类型为spooldir, Sink的类型为具体用法可以参考Apache官网文档。写一份实验思路
07-08
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值