无法为 Storm 的 JdbcInsertBolt 加载 Phoenix JDBC 驱动程序



在初始化Apache's StormJdbcInsertBolt期间,我收到错误

java.lang.ClassCastException: 
Cannot cast org.apache.phoenix.jdbc.PhoenixDriver to javax.sql.DataSource
at com.zaxxer.hikari.util.UtilityElf.createInstance(UtilityElf.java:90)
at com.zaxxer.hikari.pool.PoolBase.initializeDataSource(PoolBase.java:292)
at com.zaxxer.hikari.pool.PoolBase.<init>(PoolBase.java:84)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:102)
at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:71)
at org.apache.storm.jdbc.common.HikariCPConnectionProvider.prepare(HikariCPConnectionProvider.java:53)
at org.apache.storm.jdbc.mapper.SimpleJdbcMapper.<init>(SimpleJdbcMapper.java:43)

从底层HikariCPConnectionProvider.怎么了?

我正在关注 http://storm.apache.org/releases/1.1.2/storm-jdbc.html,这是我基于此所做的:

我喜欢通过Phoenix将数据从Apache Storm拓扑写入HBase表。为此,我从我的集群服务器下载了驱动程序文件 (phoenix-4.7.0.2.6.5.3003-25-client.jar(,并将其添加到我的本地 maven 存储库中:

mvn install:install-file 
-Dfile=libphoenix-4.7.0.2.6.5.3003-25-client.jar 
-DgroupId=org.apache.phoenix 
-DartifactId=phoenix-jdbc -Dversion=4.7.0 -Dpackaging=jar

之后我更新了我的.pom

<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-jdbc</artifactId>
<version>4.7.0</version>
</dependency>

现在添加 Storm 的 JDBC-Bolt:

<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-jdbc</artifactId>
<version>1.2.2</version>
<scope>provided</scope>
</dependency>

我准备使用螺栓。首先:设置连接提供程序:

Map hikariConfigMap = new HashMap();
hikariConfigMap.put("dataSourceClassName", "org.apache.phoenix.jdbc.PhoenixDriver");
hikariConfigMap.put("dataSource.url", "<zookeeperQuorumURI>:2181:/hbase-unsecure");
this.connectionProvider = new HikariCPConnectionProvider(hikariConfigMap);

现在初始化元组值到数据库列映射器

this.simpleJdbcMapper = new SimpleJdbcMapper(this.tablename, connectionProvider);

在此期间,会发生上述错误。

只是为了完整起见:JdbcInsertBolt是这样创建的:

new JdbcInsertBolt(this.connectionProvider, this.simpleJdbcMapper)
.withTableName(this.tablename)
.withQueryTimeoutSecs(30);

您是否尝试过设置:

driverClassName-> org.apache.phoenix.jdbc.PhoenixDriver.当前代码似乎已经设置了数据源类名称,我想这是不同的

参考这个

最新更新