ClickHouse / clickhouse-jdbc-bridge

A JDBC proxy from ClickHouse to external databases
Apache License 2.0
167 stars 60 forks source link

clickhouse-jdbc-bridge-2.0.0 No suitable driver found for jdbc #76

Closed wang316902972 closed 3 years ago

wang316902972 commented 3 years ago

[root@master clickhouse-jdbc-bridge]# java -jar clickhouse-jdbc-bridge-2.0.0.jar --driver-path /usr/local/clickhouse-jdbc-bridge/ --listen-host 0.0.0.0 2020-12-06 23:37:53.053 [main] [INFO ] {Utils:837} - Loading JSON from file [config/vertx.json]... 2020-12-06 23:37:53.053 [main] [WARN ] {Utils:846} - Failed to load JSON from file config/vertx.json 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {Utils:837} - Loading JSON from file [config/server.json]... 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [WARN ] {Utils:846} - Failed to load JSON from file config/server.json 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/datasources] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/schemas] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/queries] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [jdbc] -> [ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:200} - Default datasource type is set to [jdbc] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [config] -> [ru.yandex.clickhouse.jdbcbridge.impl.ConfigDataSource] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [script] -> [ru.yandex.clickhouse.jdbcbridge.impl.ScriptDataSource] 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [INFO ] {Utils:837} - Loading JSON from file [config/httpd.json]... 2020-12-06 23:37:54.054 [vert.x-eventloop-thread-0] [WARN ] {Utils:846} - Failed to load JSON from file config/httpd.json 2020-12-06 23:37:55.055 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:220} - Starting web server... 2020-12-06 23:37:56.056 [vert.x-worker-thread-1] [INFO ] {DefaultDataSourceManager:262} - No datasource configuration found 2020-12-06 23:37:56.056 [vert.x-worker-thread-1] [INFO ] {DefaultQueryManager:77} - No schema configuration found 2020-12-06 23:37:56.056 [vert.x-worker-thread-1] [INFO ] {DefaultQueryManager:76} - No query configuration found 2020-12-06 23:37:56.056 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:224} - Server http://0.0.0.0:9019 started in 2383 ms 2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:235} - [/ping] Context: {__body-handled=true} 2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:236} - [/ping] Headers: Host: 127.0.0.1 Connection: Close

2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:237} - [/ping] Parameters:

2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:235} - [/] Context: {__body-handled=true} 2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:236} - [/] Headers: Host: 127.0.0.1 Transfer-Encoding: chunked Connection: Close

2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:237} - [/] Parameters: connection_string: jdbc:mysql://172.24.140.162:3306/mydb?user=root&password=** columns: columns format version: 1 4 columns: int_id Int32 int_nullable Nullable(Int32) float Float32 float_nullable Nullable(Float32)

max_block_size: 65505

