Can you manually load the driver class, with "Class.forName(...)", or does that yield a "ClassNotFoundException" ?
On Fri, Jun 5, 2015 at 11:10 PM, Flavio Pompermaier <pomperma...@okkam.it> wrote: > in the fat jar > On 5 Jun 2015 19:28, "Stephan Ewen" <se...@apache.org> wrote: > >> In which way is the driver in the classpath? >> >> - fat jar? >> - in the nested /out folder in the slim jar? >> >> >> >> On Fri, Jun 5, 2015 at 7:23 PM, Flavio Pompermaier <pomperma...@okkam.it> >> wrote: >> >>> Actually I just need to load it in the main method (job manager) before >>> calling any flink operation, I retrieve the records in a mysql table >>> because they contain the path of files I'll need to read. Nothing more >>> nothing less >>> On 5 Jun 2015 19:06, "Robert Metzger" <rmetz...@apache.org> wrote: >>> >>>> Sure. >>>> >>>> So the DriverManager has a static variable called "registeredDrivers". >>>> When DriverManager.getConnection() is called, the method is looking up >>>> if an registered driver for that connection (in this case "mysql") is >>>> available. >>>> >>>> For drivers to be in that list, they have to register themselves using >>>> the DriverManager.registerDriver() method. >>>> >>>> Drivers can register themselves with a static constructor (which is >>>> executed when Java loads a class): >>>> >>>> public class PoolingDriver implements Driver { >>>> /** Register myself with the {@link DriverManager}. */ >>>> static { >>>> try { >>>> DriverManager.registerDriver(new PoolingDriver()); >>>> } catch(Exception e) { >>>> } >>>> } >>>> >>>> To execute that driver registration, you need to do: >>>> Class.forName("org.datanucleus.store.rdbms.datasource.dbcp. >>>> PoolingDriver"); >>>> because then Java is loading the class and executing the static >>>> constructor which is registering the driver at the connection manager. >>>> >>>> When executing Flink locally, you are using only one JVM. By calling >>>> the MySQL driver manually in the main() method of your flink job, you are >>>> registering the MySQL driver at the DriverManager of that JVM. >>>> >>>> However, when you run Flink in a distributed cluster, at the >>>> TaskManager JVMs, the MySQL driver is not loaded at the DriverManager >>>> there. >>>> Therefore, you have to make sure that Class.forName(" >>>> org.datanucleus.store.rdbms.datasource.dbcp.PoolingDriver"); (this is >>>> not the correct class for the MySQL driver) >>>> has been called. >>>> One approach to do that is to call Class.forName() in the open() method >>>> of your function. >>>> >>>> Best, >>>> Robert >>>> >>>> >>>> On Fri, Jun 5, 2015 at 6:54 PM, Flavio Pompermaier < >>>> pomperma...@okkam.it> wrote: >>>> >>>>> HI Robert, >>>>> In the main method I connect to a mysql table that acts as a >>>>> data-source repository that I use to know which dataset I need to load. >>>>> All >>>>> mysql classes are present in the shaded jar. >>>>> Could you explain a little bit more in detail the solution to fix this >>>>> problem please? Sorry but I didn't understand it :( >>>>> >>>>> Thanks, >>>>> Flavio >>>>> On 5 Jun 2015 18:33, "Robert Metzger" <rmetz...@apache.org> wrote: >>>>> >>>>>> Hi Stefano, >>>>>> >>>>>> I doubt that there are conflicting dependencies because Flink does >>>>>> not contain MySQL dependencies. >>>>>> Are you using Flink's JDBCInputFormat or custom code? >>>>>> >>>>>> For drivers to register at java.sql's DriverManager, their classes >>>>>> need to be loaded first. To load a class, you need to call >>>>>> Class.forName("<classname>"); >>>>>> >>>>>> Maybe you are loading the class in the application's main() method >>>>>> (thats why it is working from eclipse) but not on the cluster instances >>>>>> which are supposed to read the data. >>>>>> >>>>>> On Fri, Jun 5, 2015 at 5:16 PM, Stefano Bortoli <s.bort...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Robert, >>>>>>> >>>>>>> I answer on behalf of Flavio. He told me the driver jar was >>>>>>> included. Smells lik class-loading issue due to 'conflicting' >>>>>>> dependencies. Is it possible? >>>>>>> >>>>>>> Saluti, >>>>>>> Stefano >>>>>>> >>>>>>> 2015-06-05 16:24 GMT+02:00 Robert Metzger <rmetz...@apache.org>: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> is the MySQL driver part of the Jar file that you've build? >>>>>>>> >>>>>>>> On Fri, Jun 5, 2015 at 4:11 PM, Flavio Pompermaier < >>>>>>>> pomperma...@okkam.it> wrote: >>>>>>>> >>>>>>>>> Hi to all, >>>>>>>>> >>>>>>>>> I'm using a fresh build of flink-0.9-SNAPSHOT and in my flink job >>>>>>>>> I set up a mysql connection. >>>>>>>>> When I run the job from Eclipse everything is fine, >>>>>>>>> while when running the job from the Web UI I get the following >>>>>>>>> exception: >>>>>>>>> >>>>>>>>> java.sql.SQLException: No suitable driver found for >>>>>>>>> jdbc:mysql:/localhost:3306/mydb?autoReconnect=true >>>>>>>>> at java.sql.DriverManager.getConnection(DriverManager.java:596) >>>>>>>>> at java.sql.DriverManager.getConnection(DriverManager.java:215) >>>>>>>>> >>>>>>>>> How can I fix that? >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> Flavio >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>> >>