ChengWei Ye created FLINK-17858:
-----------------------------------
Summary: Yarn mode, windows and linux environment should be interlinked
Key: FLINK-17858
URL:
https://issues.apache.org/jira/browse/FLINK-17858 Project: Flink
Issue Type: Improvement
Components: Deployment / YARN
Affects Versions: 1.10.0
Reporter: ChengWei Ye
my flink version: 1.10.0
my yarn version: 2.7.6
When I use windows idea to try to submit a job to Linux's yarn cluster using java, am container throws an exception "Error: Could not find or load main class org.apache.flink.yarn.entrypoint.YarnJobClusterEntrypoint".
Then find out that the CLASSPATH and _FLINK_CLASSPATH delimiter of the container startup script "launch_container.sh" are different, windows is ";", linux is ":", so the container cannot get the dependent packages.
I think the operating environment should be left to Yarn to judge.
Locate in the flink-yarn module
1. The startAppMaster method of org.apache.flink.yarn.YarnClusterDescriptor
Change "File.pathSeparator" to "ApplicationConstants.CLASS_PATH_SEPARATOR"
Yarn will replace special characters according to the environment, but this only solves _FLINK_CLASSPATH
{code:java}
private ApplicationReport startAppMaster(.....) {
.....
StringBuilder classPathBuilder = new StringBuilder();
if (userJarInclusion == YarnConfigOptions.UserJarInclusion.FIRST) {
for (String userClassPath : userClassPaths) {
// here
classPathBuilder.append(userClassPath).append(File.pathSeparator);
}
}
for (String classPath : systemClassPaths) {
// here
classPathBuilder.append(classPath).append(File.pathSeparator);
}
// Setup jar for ApplicationMaster
.....
// here
classPathBuilder.append(flinkJarPath.getName()).append(File.pathSeparator);
.....
}{code}
2. The addToEnvironment method of org.apache.flink.yarn.Utils
Change "File.pathSeparator" to "ApplicationConstants.CLASS_PATH_SEPARATOR"
Can solve the CLASSPATH
{code:java}
public static void addToEnvironment(Map<String, String> environment,
String variable, String value) {
String val = environment.get(variable);
if (val == null) {
val = value;
} else {
// here
val = val + File.pathSeparator + value;
}
environment.put(StringInterner.weakIntern(variable),
StringInterner.weakIntern(val));
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)