FLink自定义Sink,生产的数据导出到mysql
一、自定义生产数据
https://www.cnblogs.com/robots2/p/16048729.html
二、生产转化数据,导出到mysql
2.1 建表语句
CREATE TABLE `video_order` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`money` int(11) DEFAULT NULL,
`title` varchar(32) DEFAULT NULL,
`trade_no` varchar(64) DEFAULT NULL,
`create_time` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4
2.2自定义source,配置mysql数据源
package net.xdclass.class6.sink;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import net.xdclass.model.VideoOrder;
/**
* @desc
* @menu
*/
public class MysqlSink extends RichSinkFunction<VideoOrder> {
private Connection conn;
private PreparedStatement ps;
//打开
@Override
public void open(Configuration parameters) throws Exception {
//建立mysql连接
conn = DriverManager.getConnection("jdbc:mysql://ip地址:3306/flink_test?useUnicode=true" +
"&characterEncoding=utf8&allowMultiQueries=true&serverTimezone" +
"=Asia/Shanghai", "账号", "密码");
String sql = "INSERT INTO `video_order` (`user_id`, `money`, `title`, `trade_no`, `create_time`) VALUES(?,?,?,?,?);";
ps = conn.prepareStatement(sql);
System.out.println("自定义sink,open数据库链接 =====");
}
//关闭
@Override
public void close() throws Exception {
//关闭mysql连接
System.out.println("自定义sink,close数据库连接 =====");
if(conn != null){
conn.close();
}
if(ps != null){
ps.close();;
}
}
//每个数据流对象过来,调用的方法
@Override
public void invoke(VideoOrder value, Context context) throws Exception {
ps.setInt(1,value.getUserId());
ps.setInt(2,value.getMoney());
ps.setString(3,value.getTitle());
ps.setString(4,value.getTradeNo());
ps.setDate(5,new Date(value.getCreateTime().getTime()));
ps.executeUpdate();
}
}
2.3 导出到mysql
package net.xdclass.class6.app;
import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.common.functions.FilterFunction;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import net.xdclass.class6.sink.MysqlSink;
import net.xdclass.class6.source.VideoOrderSource;
import net.xdclass.model.VideoOrder;
/**
* @menu
*/
public class FLink04CustomSinkApp {
public static void main(String[] args) throws Exception {
//WebUi方式运行
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
// StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//设置运行模式为流批一体
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
//并行度
env.setParallelism(1);
//设置为自定义source
DataStream<VideoOrder> ds = env.addSource(new VideoOrderSource());
//过滤
DataStream<VideoOrder> dfFliter = ds.filter(new FilterFunction<VideoOrder>() {
@Override
public boolean filter(VideoOrder videoOrder) throws Exception {
return videoOrder.getMoney() > 10;
}
});
dfFliter.print();
//设置为自定义sink
dfFliter.addSink(new MysqlSink());
//设置名字
env.execute("CustomSourceApp");
}
}
FLink自定义Sink,生产的数据导出到mysql的更多相关文章
- Flink自定义Sink
Flink自定义Sink Flink 自定义Sink,把socket数据流数据转换成对象写入到mysql存储. #创建Student类 public class Student { private i ...
- MSSQL数据导出到MYSQL
MSSQL数据导出到MYSQL 花了一天时间把MSSQL里的数据导出到MYSQL, 好麻烦,二个数据库都是阿里云买的云服务器. 先上阿里云控制面板,备份下MSSQL数据库,下载备份下来,在本地电脑上还 ...
- 使用JDBC+POI把Excel中的数据导出到MySQL
POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. htt ...
- 从hive将数据导出到mysql(转)
从hive将数据导出到mysql http://abloz.com 2012.7.20 author:周海汉 在上一篇文章<用sqoop进行mysql和hdfs系统间的数据互导>中,提到s ...
- es 数据 导出 到 MySQL
暂时没有找到直接 导出到 mysql 数据库的工具 或者项目 目前实现思路: 使用 elasticdump 工具 实现 从 es 数据 导出到 json 文件 ,然后 使用 脚本程序 操作 改 js ...
- Sqoop2 将hdfs中的数据导出到MySQL
1.进入sqoop2终端: [root@master /]# sqoop2 2.为客户端配置服务器: sqoop:000> set server --host master --port 120 ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- 使用 sqoop 将 hive 数据导出到 mysql (export)
使用sqoop将hive中的数据传到mysql中 1.新建hive表 hive> create external table sqoop_test(id int,name string,age ...
- 《sqoop实现hdfs中的数据导出至mysql数据库》
报错Access denied for user 'root'@'localhost' (using password: YES) 参考一 参考二 登陆mysql时,root密码的修改 参考帖子h ...
- 第3节 sqoop:6、sqoop的数据增量导入和数据导出
增量导入 在实际工作当中,数据的导入,很多时候都是只需要导入增量数据即可,并不需要将表中的数据全部导入到hive或者hdfs当中去,肯定会出现重复的数据的状况,所以我们一般都是选用一些字段进行增量的导 ...
随机推荐
- Linux终端命令之screen
screen的功能 screen的功能大体有三个: 会话恢复:只要Screen本身没有终止,在其内部运行的会话都可以恢复.这一点对于远程登录的用户特别有用--即使网络连接中断,用户也不会失去对已经打开 ...
- 揭秘UGO SQL审核功能4大特性,让业务平滑迁移至GaussDB
业务挑战 数据库是企业应用系统的核心,SQL作为数据库查询.更新等操作的标准语言,重要性不言而喻.然而在实际的SQL开发过程中,也面临着诸多挑战: 数据库应用开发人员的SQL能力良莠不齐,经常写出不符 ...
- iOS自动化打包输出工具
自动化打包输出工具 做开发的小伙伴有时候会接到自动化打包的需求,公司一般是要求根据一个配置文件来实现自动化配置iOS项目,比如往Xcode工程添加或修改代码.添加Framework.library.S ...
- nodejs安装和环境配置
nodejs安装和环境配置 1.下载安装node.js 官方下载地址: https://nodejs.org/en/ 下载LTS版本(长期稳定版本) 安装可以更改安装路径(我的更改是D:\Progra ...
- Flutter ListView报错RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT
RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT 使用ListView.builder()布局时,如果 ...
- Qt音视频开发41-文件推流(支持网页和播放器播放并切换进度)
一.前言 本功能最初也是有一些人提过类似的需求,就是能不能将本地的音视频文件,通过纯Qt程序推流出去,然后用户可以直接在网页上播放,也可以用各种播放器播放,然后还可以任意切换播放进度,其实说白了就是个 ...
- Qt数据库应用19-图片转pdf
一.前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用. 经过这么些年的社会的毒打,我的原则是:用户是上帝和大爷,尽量站在用户的角度换 ...
- Qt音视频开发18-海康sdk回调
一.前言 海康sdk显示实时视频流除了支持句柄方式以外,也支持回调的方式拿到每一张图片自己绘制处理,当然回调除了拿到视频数据,其实音频数据也一块拿到了,自行调用音频设备播放就行,关于海康sdk回调这块 ...
- SpringCloud-Ribbon
1. Ribbon简介 Ribbon是一个基于HTTP和TCP的客户端负载均衡器,当使用Ribbon对服务进行访问的时候,他会扩展Eureka客户端的服务发现功能,实现从Eureka注册中心获取服务端 ...
- 使用GPIO判断网线拔插
USB网卡和以太网交换机"常连"后,增加交换机插拔网线判断机制 这个项目已经做了小半年了,客户是一个做智能电话机的.所谓的智能电话就是一台可以插网线.电话线,外观却是座机的手机. ...