架构使用spark streaming 消费kafka的数据,并通过impala来插入到kudu中,但是通过对比发现落地到kudu表中的数据比kafka消息数要少,通过后台日志发现,偶发性的出现java.sql.SQLException: [Simba][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AnalysisException: Syntax error in line 1
原因是调用过程中使用了数据库连接池,会合并多行sql执行,实现如下:
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import java.sql.SQLException;
import java.util.Properties;
public class ImapalConnPool {private static Log logger = LogFactory.getLog(ImapalConnPool.class);private static ImapalConnPool imapalConnPool = null;private static DruidDataSource druidDataSource = null;static {Properties properties = new Properties();properties.setProperty("driverClassName","com.cloudera.impala.jdbc41.Driver");properties.setProperty("url","jdbc:impala://127.0.0.1:21050");  properties.setProperty("username","");properties.setProperty("password","");properties.setProperty("initialSize","50");properties.setProperty("maxActive","100");properties.setProperty("maxWait","60000");properties.setProperty("timeBetweenEvictionRunsMillis","60000");properties.setProperty("minEvictableIdleTimeMillis","300000");properties.setProperty("validationQuery","SELECT 1");properties.setProperty("testWhileIdle","true");properties.setProperty("testOnBorrow","false");properties.setProperty("testOnReturn","false");properties.setProperty("poolPreparedStatements","false");//当该值大于0时,启用pool,poolPreparedStatements为trueproperties.setProperty("maxPoolPreparedStatementPerConnectionSize","-1");try {druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); //DruidDataSrouce工厂模式} catch (Exception e) {logger.error(e);}}public static ImapalConnPool getInstance(){if (null == imapalConnPool){synchronized(ImapalConnPool.class) {if(null == imapalConnPool) {imapalConnPool = new ImapalConnPool();}}}return imapalConnPool;}public DruidPooledConnection getConnection() throws SQLException {return druidDataSource.getConnection();}}

调整上述参数poolPreparedStatements和maxPoolPreparedStatementPerConnectionSize任然不能解决同一个connection合并多行sql的问题
后去掉连接池,改为jdbc直连问题解决。有解决过上面数据库连接池问题的麻烦告知我一下
Connection connectionn = null;
Statement statement = null;
try {Class.forName("com.cloudera.impala.jdbc41.Driver");connectionn = DriverManager.getConnection("jdbc:impala://127.0.0.1:21050");statement = connectionn.createStatement();for (String item : execSql) {statement.execute(item);}processResult = true;
}catch (Exception ex){logger.error(this,ex);
}finally {if(null != statement){try {statement.close();}catch (Exception ex){logger.error(this,ex);}}if(null != connectionn) {try {connectionn.close();}catch (Exception ex){logger.error(this,ex);}}
}

转载于:https://www.cnblogs.com/qizhelongdeyang/p/10339029.html

impala jdbc驱动执行impala sql的一个坑(不支持多行sql)相关推荐

  1. 下一代SQL 产品发布会,诚邀您的参加!!包含 Azure数据服务、高级分析和SQL Server(其中包括支持Linux的SQL Server vNext)。

    现在注册 创新和业务转型 不论您是推动业务的决策者,还是下一个突破性应用程序的开发者,数据都是业务的核心 正如微软高层所言,加入我们,实现本地部署到云端的转型,利用微软数据平台最大程度优化您的数据策略 ...

  2. jdbc preparestatement 执行多条语句_MyBatis执行器

    引言 执行器其名Executor,它是MyBtis中一个核心组件,地位非常高,有多高?如果硬要把MyBatis核心组件排个位话,它就是老大.所以开篇就要先介绍它. 这个老大它做了什么?其它的组件又是指 ...

  3. JDBC连接执行MySQL存储过程报空指针或权限错误

    最近使用root用户编写了几个存储过程,但是使用普通用户通过JDBC连接执行却报错: java.lang.NullPointerException...... 或 java.sql.SQLExcept ...

  4. MyBatis简介——半自动的持久化层框架(SQL映射框架)|| 支持定制化sql

    MyBatis简介 1.MyBatis:和数据库进行交互:持久化层框架(SQL映射框架): 1).从原始的JDBC-----dbutils(QueryRunner)-------JdbcTemplat ...

  5. JDBC学习总结(二)JDBC操作Blob类型字段高效的批量插入JDBC处理数据库事务将多个SQL看成一个事务执行数据库连接池C3P0DBCPDruidDBUtils工具类实现CRUD

    JDBC学习总结(二)JDBC操作Blob类型字段/高效的批量插入/JDBC处理数据库事务/将多个SQL看成一个事务执行/数据库连接池C3P0/DBCP/Druid/DBUtils工具类实现CRUD ...

  6. Jmeter JDBC Request执行多条SQL语句

    之前写过Jmeter操作mysql的文章https://blog.csdn.net/qq_36502272/article/details/88891873今天我们再看下如何操作多条sql语句 1.添 ...

  7. Hive记录-Impala jdbc连接hive和kudu参考

    1.配置环境Eclipse和JDK 2.加载hive jar包或者impala jar包 备注:从CDH集群里面拷贝出来 下载地址:https://www.cloudera.com/downloads ...

  8. 使用DriverManager动态加载JDBC驱动时,报:java.sql.SQLException: No suitable driver found for xxxx 错误

    参考文章: yanbin.blog - 自定义类加载器动态加载 JDBC 驱动 项目场景: 使用DriverManager动态加载JDBC驱动时,报:java.sql.SQLException: No ...

  9. 一个不安分的JDBC驱动

    连接, 连接, 总是连接! 生活中肯定有比数据库连接更有趣的事情. 1 数据库连接 又到了数据库连接的时间! 那些码农把数据库参数送过来,  Oracle , Db2,  Sybase, SQL Se ...

最新文章

  1. 注解 @Scheduled
  2. android程序日历layout,Android使用GridLayout绘制自定义日历控件
  3. 查WiFi密码的三种方法
  4. 工业交换机如何预防雷电?
  5. TotoiseSVN的上手教程
  6. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
  7. php学习日志(3)-echoprint
  8. PHP-CGI进程占用过多CPU
  9. C#中常用字符串操作
  10. c mysql开发工具_Windows平台下Mysql C程序设计
  11. 计算机 随机分组的方法,最小化随机分组方法介绍及其SAS实现
  12. 拓宽你的认知,优秀的人都掌握的40个经典思维模型「附全部模型PPT」
  13. 各类识别、深度学习-开源代码文献梳理
  14. IT 通信类客户分析
  15. C# Base64转换
  16. ProxySettings代理设置
  17. Win10 无法用照片查看器打开照片
  18. 返回数组中非零元素的索引np.flatnonzero()
  19. 以小见大——那些基于 protobuf 的五花八门的 RPC(2)
  20. 第一模块 商务邮件写作到底有多重要

热门文章

  1. .NET Compact Framework 2.0 SP2 for Platform Builder (4.2, 5.0, 6.0)
  2. Mastercam X9中文版
  3. LeetCode周总结--第一周
  4. button 元素的css3旋转动画
  5. css和HTML布局小技巧
  6. 网页开发中文本编辑器UEditor的使用
  7. 【原创】new和delete
  8. Java 安装后的检测是否安装成功
  9. PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
  10. Dijkstra算法的思想和数学归纳法