Hi Leon,

For your question1, in the classpath, there are 2 types of jars: user jars
and flink system jars(i.e. jars in flink/lib). System jars are sorted
alphabetically. For user jars, there are 3 choices to add user jars in the
final classpath: ORDER, FIRST, LAST(See the doc
<https://nightlies.apache.org/flink/flink-docs-master/zh/docs/deployment/resource-providers/yarn/#user-jars--classpath>
for more details). To my best knowledge, there is no way to pass a sort
function for this for now. One workaround is managing your jar paths. You
can put the jar that you want to load first in an alphabetical smaller
directory(e.g a-flink/user-jar).
For your question2, flink-dist.jar is always at the end of the system jars.
Depending on your choices of adding user jars, it is not always at the end
of the final generated classpath. flink-dist.jar is special and mandatory
as we need it to launch java process to run ClusterEntrypoint on the
cluster side. Other jars in the flink/lib can somehow be compromised.

I have met a similar problem as well. My previous woraround is managing the
directory name, which is not so elegant. It can be useful to add the
ability to customize loading orders of jars in classpath while it is also
important to package the jars more carefully to avoid the conflicts.

Best,
Biao Geng


Leon Xu <l...@attentivemobile.com> 于2022年6月5日周日 03:21写道:

> Hi Flink Community,
>
> We are building on top of  *org.apache.flink.yarn.YarnClusterDescriptor *to
> submit a flink application from Java code to YARN cluster, in the
> application mode. We are setting the classpath as the value of *the 
> yarn.provided.lib.dirs
> *property under the yarn configuration.
>
> By playing with the YarnClusterDescriptor code I have two questions that I
> hope to get some answers:
> 1. YarnClusterDescriptor seems to force the classpath loading in
> alphabetical order. See code here
> <https://github.com/apache/flink/blob/master/flink-yarn/src/main/java/org/apache/flink/yarn/YarnClusterDescriptor.java#L966>.
> Is there any specific reason for doing that? If I'd like to enforce my own
> order is it possible now?
> 2. Looks like the *flink-dist.jar* is treated separately from the other
> classpath classes. In the *YarnApplicationFileUploader* class,
> the registerMultipleLocalResources method will skip the jar if it is a dist
> jar. See the code here
> <https://github.com/apache/flink/blob/master/flink-yarn/src/main/java/org/apache/flink/yarn/YarnApplicationFileUploader.java#L283>.
> With the current behavior it seems it will always place the flink-dist.jar
> at the end of the classpath. Is there any reason that Flink wants to treat
> the *flink-dist.jar* separately from other jars?
>
> In our classpath loading we are hoping to enforce certain order because
> different jars may contain the same dependent library but with different
> versions. We hope to force the order so that we can load the correct
> library version as we want.
>
>
> Thanks
> Leon
>

Reply via email to