0


Flink on yarn 加载失败plugins失效问题解决

Flink on yarn 加载失败plugins失效问题解决

flink版本:1.13.6

1. 问题

flink 任务运行在yarn集群,plugins加载失效,导致通过扩展资源获取任务参数失效

2. 问题定位

  1. yarn容器的jar包及插件信息,jar包是正常上传在这里插入图片描述
  2. 源码定位 加载plugins入口,TaskManagerRunner.class PluginUtils.createPluginManagerFromRootFolder在这里插入图片描述 源码加载扩展资源参数入口TaskManagerRunner.class ExternalResourceUtils.createStaticExternalResourceInfoProviderFromConfig在这里插入图片描述 日志信息在这里插入图片描述 定位PluginConfig源码在这里插入图片描述

3. 方案

重写覆盖集群的PluginConfig.java,优先从configurtaion获取

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0(the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.flink.core.plugin;import com.alibaba.fastjson.JSON;import org.apache.commons.lang3.StringUtils;import org.apache.flink.configuration.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.nio.file.Path;import java.util.Arrays;import java.util.Objects;import java.util.Optional;

/** Stores the configuration for plugins mechanism. */
@SuppressWarnings("OptionalUsedAsFieldOrParameterType")
public class PluginConfig {
    private static final Logger LOG = LoggerFactory.getLogger(PluginConfig.class);

    private static final String PUPU_FLINK_PLUGINS_DIR ="flink_plugins_dir";

    private final Optional<Path> pluginsPath;

    private final String[] alwaysParentFirstPatterns;

    private PluginConfig(Optional<Path> pluginsPath, String[] alwaysParentFirstPatterns){
        pluginsPath.ifPresent(path -> LOG.info("pluginsPath: {}", path));
        LOG.info("alwaysParentFirstPatterns: {}", Arrays.stream(alwaysParentFirstPatterns).toArray());
        this.pluginsPath = pluginsPath;
        this.alwaysParentFirstPatterns = alwaysParentFirstPatterns;}

    public Optional<Path>getPluginsPath(){return pluginsPath;}

    public String[]getAlwaysParentFirstPatterns(){return alwaysParentFirstPatterns;}

    public static PluginConfig fromConfiguration(Configuration configuration){return new PluginConfig(
                getPluginsDir(configuration).map(File::toPath),
                CoreOptions.getPluginParentFirstLoaderPatterns(configuration));}

    public static Optional<File> getPluginsDir(Configuration configuration){
        String pluginsDir = configuration.get(ConfigOptions.key(PUPU_FLINK_PLUGINS_DIR).stringType().defaultValue(null));if(StringUtils.isBlank(pluginsDir)){
            pluginsDir =
                    System.getenv()
                            .getOrDefault(
                                    ConfigConstants.ENV_FLINK_PLUGINS_DIR,
                                    ConfigConstants.DEFAULT_FLINK_PLUGINS_DIRS);}
        File pluginsDirFile = new File(pluginsDir);if(!pluginsDirFile.isDirectory()){
            LOG.warn("The plugins directory [{}] does not exist.", pluginsDirFile);return Optional.empty();}return Optional.of(pluginsDirFile);}}
标签: flink 大数据

本文转载自: https://blog.csdn.net/qq_27242695/article/details/134056372
版权归原作者 老鼠扛刀满街找猫@ 所有, 如有侵权,请联系我们删除。

“Flink on yarn 加载失败plugins失效问题解决”的评论:

还没有评论