2020-12-06 23:38:03.003 [vert.x-worker-thread-4] [DEBUG] {JdbcBridgeVerticle:342} - Generated query: SELECT int_id, int_nullable, float, float_nullable FROM mydb.test Normalized query: test 2020-12-06 23:38:03.003 [vert.x-worker-thread-4] [DEBUG] {ResponseWriter:44} - Start Time=1607269083911, Timeout=-1000, Max Block Size=65505 2020-12-06 23:38:03.003 [vert.x-worker-thread-4] [INFO ] {NamedDataSource:494} - Executing query(schema=[mydb]): SELECT int_id, int_nullable, float, float_nullable FROM mydb.test 2020-12-06 23:38:03.003 [vert.x-eventloop-thread-0] [ERROR] {JdbcBridgeVerticle:262} - Failed to respond ru.yandex.clickhouse.jdbcbridge.core.DataAccessException: Failed to access [jdbc:mysql://172.24.140.162:3306/mydb?user=root&password=] due to: SQLState(08001) VendorCode(0) No suitable driver found for jdbc:mysql://172.24.140.162:3306/mydb?user=root&password= at ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource.writeQueryResult(JdbcDataSource.java:586) at ru.yandex.clickhouse.jdbcbridge.core.NamedDataSource.executeQuery(NamedDataSource.java:506) at ru.yandex.clickhouse.jdbcbridge.JdbcBridgeVerticle.lambda$handleQuery$5(JdbcBridgeVerticle.java:392) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:313) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at ru.yandex.clickhouse.jdbcbridge.internal.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://172.24.140.162:3306/mydb?user=root&password=** at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:270) at ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource.getConnection(JdbcDataSource.java:357) at ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource.writeQueryResult(JdbcDataSource.java:567) ... 7 more

zhicwu commented 3 years ago

Sorry the usage is changed in 2.0. CLI options like --driver-path /usr/local/clickhouse-jdbc-bridge/ --listen-host 0.0.0.0 no longer works. Also you'd better avoid to use adhoc data source for security reason.

Anyway, in order to make it work your way, I'd suggest you to try below:

  1. create drivers directory under work directory and place all required jdbc drivers there
  2. start jdbc-bridge with -Djdbc-bridge.driver.loader=false
wang316902972 commented 3 years ago

@zhicwu (base) [root@master clickhouse-jdbc-bridge]# tree . ├── clickhouse-jdbc-bridge-2.0.0.jar └── drivers └── mysql-connector-java-5.1.35-bin.jar

1 directory, 2 files (base) [root@master clickhouse-jdbc-bridge]# java -jar clickhouse-jdbc-bridge-2.0.0.jar -Djdbc-bridge.driver.loader=false

thanks for your reply ,like this? it does't work.

zhicwu commented 3 years ago

I think there's still something wrong with the custom class loader. The option was supposed to disable that. Anyway, please use named datasource instead:

  1. create datasource configuration
    # mkdir -p config/datasources
    # cat <<EOF > config/datasources/mydb-mysql.json
    {
    "mydb-mysql": {
    "driverClassName": "com.mysql.jdbc.Driver",
    "maximumPoolSize": 3,
    "jdbcUrl": "jdbc:mysql://172.24.140.162:3306/mydb",
    "dataSource": {
      "user": "username",
      "password": "password"
    }
    }
    }
    EOF
  2. start jdbc bridge by java -jar clickhouse-jdbc-bridge-2.0.0.jar
  3. run query using the named datasource in ClickHouse
    select * from jdbc('mydb-mysql', 'select 1')
wang316902972 commented 3 years ago

@zhicwu (base) [root@master clickhouse-jdbc-bridge]# tree . ├── clickhouse-jdbc-bridge-2.0.0-SNAPSHOT.jar └── config └── datasources ├── ch-server.json ├── mydb-mysql.json └── mysql-connector-java-5.1.35-bin.jar

2 directories, 4 files (base) [root@master clickhouse-jdbc-bridge]# cat config/datasources/mydb-mysql.json { "mydb-mysql": { "driverUrls": [ "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.9.jar" ], "driverClassName": "com.mysql.jdbc.Driver", "maximumPoolSize": 3, "jdbcUrl": "jdbc:mysql://172.24.140.162:3306/mydb?useSSL=false&useCompression=false&useOldAliasMetadataBehavior=true&allowMultiQueries=true", "username": "username", "password": "password" } }

java -jar clickhouse-jdbc-bridge-2.0.0-SNAPSHOT.jar 2020-12-08 13:44:46.046 [main] [INFO ] {Utils:837} - Loading JSON from file [config/vertx.json]... 2020-12-08 13:44:46.046 [main] [WARN ] {Utils:846} - Failed to load JSON from file config/vertx.json 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {Utils:837} - Loading JSON from file [config/server.json]... 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [WARN ] {Utils:846} - Failed to load JSON from file config/server.json 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/datasources] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/schemas] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:531} - Registering consumer to monitor configuration file(s) at [config/queries] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [jdbc] -> [ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:200} - Default datasource type is set to [jdbc] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [config] -> [ru.yandex.clickhouse.jdbcbridge.impl.ConfigDataSource] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {DefaultDataSourceManager:196} - Registering new type of datasource: [script] -> [ru.yandex.clickhouse.jdbcbridge.impl.ScriptDataSource] 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [INFO ] {Utils:837} - Loading JSON from file [config/httpd.json]... 2020-12-08 13:44:46.046 [vert.x-eventloop-thread-0] [WARN ] {Utils:846} - Failed to load JSON from file config/httpd.json 2020-12-08 13:44:47.047 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:220} - Starting web server... 2020-12-08 13:44:48.048 [vert.x-worker-thread-1] [INFO ] {DefaultQueryManager:77} - No schema configuration found 2020-12-08 13:44:48.048 [vert.x-worker-thread-1] [INFO ] {DefaultQueryManager:76} - No query configuration found 2020-12-08 13:44:48.048 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:224} - Server http://0.0.0.0:9019 started in 2377 ms 2020-12-08 13:44:48.048 [vert.x-worker-thread-2] [INFO ] {DefaultDataSourceManager:158} - Adding datasource [ch-server]... 2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:235} - [/ping] Context: {__body-handled=true} 2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:236} - [/ping] Headers: Host: 127.0.0.1 Connection: Close

2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:237} - [/ping] Parameters:

2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:235} - [/columns_info] Context: {__body-handled=true} 2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:236} - [/columns_info] Headers: Host: 127.0.0.1 Connection: Close

2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [DEBUG] {JdbcBridgeVerticle:237} - [/columns_info] Parameters: connection_string: mydb-mysql table: select 1 external_table_functions_use_nulls: true

