Flink——Flink读写MySQL

Maven依赖

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-jdbc_2.11</artifactId>
    <version>1.10.0</version>
</dependency>

Flink MySQL Source and Sink

package flink.batch;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
import org.apache.flink.api.common.typeinfo.TypeInformation;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.io.jdbc.JDBCInputFormat;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.typeutils.RowTypeInfo;
import org.apache.flink.types.Row;

public class BankStatement {
	public static void main(String[] args) throws Exception {
		ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

		//数据库信息
		String driverName = "com.mysql.jdbc.Driver";
		String dbURL = "jdbc:mysql://host:3306/db_name";
		String username = "user_name";
		String password = "password";

		//SQL
		String selectSQL = "select email_receive_time,raw_data from table";
		String insertSQL = "insert into table_new (email_receive_time,transaction_time,transaction_amount) VALUES (?, ?, ?)";

		//字段类型信息
		TypeInformation[] fieldsTypes = new TypeInformation[]{
				BasicTypeInfo.DATE_TYPE_INFO,
				BasicTypeInfo.STRING_TYPE_INFO,
				BasicTypeInfo.STRING_TYPE_INFO
		};
		RowTypeInfo rowTypeInfo = new RowTypeInfo(fieldsTypes);

		// JDBC Source
		JDBCInputFormat inputFormat = JDBCInputFormat.buildJDBCInputFormat()
                .setDrivername(driverName)
                .setDBUrl(dbURL)
                .setUsername(username)
                .setPassword(password)
                .setQuery(selectSQL)
                .setRowTypeInfo(rowTypeInfo)
                .finish();
        //读取MySQL
        DataSource<Row> dataSource = env.createInput(inputFormat);

		//数据处理
        DataSet ds = dataSource.map(new MapFunction<Row, Row>() {
            @Override
            public Row map(Row value) throws Exception {
                String emailReceiveTime = value.getField(0).toString();
                String rawData = value.getField(1).toString();
                JSONObject json = JSON.parseObject(rawData);

                return Row.of(json.getString("transaction_time"), json.getBigDecimal("transaction_amount"));
            }
        });

		//JDBC Sink
        JDBCOutputFormat outputFormat = JDBCOutputFormat.buildJDBCOutputFormat()
                .setDrivername(driverName)
                .setDBUrl(dbURL)
                .setUsername(username)
                .setPassword(password)
                .setQuery(insertSQL)
                .finish();
        //写入MySQL  
        ds.output(outputFormat);

        env.execute("Flink-MySQL batch");
	}
}

//提交命令
./bin/flink run
-m yarn-cluster \
-yn 1 \
-yjm 1024 \
-ytm 1024 \
-p 2 \
-c flink.batch.BankStatement \
/opt/jar/bigdata.jar

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值