2020
2121import com .dtstack .flink .sql .launcher .LauncherOptions ;
2222import com .dtstack .flink .sql .util .PluginUtil ;
23+ import org .apache .commons .io .Charsets ;
24+ import org .apache .commons .lang3 .StringUtils ;
2325import org .apache .flink .client .deployment .ClusterSpecification ;
2426import org .apache .flink .client .program .ClusterClient ;
27+ import org .apache .flink .core .fs .Path ;
2528import org .apache .flink .runtime .jobgraph .JobGraph ;
29+ import org .apache .flink .shaded .guava18 .com .google .common .base .Strings ;
30+ import org .apache .flink .shaded .guava18 .com .google .common .collect .Sets ;
2631import org .apache .flink .yarn .AbstractYarnClusterDescriptor ;
2732import org .apache .hadoop .yarn .api .records .ApplicationId ;
2833import org .slf4j .Logger ;
2934import org .slf4j .LoggerFactory ;
3035
31- import java .util .Properties ;
36+ import java .net .MalformedURLException ;
37+ import java .net .URL ;
38+ import java .net .URLDecoder ;
39+ import java .util .*;
3240
3341/**
3442 * per job mode submitter
@@ -43,7 +51,20 @@ public class PerJobSubmitter {
4351
4452 public static String submit (LauncherOptions launcherOptions , JobGraph jobGraph ) throws Exception {
4553
46- Properties confProperties = PluginUtil .jsonStrToObject (launcherOptions .getConfProp (), Properties .class );
54+ fillJobGraphClassPath (jobGraph );
55+
56+ String addjarPath = URLDecoder .decode (launcherOptions .getAddjar (), Charsets .UTF_8 .toString ());
57+ if (StringUtils .isNotBlank (addjarPath ) ){
58+ List <String > paths = getJarPaths (addjarPath );
59+ paths .forEach ( path ->{
60+ jobGraph .addJar (new Path ("file://" + path ));
61+ });
62+
63+ }
64+
65+ String confProp = launcherOptions .getConfProp ();
66+ confProp = URLDecoder .decode (confProp , Charsets .UTF_8 .toString ());
67+ Properties confProperties = PluginUtil .jsonStrToObject (confProp , Properties .class );
4768 ClusterSpecification clusterSpecification = FLinkPerJobResourceUtil .createClusterSpecification (confProperties );
4869
4970 PerJobClusterClientBuilder perJobClusterClientBuilder = new PerJobClusterClientBuilder ();
@@ -63,4 +84,41 @@ public static String submit(LauncherOptions launcherOptions, JobGraph jobGraph)
6384
6485 return applicationId ;
6586 }
87+
88+ private static List <String > getJarPaths (String addjarPath ) {
89+ if (addjarPath .length () > 2 ) {
90+ addjarPath = addjarPath .substring (1 ,addjarPath .length ()-1 ).replace ("\" " ,"" );
91+ }
92+ List <String > paths = Arrays .asList (addjarPath .split ("," ));
93+ return paths ;
94+ }
95+
96+ private static void fillJobGraphClassPath (JobGraph jobGraph ) throws MalformedURLException {
97+ Map <String , String > jobCacheFileConfig = jobGraph .getJobConfiguration ().toMap ();
98+ Set <String > classPathKeySet = Sets .newHashSet ();
99+
100+ for (Map .Entry <String , String > tmp : jobCacheFileConfig .entrySet ()){
101+ if (Strings .isNullOrEmpty (tmp .getValue ())){
102+ continue ;
103+ }
104+
105+ if (tmp .getValue ().startsWith ("class_path" )){
106+ //DISTRIBUTED_CACHE_FILE_NAME_1
107+ //DISTRIBUTED_CACHE_FILE_PATH_1
108+ String key = tmp .getKey ();
109+ String [] array = key .split ("_" );
110+ if (array .length < 5 ){
111+ continue ;
112+ }
113+
114+ array [3 ] = "PATH" ;
115+ classPathKeySet .add (StringUtils .join (array , "_" ));
116+ }
117+ }
118+
119+ for (String key : classPathKeySet ){
120+ String pathStr = jobCacheFileConfig .get (key );
121+ jobGraph .getClasspaths ().add (new URL ("file:" + pathStr ));
122+ }
123+ }
66124}
0 commit comments