Search in sources :

Example 26 with JobClient

use of com.dtstack.taier.pluginapi.JobClient in project Taier by DTStack.

the class PerJobClientFactory method getResourceFilesAndSetSecurityConfig.

private List<File> getResourceFilesAndSetSecurityConfig(JobClient jobClient, Configuration config) throws IOException {
    Map<String, File> resources = new HashMap<>();
    String remoteDir = flinkConfig.getRemoteDir();
    // resource files
    String taskWorkspace = FlinkUtil.getTaskWorkspace(jobClient.getJobId());
    String taskResourceDirPath = taskWorkspace + ConfigConstrant.SP + "resource";
    File taskResourceDir = new File(taskResourceDirPath);
    File[] taskResourceDirFiles = taskResourceDir.listFiles();
    if (taskResourceDirFiles != null && taskResourceDirFiles.length > 0) {
        for (File file : taskResourceDirFiles) {
            String fileName = file.getName();
            resources.put(fileName, file);
        }
    }
    // 任务提交keytab
    String clusterKeytabDirPath = ConfigConstant.LOCAL_KEYTAB_DIR_PARENT + remoteDir;
    File clusterKeytabDir = new File(clusterKeytabDirPath);
    File[] clusterKeytabFiles = clusterKeytabDir.listFiles();
    if (clusterKeytabFiles != null && clusterKeytabFiles.length > 0) {
        for (File file : clusterKeytabFiles) {
            String fileName = file.getName();
            String keytabPath = file.getAbsolutePath();
            String keytabFileName = flinkConfig.getPrincipalFile();
            if (resources.containsKey(fileName) && StringUtils.endsWith(fileName, "keytab")) {
                String newFileName = String.format("%s-%s", RandomStringUtils.randomAlphanumeric(4), fileName);
                keytabPath = String.format("%s/%s", taskResourceDirPath, newFileName);
                FileUtils.copyFile(file, new File(keytabPath));
            }
            if (StringUtils.equals(fileName, keytabFileName)) {
                String principal = flinkConfig.getPrincipal();
                if (StringUtils.isEmpty(principal)) {
                    principal = KerberosUtils.getPrincipal(keytabPath);
                }
                config.setString(SecurityOptions.KERBEROS_LOGIN_KEYTAB, keytabPath);
                config.setString(SecurityOptions.KERBEROS_LOGIN_PRINCIPAL, principal);
                continue;
            }
            File newKeytabFile = new File(keytabPath);
            resources.put(newKeytabFile.getName(), newKeytabFile);
        }
    }
    return resources.entrySet().stream().map(entry -> entry.getValue()).collect(Collectors.toList());
}
Also used : SecurityOptions(org.apache.flink.configuration.SecurityOptions) java.util(java.util) ConfigConstrant(com.dtstack.taier.flink.constrant.ConfigConstrant) FlinkClientBuilder(com.dtstack.taier.flink.FlinkClientBuilder) YarnClient(org.apache.hadoop.yarn.client.api.YarnClient) URL(java.net.URL) ClassLoaderType(com.dtstack.taier.base.enums.ClassLoaderType) LoggerFactory(org.slf4j.LoggerFactory) YarnClusterDescriptor(org.apache.flink.yarn.YarnClusterDescriptor) JarFileInfo(com.dtstack.taier.pluginapi.JarFileInfo) ClusterMode(com.dtstack.taier.flink.base.enums.ClusterMode) StringUtils(org.apache.commons.lang3.StringUtils) ParamAction(com.dtstack.taier.pluginapi.pojo.ParamAction) KerberosUtils(com.dtstack.taier.base.util.KerberosUtils) YarnConfiguration(org.apache.hadoop.yarn.conf.YarnConfiguration) CollectionUtils(org.apache.commons.collections.CollectionUtils) ConverterUtils(org.apache.hadoop.yarn.util.ConverterUtils) FlinkConfig(com.dtstack.taier.flink.FlinkConfig) ApplicationReport(org.apache.hadoop.yarn.api.records.ApplicationReport) EJobType(com.dtstack.taier.pluginapi.enums.EJobType) HighAvailabilityMode(org.apache.flink.runtime.jobmanager.HighAvailabilityMode) FlinkUtil(com.dtstack.taier.flink.util.FlinkUtil) ComputeType(com.dtstack.taier.pluginapi.enums.ComputeType) JobIdentifier(com.dtstack.taier.pluginapi.JobIdentifier) RemovalNotification(com.google.common.cache.RemovalNotification) Logger(org.slf4j.Logger) Configuration(org.apache.flink.configuration.Configuration) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) File(java.io.File) YarnConfigOptions(org.apache.flink.yarn.configuration.YarnConfigOptions) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) JobClient(com.dtstack.taier.pluginapi.JobClient) FileSystem(org.apache.flink.core.fs.FileSystem) ApplicationId(org.apache.hadoop.yarn.api.records.ApplicationId) CoreOptions(org.apache.flink.configuration.CoreOptions) FileUtil(com.dtstack.taier.flink.util.FileUtil) ClusterClient(org.apache.flink.client.program.ClusterClient) ConfigConstant(com.dtstack.taier.pluginapi.constrant.ConfigConstant) YarnApplicationState(org.apache.hadoop.yarn.api.records.YarnApplicationState) RemovalListener(com.google.common.cache.RemovalListener) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) CacheBuilder(com.google.common.cache.CacheBuilder) Cache(com.google.common.cache.Cache) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException) HighAvailabilityOptions(org.apache.flink.configuration.HighAvailabilityOptions) File(java.io.File)