2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [INFO ] {JdbcBridgeVerticle:275} - Raw query: select 1 2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [ERROR] {DefaultDataSourceManager:89} - Failed to create data source [mydb-mysql] java.lang.IllegalStateException: Failed to create instance from extension: class ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource at ru.yandex.clickhouse.jdbcbridge.core.Extension.newInstance(Extension.java:194) at ru.yandex.clickhouse.jdbcbridge.impl.DefaultDataSourceManager.createFromType(DefaultDataSourceManager.java:87) at ru.yandex.clickhouse.jdbcbridge.impl.DefaultDataSourceManager.get(DefaultDataSourceManager.java:338) at ru.yandex.clickhouse.jdbcbridge.JdbcBridgeVerticle.handleColumnsInfo(JdbcBridgeVerticle.java:280) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.TimeoutHandlerImpl.handle(TimeoutHandlerImpl.java:45) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.TimeoutHandlerImpl.handle(TimeoutHandlerImpl.java:27) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:131) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.ResponseContentTypeHandlerImpl.handle(ResponseContentTypeHandlerImpl.java:54) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.ResponseContentTypeHandlerImpl.handle(ResponseContentTypeHandlerImpl.java:28) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132) at ru.yandex.clickhouse.jdbcbridge.JdbcBridgeVerticle.responseHandlers(JdbcBridgeVerticle.java:258) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:95) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:132) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.doEnd(BodyHandlerImpl.java:296) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.end(BodyHandlerImpl.java:276) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.handler.impl.BodyHandlerImpl.lambda$handle$0(BodyHandlerImpl.java:87) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.HttpServerRequestImpl.onEnd(HttpServerRequestImpl.java:523) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.HttpServerRequestImpl.handleEnd(HttpServerRequestImpl.java:509) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.Http1xServerConnection.handleEnd(Http1xServerConnection.java:176) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.Http1xServerConnection.handleMessage(Http1xServerConnection.java:138) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.impl.ContextImpl.executeTask(ContextImpl.java:366) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:43) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:229) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:163) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93) at ru.yandex.clickhouse.jdbcbridge.internal.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:101) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at ru.yandex.clickhouse.jdbcbridge.internal.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) at ru.yandex.clickhouse.jdbcbridge.internal.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.Http1xOrH2CHandler.end(Http1xOrH2CHandler.java:61) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.core.http.impl.Http1xOrH2CHandler.channelRead(Http1xOrH2CHandler.java:38) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) at ru.yandex.clickhouse.jdbcbridge.internal.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at ru.yandex.clickhouse.jdbcbridge.internal.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at ru.yandex.clickhouse.jdbcbridge.internal.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at ru.yandex.clickhouse.jdbcbridge.internal.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.IllegalArgumentException: Missing driverClassName in named datasource: mydb-mysql at ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource.(JdbcDataSource.java:319) at ru.yandex.clickhouse.jdbcbridge.impl.JdbcDataSource.newInstance(JdbcDataSource.java:226) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ru.yandex.clickhouse.jdbcbridge.core.Extension.newInstance(Extension.java:191) ... 62 more 2020-12-08 13:45:34.034 [vert.x-eventloop-thread-0] [ERROR] {JdbcBridgeVerticle:262} - Failed to respond java.lang.IllegalArgumentException: Data source [mydb-mysql] not found! at ru.yandex.clickhouse.jdbcbridge.impl.DefaultDataSourceManager.get(DefaultDataSourceManager.java:339) at ru.yandex.clickhouse.jdbcbridge.JdbcBridgeVerticle.handleColumnsInfo(JdbcBridgeVerticle.java:280) at ru.yandex.clickhouse.jdbcbridge.internal.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1036)

zhicwu commented 3 years ago

"https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.9.jar"

Is it a typo? Should be 5.1.49.jar?

wang316902972 commented 3 years ago

@zhicwu yes,has modified,still as error as before

zhicwu commented 3 years ago

Tried the same configuration and it works at my end. Are you able to download the driver successfully on your server? Did you make any change to jdbc bridge code? It's hard to read the directory structure you posted, so you may try below instructions:

git clone https://github.com/ClickHouse/clickhouse-jdbc-bridge.git
cd clickhouse-jdbc-bridge
mvn -Drevision=2.0.0 package
cd target
mkdir -p config/datasources
cat <<EOF > config/datasources/mydb-mysql.json
{
  "mydb-mysql": {
    "driverUrls": [
      "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar"
    ],
    "driverClassName": "com.mysql.jdbc.Driver",
    "maximumPoolSize": 3,
    "jdbcUrl": "jdbc:mysql://172.24.140.162:3306/mydb?useSSL=false&useCompression=false&useOldAliasMetadataBehavior=true&allowMultiQueries=true",
    "dataSource": {
      "user": "username",
      "password": "password"
    }
  }
}
EOF
java -jar clickhouse-jdbc-bridge-2.0.0.jar

