StreamSets小白踩过的一些坑
由于公司业务上的需求,需要实时监控mysql数据库的数据的增长,并将数据同步到另一个平台,所以就问老大使用什么工具比较好,老大推荐使用StreamSets,还说在测试环境都已经部署好了StreamSets,所以就开始写了第一个测试。
数据库版本:5.6.35 MySQL Community Server (GPL)
jdbc版本:5.1.6
StreamSets版本:3.3.0
由于我要监控mysql,所以这里选择的ORIGINS是JDBC Query Consumer,接下来按照官网上的步骤:
1.配置环境变量
2.安装jdbc
具体参考这篇博客:
https://blog.csdn.net/u012551524/article/details/78492939
3.配置参数
配置用户名,密码:
配置驱动类:
4.点击preview,报如下错误:
com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
网上看到的解决方法:
https://blog.csdn.net/u012228009/article/details/54095421
就是把JDBC Connection String改为:jdbc:mysql://192.168.5.22/test?autoReconnect=true&testOnBorrow=true&validationQuery=select 1,但是对我这个没有帮助,但是报的错误却变了,如下:
Exception during pool initialization: Communications link failure Last packe
以为是数据库连接池的问题,于是修改mysql的配置文件my.cnf中添加如下参数:
wait_timeout=31536000
interactive_timeout=31536000
依然没什么卵用。。。
最后仔细检查了下日志,发现日志中最后有一个错误:
Caused by: java.net.SocketException: java.security.AccessControlException: access denied ("java.net.SocketPermission" "192.168.5.22:3306" "connect,resolve")
靠,mmp,原来是java安全策略的问题,查看官网中TROUBLESHOOTING的JDBC Origins中:
于是在/opt/jdk1.8.0_161/jre/lib/security/java.policy(这个根据自己的jdk位置确定路径)中添加如下内容:
// user-defined external directory
grant codebase "file:///opt/cloudera/parcels/STREAMSETS_DATACOLLECTOR/sdc-extras/-" {
permission java.security.AllPermission;
};(注释:上面的file路径要根据自己sdc-extras存放的路径确定)
添加完这个之后连接数据库的问题算是解决了,但是又报了下面的错误,mmmmmmmmmmmp
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=1' at line 1
这个是原因是mysql 5.6中已经不再支持OPTION SQL_SELECT_LIMIT=1这个参数, 而我又使用了低版本的jdbc驱动,所以就报了这个错误,从新去mvn库中下载mysql-connector-java-5.1.46.jar,成功解决
最后,总结一下:
其实最开始的两个错误都不是本质错误,那个java安全策略的错误才是原因,看来以后报错还是要看日志啊,而且要看最后一个错误,英语也不太好,
但是,硬着头皮看了下官方文档,差不读能看懂70%,还不错,希望以后更加细心