Example 27 with JobClient

use of com.dtstack.taier.pluginapi.JobClient in project Taier by DTStack.

the class PerJobClientFactory method deleteTaskIfExist.

/**
 * kill application which name and queue are the same as this jobClient
 * when run in stream-computing mode
 */
public void deleteTaskIfExist(JobClient jobClient) {
    if (ComputeType.BATCH.equals(jobClient.getComputeType())) {
        return;
    }
    try {
        String taskName = jobClient.getJobName();
        String queueName = flinkConfig.getQueue();
        YarnClient yarnClient = flinkClientBuilder.getYarnClient();
        EnumSet<YarnApplicationState> enumSet = EnumSet.noneOf(YarnApplicationState.class);
        enumSet.add(YarnApplicationState.ACCEPTED);
        enumSet.add(YarnApplicationState.RUNNING);
        List<ApplicationReport> existApps = yarnClient.getApplications(enumSet).stream().filter(report -> report.getQueue().endsWith(queueName)).filter(report -> report.getName().equals(taskName)).collect(Collectors.toList());
        for (ApplicationReport report : existApps) {
            ApplicationId appId = report.getApplicationId();
            LOG.info("try to kill application " + appId.toString() + " which name is " + report.getName());
            yarnClient.killApplication(appId);
        }
    } catch (Exception e) {
        LOG.error("Delete task error ", e);
        throw new PluginDefineException("Delete task error");
    }
}
Also used : ApplicationReport(org.apache.hadoop.yarn.api.records.ApplicationReport) SecurityOptions(org.apache.flink.configuration.SecurityOptions) java.util(java.util) ConfigConstrant(com.dtstack.taier.flink.constrant.ConfigConstrant) FlinkClientBuilder(com.dtstack.taier.flink.FlinkClientBuilder) YarnClient(org.apache.hadoop.yarn.client.api.YarnClient) URL(java.net.URL) ClassLoaderType(com.dtstack.taier.base.enums.ClassLoaderType) LoggerFactory(org.slf4j.LoggerFactory) YarnClusterDescriptor(org.apache.flink.yarn.YarnClusterDescriptor) JarFileInfo(com.dtstack.taier.pluginapi.JarFileInfo) ClusterMode(com.dtstack.taier.flink.base.enums.ClusterMode) StringUtils(org.apache.commons.lang3.StringUtils) ParamAction(com.dtstack.taier.pluginapi.pojo.ParamAction) KerberosUtils(com.dtstack.taier.base.util.KerberosUtils) YarnConfiguration(org.apache.hadoop.yarn.conf.YarnConfiguration) CollectionUtils(org.apache.commons.collections.CollectionUtils) ConverterUtils(org.apache.hadoop.yarn.util.ConverterUtils) FlinkConfig(com.dtstack.taier.flink.FlinkConfig) ApplicationReport(org.apache.hadoop.yarn.api.records.ApplicationReport) EJobType(com.dtstack.taier.pluginapi.enums.EJobType) HighAvailabilityMode(org.apache.flink.runtime.jobmanager.HighAvailabilityMode) FlinkUtil(com.dtstack.taier.flink.util.FlinkUtil) ComputeType(com.dtstack.taier.pluginapi.enums.ComputeType) JobIdentifier(com.dtstack.taier.pluginapi.JobIdentifier) RemovalNotification(com.google.common.cache.RemovalNotification) Logger(org.slf4j.Logger) Configuration(org.apache.flink.configuration.Configuration) FileUtils(org.apache.commons.io.FileUtils) IOException(java.io.IOException) Collectors(java.util.stream.Collectors) File(java.io.File) YarnConfigOptions(org.apache.flink.yarn.configuration.YarnConfigOptions) ExecutionException(java.util.concurrent.ExecutionException) TimeUnit(java.util.concurrent.TimeUnit) JobClient(com.dtstack.taier.pluginapi.JobClient) FileSystem(org.apache.flink.core.fs.FileSystem) ApplicationId(org.apache.hadoop.yarn.api.records.ApplicationId) CoreOptions(org.apache.flink.configuration.CoreOptions) FileUtil(com.dtstack.taier.flink.util.FileUtil) ClusterClient(org.apache.flink.client.program.ClusterClient) ConfigConstant(com.dtstack.taier.pluginapi.constrant.ConfigConstant) YarnApplicationState(org.apache.hadoop.yarn.api.records.YarnApplicationState) RemovalListener(com.google.common.cache.RemovalListener) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) CacheBuilder(com.google.common.cache.CacheBuilder) Cache(com.google.common.cache.Cache) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException) HighAvailabilityOptions(org.apache.flink.configuration.HighAvailabilityOptions) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException) YarnApplicationState(org.apache.hadoop.yarn.api.records.YarnApplicationState) ApplicationId(org.apache.hadoop.yarn.api.records.ApplicationId) YarnClient(org.apache.hadoop.yarn.client.api.YarnClient) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException)

