flink提交yarn问题排查

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

场景:

下面的错误是我在将本地代码打包以后使用服务器将flink的任务代码提交到yarn以后产生的,主要的原因是服务器使用的flink依赖环境中缺少相应的环境依赖。我们需要到flink官网中找到这些依赖下载下来放到服务器对应的flink/lib中。

重要错误提示:

Caused by: org.apache.flink.table.api.NoMatchingTableFactoryException: Could not find a suitable table factory for 'org.apache.flink.table.factories.TableSourceFactory' in

the classpath.

这是在提交yarn时报的错误,原因其实就是少了一些包,提交的集群后一些依赖包使用flink的lib目录下的,所以我需要将一些依赖包放到lib目录下。

我们看到缺少的是org.apache.flink.table.factories.TableSourceFactory类,所以对应的应该是flink连接JDBC的包。这里我们去官网上下载你对应flink版本的连接JDBC的包,如下图

001.png 放到提交集群的客户机部署的flink的lib目录下。

可以看到上面最主要的是缺少依赖包,其实像很多类似的错误都是由于缺少依赖引起的,尤其是当你引入Table Api使用JDBC、Hive、kafka等对应的操作api时,一定要去官网指定版本把包下下来放到lib目录下。

类似的错误

Caused by: org.apache.flink.table.api.NoMatchingTableFactoryException: Could not find a suitable table factory for 'org.apache.flink.table.factories.CatalogFactory' in

the classpath.

缺少如下图的包:

002.png

注意:同时需要把你maven的依赖添加范围

<scope>provided</scope>
复制代码

例如:

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
            <scope>provided</scope>
        </dependency>
复制代码

这是由于flink高版本的ClassLoader解析顺序为Child优先,所以在maven打jar包时,不要把lib中有的依赖打入,否则会引来冲突。当然你也可以在$FLINK_HOME/conf/flink-conf.yaml中修改为parent优先使用。

classloader.resolve-order: parent-first
复制代码

猜你喜欢

转载自juejin.im/post/7107905692983361543