Flink把数据写入到es6中运行出错

在尝试使用Flink将数据写入Elasticsearch 6时遇到了JobExecutionException,原因是缺少org.apache.http.client.config.RequestConfig类。问题的根本是依赖的httpclient版本过低。解决此问题只需升级httpclient到4.5.10或更高版本。

2020-03-29 17:43:57,110 [flink-akka.actor.default-dispatcher-13] [org.apache.flink.runtime.rpc.akka.AkkaRpcService] [INFO] - Stopped Akka RPC service.
Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.
    at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:146)
    at org.apache.flink.runtime.minicluster.MiniCluster.executeJobBlocking(MiniCluster.java:647)
    at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.execute(LocalStreamEnvironment.java:123)
    at com.bsoft.hcms.flinkDome1.main(flinkDome1.java:123)
Caused by: java.lang.NoClassDefFoundError: org/apache/http/client/config/RequestConfig
    at org.elasticsearch.client.RestClientBuilder.createHttpClient(RestClientBuilder.java:196)
    at org.elasticsearch.client.RestClientBuilder.access$000(RestClientBuil

Flink 中将数据写入到 MySQL 中,需要使用 Flink 的 JDBC 连接器。步骤如下: 1. 导入 JDBC 驱动 在 Flink 的 pom.xml 文件中加入 MySQL 的 JDBC 驱动依赖,例如: ```xml <dependencies> <!-- ... --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.25</version> </dependency> </dependencies> ``` 2. 编写 MySQL 输出格式化器 Flink 的 JDBC 连接器需要使用一个输出格式化器将数据格式化为 SQL 语句。可以自定义一个实现了 `JDBCOutputFormat` 接口的输出格式化器,例如: ```java public class MySQLOutputFormat extends JDBCOutputFormat { public MySQLOutputFormat(String username, String password, String drivername, String dbURL, String query) { super(username, password, drivername, dbURL, query); } @Override protected void prepareStatement(PreparedStatement preparedStatement, Tuple tuple) throws SQLException { // 将 tuple 中的数据设置到 PreparedStatement 中 preparedStatement.setInt(1, tuple.getField(0)); preparedStatement.setString(2, tuple.getField(1)); preparedStatement.setDouble(3, tuple.getField(2)); } } ``` 3.数据写入到 MySQL 在 Flink数据流中,使用 `addSink` 方法将数据写入到 MySQL 中,例如: ```java DataStream<Tuple3<Integer, String, Double>> dataStream = ...; dataStream.addSink( new JDBCOutputFormat( "jdbc:mysql://localhost:3306/test", "root", "password", "INSERT INTO table_name (id, name, value) VALUES (?, ?, ?)" ) ); ``` 其中,`dataStream` 是一个包含了 3 个字段的数据流,分别为整数、字符串和双精度浮点数。`JDBCOutputFormat` 的参数依次为 MySQL 的 JDBC URL、用户名、密码和 SQL 插入语句。在 `prepareStatement` 中,将 tuple 中的字段设置到 PreparedStatement 中,即将数据写入到 MySQL 中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值