Hello,
I still have problem after upgrading from flink 1.3.1 to 1.4.2 
Our scenario looks like that:
we have container running on top of yarn. Machine that starts it has
installed flink and also loading some classpath libraries (e.g. hadoop) into
container.
there is seperate rest service that gets requests to run export job - it
uses YarnClusterClient and submitting Packaged program. Jars with actual
flink jobs are located in lib/ directory of service. On the machine where
Spring service is deployed we don't have flink installed. 
For version 1.3 we had some libraries also loaded to container so that they
wont have to be loaded dynamically every time. If I understand it correctly
in strategy child-first it should not be needed any more, right?

Now our actual problems started to come up linked with class loading. After
restarting rest service first trigger of job is working fine, but next ones
are complaining on class versions that are loaded. We found out that
PackagedProgram is creating new classLoader on every creation. So we
overriden that behaviour so that we have static map holding one classloader
per jarFileName:


    /private static final Map<String, ClassLoader> classLoaders =
Maps.newHashMap();
    ...
    (constructor) {     
                ...
            classLoaders.computeIfAbsent(jarFile.getName(),
                s -> getUserClassLoaderChildFirst(getAllLibraries(),
classPaths, getClass().getClassLoader()));

        userCodeClassLoader = classLoaders.get(jarFile.getName());
        this.mainClass = loadMainClass(entryPointClassName,
userCodeClassLoader);

        }
/

I don't know if that is a good direction, but seems to solve an issue for
now. We are just not sure about stability of this solution - still tesing on
our internal environment but I'm affraid for now to proceed on production.
Can you give us any other things we could try out to deal with loading?


Also PackagedProgram is still using parentFirst strategy, in JobWithJars you
have method:
/

        public static ClassLoader buildUserCodeClassLoader(List<URL> jars,
List<URL> classpaths, ClassLoader parent) {
                URL[] urls = new URL[jars.size() + classpaths.size()];
                for (int i = 0; i < jars.size(); i++) {
                        urls[i] = jars.get(i);
                }
                for (int i = 0; i < classpaths.size(); i++) {
                        urls[i + jars.size()] = classpaths.get(i);
                }
                return FlinkUserCodeClassLoaders.parentFirst(urls, parent);
        }
/

is that correct to still point to parent?

In some of issues I found in mailing list, you suggest to set up container
to parent-first as a solving issue. We would like to find proper solution
working on supported child-first path and don't use workaround fix.





--
Sent from: http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/

Reply via email to