flume增量读取mysql数据写入到hdfs

一,下载flume-ng-sql-source-1.4.1.jar,放入flume的lib目录下
链接:https://pan.baidu.com/s/1wqxRR9V2PdcujTQAnru4aA
提取码:i9m3
复制这段内容后打开百度网盘手机App,操作更方便哦
二,将mysql驱动jar包放入flume的lib目录下(mysql5.5)
链接:https://pan.baidu.com/s/1sZv2b70mbBqcr4mrBLAbTQ 密码:cbxj
在这里插入图片描述
三,flume配置文件
注意事项:
1,flume1.7以后才支持拦截器Interceptor
2,flume如何匹配空格,需要加括号
3,hdfs落地时地址要用命名空间代替
4,a1.sources.sqlSource.delimiter.entry=| 突然失效,原因未知

#声明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://192.168.35.202:3306/nagios
a1.sources.sqlSource.hibernate.connection.user=root
a1.sources.sqlSource.hibernate.connection.password=root123
#这个参数很重要,默认false,如果设为false就不会自动查询
a1.sources.sqlSource.hibernate.connection.autocommit=true
#声明mysql的hibernate方言
a1.sources.sqlSource.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
#声明mysql驱动
a1.sources.sqlSource.hibernate.connection.driver_class=com.mysql.jdbc.Driver
#查询间隔,单位毫秒
a1.sources.sqlSource.run.query.delay=10000
#声明保存flume状态的文件夹位置
a1.sources.sqlSource.status.file.path=/usr/soft/apache-flume-1.5.2-bin/log
a1.sources.sqlSource.status.file.name=sqlSouce.status
#声明从第一条数据开始查询
a1.sources.sqlSouce.start.from=0
#sql语句自定义,但是要注意:增量只能针对id字段即主键列,经测试系统默认如此.
#而且必须要将主键查询出来,因为如果不查询主键,flume无法记录上一次查询的位置.
#$@$表示增量列上一次查询的值,记录在status文件中
a1.sources.sqlSource.custom.query=
SELECT nsc.servicecheck_id,  ns.display_name, nh.alias, nsc.state, nsc.start_time, nsc.end_time, nsc.output, nsc.perfdata 
from nagios_servicechecks as nsc 
LEFT JOIN nagios_services as ns ON nsc.service_object_id = ns.service_object_id 
LEFT JOIN nagios_hosts as nh ON ns.host_object_id = nh.host_object_id 
WHERE ns.display_name = '901_CPU_load' 
AND nsc.servicecheck_id > $@$ ORDER BY nsc.servicecheck_id ASC

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

#设置数据查询出来后用什么分隔符隔开,存储时也用此分隔符
#此处一开始有效,后来没有效果,未及测试原因,此处功能可以用拦截器进行替换.
#a1.sources.sqlSource.delimiter.entry=|

#设置c3p0连接池参数
a1.sources.sqlSource.hibernate.connection.provider_class = org.hibernate.connection.C3P0ConnectionProvider
a1.sources.sqlSource.hibernate.c3p0.min_size=1
a1.sources.sqlSource.hibernate.c3p0.max_size=10


#配置拦截器(替换)
a1.sources.sqlSource.interceptors=i1 i2 i3 i4 i5
a1.sources.sqlSource.interceptors.i1.type=search_replace
a1.sources.sqlSource.interceptors.i1.searchPattern="
a1.sources.sqlSource.interceptors.i1.replaceString=

a1.sources.sqlSource.interceptors.i2.type=search_replace
a1.sources.sqlSource.interceptors.i2.searchPattern=OK - CPU used=
a1.sources.sqlSource.interceptors.i2.replaceString=

a1.sources.sqlSource.interceptors.i3.type=search_replace
#注意:此处有空格需要匹配,因为直接写空格无法直接匹配,外层需要加上小括号
a1.sources.sqlSource.interceptors.i3.searchPattern=( idle=)
a1.sources.sqlSource.interceptors.i3.replaceString=

a1.sources.sqlSource.interceptors.i4.type=search_replace
a1.sources.sqlSource.interceptors.i4.searchPattern=,
a1.sources.sqlSource.interceptors.i4.replaceString=|

a1.sources.sqlSource.interceptors.i5.type=search_replace
a1.sources.sqlSource.interceptors.i5.searchPattern=(% )
a1.sources.sqlSource.interceptors.i5.replaceString=%


#设置通道为内存模式
a1.channels.c1.type=memory
a1.channels.c1.capacity=10000
a1.channels.c1.transactionCapacity=10000
a1.channels.c1.byteCapacityBufferPercentage=20
a1.channels.c1.byteCapacity=800000


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



#连接source,channel,sink
a1.sources.sqlSource.channels=c1
a1.sinks.s1.channel=c1

在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要将RabbitMQ中的数据写入HDFS中,可以使用Flume来实现。Flume是一个分布式、可靠、高可用的日志收集和聚合系统,支持从多个数据源(包括RabbitMQ)获取数据,并将数据写入到多个目的地(包括HDFS)中。 下面是一个使用Flume读取RabbitMQ数据写入HDFS的简单示例: 1. 安装RabbitMQ和Flume 首先需要安装RabbitMQ和Flume,可参考官方文档进行安装。 2. 配置RabbitMQ 需要在RabbitMQ中创建一个Exchange和一个Queue,并将它们绑定在一起。这样当有消息到达Exchange时,会被路由到Queue中。 3. 配置Flume 需要创建一个Flume配置文件,指定RabbitMQ作为数据源,HDFS作为目的地,并定义数据的格式和转换规则。 示例配置文件如下: ``` # Name the components on this agent agent.sources = rabbitmq-source agent.sinks = hdfs-sink agent.channels = memory-channel # Describe/configure the source agent.sources.rabbitmq-source.type = org.apache.flume.source.rabbitmq.RabbitMQSource agent.sources.rabbitmq-source.uri = amqp://guest:guest@localhost:5672 agent.sources.rabbitmq-source.queue = my-queue # Describe the sink agent.sinks.hdfs-sink.type = hdfs agent.sinks.hdfs-sink.hdfs.path = hdfs://localhost:9000/flume/rabbitmq-data/ agent.sinks.hdfs-sink.hdfs.fileType = DataStream agent.sinks.hdfs-sink.hdfs.writeFormat = Text # Use a channel which buffers events in memory agent.channels.memory-channel.type = memory # Bind the source and sink to the channel agent.sources.rabbitmq-source.channels = memory-channel agent.sinks.hdfs-sink.channel = memory-channel ``` 上述配置文件中,我们定义了一个名为“rabbitmq-source”的数据源,使用RabbitMQSource来接收来自RabbitMQ的数据。然后,我们定义了一个名为“hdfs-sink”的目的地,使用HDFS Sink将数据写入HDFS中。最后,我们定义了一个名为“memory-channel”的通道,用于缓存事件。 4. 启动Flume 使用以下命令启动Flume: ``` $ bin/flume-ng agent -n agent -c conf -f conf/flume.conf ``` 其中,`-n`指定代理的名称,`-c`指定配置文件目录,`-f`指定配置文件路径。 5. 测试 向RabbitMQ发送一些消息,可以通过以下命令查看HDFS中是否成功写入数据: ``` $ bin/hadoop fs -cat /flume/rabbitmq-data/* ``` 注意:这只是一个简单的示例,实际应用中需要根据具体情况进行配置和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值