Example 28 with JobClient

use of com.dtstack.taier.pluginapi.JobClient in project Taier by DTStack.

the class PerJobClientFactory method getClusterClient.

@Override
public ClusterClient getClusterClient(JobIdentifier jobIdentifier) {
    String applicationId = jobIdentifier.getApplicationId();
    String jobId = jobIdentifier.getJobId();
    ClusterClient clusterClient = null;
    try {
        clusterClient = KerberosUtils.login(flinkConfig, () -> {
            try {
                return perJobClientCache.get(applicationId, () -> {
                    ParamAction action = new ParamAction();
                    action.setJobId(jobId);
                    action.setName("jobId-" + jobId);
                    action.setTaskType(EJobType.SQL.getType());
                    action.setComputeType(ComputeType.STREAM.getType());
                    action.setTenantId(-1L);
                    String taskParams = "flinkTaskRunMode=per_job";
                    action.setTaskParams(taskParams);
                    JobClient jobClient = new JobClient(action);
                    try (YarnClusterDescriptor perJobYarnClusterDescriptor = this.createPerJobClusterDescriptor(jobClient)) {
                        return perJobYarnClusterDescriptor.retrieve(ConverterUtils.toApplicationId(applicationId)).getClusterClient();
                    }
                });
            } catch (ExecutionException e) {
                throw new PluginDefineException(e);
            }
        }, flinkClientBuilder.getYarnConf());
    } catch (Exception e) {
        LOG.error("job[{}] get perJobClient exception:{}", jobId, e);
        throw new PluginDefineException(e);
    }
    return clusterClient;
}
Also used : ParamAction(com.dtstack.taier.pluginapi.pojo.ParamAction) ClusterClient(org.apache.flink.client.program.ClusterClient) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException) YarnClusterDescriptor(org.apache.flink.yarn.YarnClusterDescriptor) ExecutionException(java.util.concurrent.ExecutionException) JobClient(com.dtstack.taier.pluginapi.JobClient) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) PluginDefineException(com.dtstack.taier.pluginapi.exception.PluginDefineException)

Aggregations

JobClient (com.dtstack.taier.pluginapi.JobClient)28 ParamAction (com.dtstack.taier.pluginapi.pojo.ParamAction)14 Test (org.junit.Test)6 PluginDefineException (com.dtstack.taier.pluginapi.exception.PluginDefineException)5 JobResult (com.dtstack.taier.pluginapi.pojo.JobResult)5 IOException (java.io.IOException)5 JarFileInfo (com.dtstack.taier.pluginapi.JarFileInfo)4 JobIdentifier (com.dtstack.taier.pluginapi.JobIdentifier)4 ClusterResource (com.dtstack.taier.pluginapi.pojo.ClusterResource)4 Properties (java.util.Properties)4 Logger (org.slf4j.Logger)4 LoggerFactory (org.slf4j.LoggerFactory)4 JSONObject (com.alibaba.fastjson.JSONObject)3 KerberosUtils (com.dtstack.taier.base.util.KerberosUtils)3 RdosDefineException (com.dtstack.taier.common.exception.RdosDefineException)3 ScheduleEngineJobCache (com.dtstack.taier.dao.domain.ScheduleEngineJobCache)3 FlinkConfig (com.dtstack.taier.flink.FlinkConfig)3 EJobType (com.dtstack.taier.pluginapi.enums.EJobType)3 JudgeResult (com.dtstack.taier.pluginapi.pojo.JudgeResult)3 File (java.io.File)3