If the network is unstable, you may download jdbc driver, place it under drivers directory and optionally remove driverUrls from your datasource configuration, for example:

wget -P drivers https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar
wang316902972 commented 3 years ago

528583 -rw-r--r--  1 root root  11M 2020-12-09 12:39 clickhouse-jdbc-bridge-2.0.0.jar

528439 drwxr-xr-x  3 root root 4.0K 2020-12-09 12:40 config

528635 drwxr-xr-x  2 root root 4.0K 2020-12-09 12:41 drivers

528457 drwxr-xr-x  3 root root 4.0K 2020-12-09 10:27 generated-sources

528525 drwxr-xr-x  3 root root 4.0K 2020-12-09 10:27 generated-test-sources

528580 drwxr-xr-x  2 root root 4.0K 2020-12-09 12:35 maven-archiver

528449 drwxr-xr-x  3 root root 4.0K 2020-12-09 10:27 maven-status

528582 -rw-r--r--  1 root root 151K 2020-12-09 12:35 original-clickhouse-jdbc-bridge-2.0.0.jar

528584 drwxr-xr-x  5 root root 4.0K 2020-12-09 12:33 surefire-reports

528514 drwxr-xr-x  4 root root 4.0K 2020-12-09 10:27 test-classes

I haven't make any change to jdbc bridge code, I have tried to follow your steps

I have downloaded the driver and  place it under drivers directory.

my config file is:  {      "mydb-mysql": {        "driverClassName": "com.mysql.jdbc.Driver",        "maximumPoolSize": 3,        "jdbcUrl": "jdbc:mysql://172.24.140.162:3306/mydb?useSSL=false&useCompression=false&useOldAliasMetadataBehavior=true&allowMultiQueries=true",        "dataSource": {          "user": "root",          "password": "password"        }     }  }

but still expection as fllow:

2020-12-09 12:42:21.021 [vert.x-worker-thread-2] [WARN ] {DriverDataSource:70} - Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.

------------------ 原始邮件 ------------------ 发件人: "Zhichun Wu"<notifications@github.com>; 发送时间: 2020年12月9日(星期三) 上午7:43 收件人: "ClickHouse/clickhouse-jdbc-bridge"<clickhouse-jdbc-bridge@noreply.github.com>; 抄送: "316902972"<316902972@qq.com>; "Author"<author@noreply.github.com>; 主题: Re: [ClickHouse/clickhouse-jdbc-bridge] clickhouse-jdbc-bridge-2.0.0 No suitable driver found for jdbc (#76)

Tried the same configuration and it works at my end. Are you able to download the driver successfully on your server? Did you make any change to jdbc bridge code? It's hard to read the directory structure you posted, so you may try below instructions: git clone https://github.com/ClickHouse/clickhouse-jdbc-bridge.git cd clickhouse-jdbc-bridge mvn -Drevision=2.0.0 package cd target mkdir -p config/datasources cat <<EOF > config/datasources/mydb-mysql.json { "mydb-mysql": { "driverUrls": [ "https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar" ], "driverClassName": "com.mysql.jdbc.Driver", "maximumPoolSize": 3, "jdbcUrl": "jdbc:mysql://172.24.140.162:3306/mydb?useSSL=false&useCompression=false&useOldAliasMetadataBehavior=true&allowMultiQueries=true", "dataSource": { "user": "username", "password": "password" } } } EOF java -jar clickhouse-jdbc-bridge-2.0.0.jar

If the network is unstable, you may download jdbc driver, place it under drivers directory and optionally remove driverUrls from your datasource configuration, for example: wget -P drivers https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

zhicwu commented 3 years ago

It's not exception but a warning message from HikariCP. I think it's ready to use if there's no error/exception.

What will you get if you run below query on ClickHouse(assuming ClickHouse server is configured to connect to your JDBC bridge, which is up and running)?

select * from jdbc('mydb-mysql', 'select 1')
wang316902972 commented 3 years ago

This issue has been resolved,Thanks

------------------ 原始邮件 ------------------ 发件人: "ClickHouse/clickhouse-jdbc-bridge" <notifications@github.com>; 发送时间: 2020年12月9日(星期三) 中午1:27 收件人: "ClickHouse/clickhouse-jdbc-bridge"<clickhouse-jdbc-bridge@noreply.github.com>; 抄送: "316902972"<316902972@qq.com>;"Author"<author@noreply.github.com>; 主题: Re: [ClickHouse/clickhouse-jdbc-bridge] clickhouse-jdbc-bridge-2.0.0 No suitable driver found for jdbc (#76)

It's not exception but a warning message from HikariCP. I think it's ready to use if there's no error/exception.

What will you get if you run below query on ClickHouse(assuming ClickHouse server is configured to connect to your JDBC bridge, which is up and running)? select * from jdbc('mydb-mysql', 'select 1')

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.