Details
-
Bug
-
Status: Open
-
Not a Priority
-
Resolution: Unresolved
-
1.2.1
-
None
-
Flink 1.2.1 running on local environment on a Ignite 2.0 node.
-
Patch, Important
Description
There is a bug in Flink 1.2.1 that results in a "cannot load user class" exception even when the class is available in the current class loader of the thread running the job. The problem arises when you execute a Flink job on a local environment inside an Ignite 2.0 node. This happens on possibly all other versions of Flink and Ignite.
This bug was discussed in [1], and a fix was proposed in [2].
In summary, the fix requires replacing line 298 in BlobLibraryCacheManager.java [3] for:
this.classLoader = new FlinkUserCodeClassLoader(libraryURLs, Thread.currentThread().getContextClassLoader());
A repository with a complete test case reproducing the error is found in [4]. The idea behind the code is being able to run Flink jobs in a collocated way (ie, on the node where the data is stored), minimizing network traffic and thus improving the performance.
The README file contains details on how to run it and the resulting exception:
org.apache.flink.streaming.runtime.tasks.StreamTaskException: Cannot load user class: com.test.Source ClassLoader info: URL ClassLoader: Class not resolvable through given classloader.