开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

有人改过flink-jdbc-connector源码部署到yarn上不生效的吗?怎么解决的?

有人改过flink-jdbc-connector源码部署到yarn上不生效的吗?怎么解决的?

展开
收起
游客6vdkhpqtie2h2 2022-09-08 10:43:57 642 0
12 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    如果您修改过 Flink JDBC Connector 的源码,编译后部署到 YARN 上发现不生效,可能是因为您的部署代码可能没有将编译后的 Connector JAR 文件打包到 Flink 应用程序的 Classpath 中。

    为了解决这个问题,您可以按照以下步骤进行操作:

    1. 编译 Flink JDBC Connector 的源码并生成 JAR 文件。

    2. 在您的 Flink 应用程序代码中使用 Maven 或 Gradle 等依赖管理工具引入 JDBC Connector JAR 文件。

    3. 将引入的 JAR 文件打包到 Flink 应用程序的自定义 lib 目录下。

    4. 在 Flink 集群中启动 YARN Session Cluster,并将自定义 lib 目录添加到 Flink 客户端的 Classpath 中。例如:

    ./bin/flink run -m yarn-cluster -yn 2 -ynm my-app -c com.example.MyApplication -p 2 -yd -yD env.custom.lib.dir=./lib/my-lib-dir my-app.jar
    

    其中,env.custom.lib.dir 指定自定义 lib 目录的路径。

    1. 在您的 Flink 应用程序中使用 JDBC Connector 时,请确保完整地指定 Connector 类型和其他相关配置。例如:
    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setParallelism(1);
    
    StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
    
    tableEnv.executeSql("CREATE TABLE my_table (" +
        "id INT," +
        "name STRING," +
        "age INT" +
        ") WITH (" +
        "  'connector' = 'jdbc'," +
        "  'driver' = 'com.mysql.jdbc.Driver'," +
        "  'url' = 'jdbc:mysql://localhost:3306/my_database'," +
        "  'table-name' = 'my_table'," +
        "  'username' = 'my_username'," +
        "  'password' = 'my_password'" +
        ")");
    

    以上示例代码中,我们使用 "connector" = "jdbc" 指定了 JDBC Connector 类型,并且完整地指定了其他相关配置。这样就可以使用您修改后的 Flink JDBC Connector 了。

    2023-05-05 21:27:59
    赞同 展开评论 打赏
  • 如果你修改过 Flink 的 JDBC 连接器源码,并在部署到 YARN 上后发现修改不生效,可能是由于 YARN 不会默认使用你的修改后的代码目录。为了解决这个问题,你可以采取以下步骤:

    1. 编译你的修改后的 Flink JDBC 连接器源码,并将编译后的 jar 文件上传到你的 YARN 集群上。
    2. 在启动 Flink 任务时,通过参数 -yD yarn.application.classpath./path/to/your/jdbc-connector.jar 来指定 YARN 应用程序的 classpath,从而让 YARN 使用你的自定义的连接器 jar 包。
    3. 另外,你还可以在启动 Flink 任务的时候通过 -yD flink.application.classloader.parent-first-patterns.additional=<package-name> 参数,让 Flink 应用程序的 classloader 加载你的修改后的连接器类。

    通过以上步骤,应该可以让 YARN 使用你的修改后的 Flink JDBC 连接器代码。如果问题仍然存在,你可以进一步排查 YARN 环境、代码部署等可能的错误。

    2023-05-05 17:39:08
    赞同 展开评论 打赏
  • 从事java行业9年至今,热爱技术,热爱以博文记录日常工作,csdn博主,座右铭是:让技术不再枯燥,让每一位技术人爱上技术

    改动了flink-jdbc-connector的源码部署到yarn上不生效,首先确认一下你部署操作是否正确,改动后的源码是否上传成功,以及源码引用的jar包是否可以正常加载,如果部署操作没有问题的话再检查一下连接操作是否有问题,连接操作可以参考文档:文档

    2023-05-05 11:20:01
    赞同 展开评论 打赏
  • 出现这种情况可能是多种原因引起的,以下是可能的解决方法:

    • 确保修改的源码已经编译打包,且打包后的jar包已经上传到了yarn上。可以通过查看yarn上的文件列表来确认。

    • 在部署到yarn上时,需要指定正确的jar包路径,一般通过命令行参数或者配置文件来指定。如果指定的路径不正确,就会导致修改的代码不生效。

    • 确保在yarn上启动的任务使用的是修改后的代码,而不是原先的代码。可以通过日志或者其他方式来确认。

    • 可以通过在代码中添加日志输出来调试问题,比如在代码中输出一些调试信息,查看输出信息是否符合预期。

    • 确保修改的代码没有语法错误或者其他编译错误,可以通过编译器或者其他工具来检查代码。

    • 如果仍然无法解决问题,可以尝试重新编译和打包整个flink-jdbc-connector项目,并重新部署到yarn上,确保修改的代码生效。

    2023-05-03 09:37:13
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    如果您修改了 Flink JDBC Connector 的源码并重新编译后在 Yarn 上部署时出现问题,建议先确认修改是否正确且无误,并确保重新编译生成的 JAR 包包含了您的修改。也可以先尝试在本地运行经过修改的 Flink JDBC Connector,确保它能够正常工作,以便判断问题是否是因为部署到 Yarn 上而引起的。

    若确认修改后的 Flink JDBC Connector 能够正常工作,则可以考虑以下几个方面:

    确认 Flink 集群和 Yarn 集群的配置是否正确,例如 Flink 和 Yarn 的版本是否匹配、Flink 各组件的配置是否正确等。可以尝试使用默认的 Flink JDBC Connector 部署到 Yarn 上,确认无误后再尝试部署修改后的版本。
    确认 Flink JDBC Connector 在部署到 Yarn 上后是否与其他组件(例如 Flink TaskManager 和 Yarn ResourceManager)通信正常。可以查看 Flink JDBC Connector 的日志和 Yarn 日志,查找是否有异常或错误信息。
    确认 Flink JDBC Connector 在部署到 Yarn 上时是否正确加载了相关的依赖库。可以检查 Flink JDBC Connector 的 classpath 是否包含了相关的 JAR 包,例如 JDBC 驱动程序、数据库客户端等。
    考虑是否需要在部署到 Yarn 上时手动配置 Flink JDBC Connector 的参数,例如 JDBC URL、用户名和密码等。可以在启动 Flink 作业时添加参数 -yD key=value 进行设置。
    
    2023-04-27 12:31:04
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    如果您修改了 Flink JDBC Connector 的源代码并重新构建了 JAR 文件,但在将其部署到 YARN 上时发现更改不生效,可能有以下几个原因:

    您在重新构建 JAR 文件时可能没有将所有必需的类和文件包含在内。请确保您已将所有修改的文件包含在 JAR 文件中,并且 JAR 文件的路径正确。

    您在部署 JAR 文件到 YARN 上时可能没有正确地指定类路径。请确保您已正确地设置了 Flink 运行时环境的类路径,以便可以找到您修改的 JAR 文件。

    您可能需要在重新构建 JAR 文件时更改版本号。如果您的 Flink 集群中已经存在旧版本的 Flink JDBC Connector JAR 文件,那么您需要使用不同的版本号来避免冲突。

    如果您已经排除了上述问题,但仍然无法使更改生效,您可以尝试清除 Flink 集群的缓存和元数据,以便重新加载 JAR 文件。您可以使用以下命令清除缓存和元数据:

    ./bin/flink.sh clear 请注意,这将清除所有 Flink 作业的元数据和缓存,因此请谨慎使用。

    2023-04-26 18:05:55
    赞同 展开评论 打赏
  • 如果您部署了自定义的Flink JDBC Connector到YARN上,但是发现不生效,可能是由于以下一些原因:

    类路径问题 如果您在自定义的Flink JDBC Connector中使用了第三方依赖库,那么可能会出现类路径问题。这时,您需要确保所有必要的依赖库都被正确地打包到JAR包中,并且在运行任务时被正确地加载。

    可以考虑使用maven-shade-plugin等工具来打包依赖库,并将生成的Fat JAR包提交到YARN上运行。同时,还需要确保在运行任务时设置正确的classpath参数,以确保任务可以正确地加载自定义的JDBC Connector。

    配置文件问题 如果您的Flink任务配置文件中没有正确指定自定义的JDBC Connector,那么可能会导致任务无法正常启动。这时,您需要检查任务配置文件中的connector.class和jdbc.driver.class属性是否设置正确。

    例如,如果您自定义的JDBC Connector类名为com.yourcompany.jdbc.MyJdbcConnector,那么您需要在任务配置文件中指定该类名,如下所示:

    Flink任务配置文件

    指定自定义的JDBC Connector

    connector.class=com.yourcompany.jdbc.MyJdbcConnector

    指定JDBC驱动程序类名

    jdbc.driver.class=com.mysql.jdbc.Driver

    指定JDBC连接URL、用户名和密码

    jdbc.url=jdbc:mysql://localhost:3306/mydb jdbc.username=user jdbc.password=password 需要注意的是,在部署自定义Flink JDBC Connector到YARN上时,需要根据实际情况进行选择和调整,并确保代码的正确性和稳定性。同时,也需要遵循相关的编程规范和最佳实践,以提高任务的性能和可维护性。

    2023-04-26 11:11:26
    赞同 展开评论 打赏
  • 由于你没有提供更具体的错误信息,我无法确定你所遇到的问题。但是,以下是一些可能的解决方法,可以尝试解决你的问题:

    1. 确认你的 Flink 集群和 Flink JDBC Connector 的版本是否兼容。建议使用 Flink 官方文档中所推荐的版本。

    2. 在你的 Flink job 中,确保已正确指定了 Flink JDBC Connector 的依赖项。可以在 pom.xml 文件中添加以下依赖项,以便将 Flink JDBC Connector 引入到你的项目中:

      <dependency>
         <groupId>org.apache.flink</groupId>
         <artifactId>flink-jdbc</artifactId>
         <version>${flink.version}</version>
      </dependency>
      
    3. 确认你的 Flink job 配置文件中是否正确指定了 JDBC 数据源。可以使用以下配置项:
      table.sinks.jdbc.driver: com.mysql.jdbc.Driver
      table.sinks.jdbc.url: jdbc:mysql://localhost/test?characterEncoding=utf8
      table.sinks.jdbc.username: root
      table.sinks.jdbc.password: root
      
    4. 在你的 Flink job 中,确保已正确指定了 JDBC 数据源的输出格式。可以使用以下代码示例:
      JDBCAppendTableSink sink = JDBCAppendTableSink.builder()
         .setDrivername("com.mysql.jdbc.Driver")
         .setDBUrl("jdbc:mysql://localhost/test?characterEncoding=utf8")
         .setUsername("root")
         .setPassword("root")
         .setQuery("insert into my_table values (?, ?, ?)")
         .setParameterTypes(Types.INT, Types.STRING, Types.DOUBLE)
         .build();
      
    5. 确认你的 Flink job 是否正确部署到了 YARN 上,可以检查日志文件中是否有任何错误或异常信息。可以使用以下命令查看 YARN 日志:
      yarn logs -applicationId <application_id>
      

    希望这些解决方法能够帮助你解决问题。如果问题仍然存在,请提供更具体的错误信息,以便我们能够更好地帮助你。

    2023-04-25 12:42:39
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,根据你的描述,你可以看一下你修改之后的源码是否能够正常编译,然后再排查一下引用的依赖是否有报错提示,最后再排查一下你的配置,看是否有未修改的内容,请逐一排查。

    2023-04-24 22:22:07
    赞同 展开评论 打赏
  • 全栈JAVA领域创作者

    如果你修改了flink-jdbc-connector的源码,并将其打成jar包放到flink的lib目录下,但是在部署到yarn上后发现不生效,可能有以下几个原因:

    flink集群没有更新到最新的lib目录下的jar包,需要重新上传或重启集群。

    代码中使用的flink版本和集群中使用的版本不一致,需要将修改后的代码编译成和集群一致的版本。

    需要将修改后的jar包也上传到yarn集群中,可以使用flink自带的yarn-session.sh脚本上传lib目录下的jar包。

    修改后的代码中有依赖库未打进jar包中,需要将依赖库一并打包。

    修改后的代码中有错误,需要检查代码逻辑和语法错误。

    可以根据以上几个原因排查问题,找到解决方案。

    2023-04-24 07:54:41
    赞同 展开评论 打赏
  • 热爱开发

    在将修改后的 Flink JDBC Connector 部署到 Yarn 上时,如果不生效,可能有以下几个原因:

    未正确编译:部署前需要确保修改后的源码已正确编译并打包成可运行的 jar 包。

    路径错误:在提交作业时需要指定正确的 jar 包路径,可以通过参数 -yD 打印日志查看是否加载了修改后的 jar 包。

    依赖冲突:如果 Flink JDBC Connector 使用了一些与 Flink 不兼容的依赖库,可能会导致无法正常工作。可以尝试检查依赖库是否正确,并排除冲突依赖。

    配置错误:Flink JDBC Connector 的配置文件可能需要进行相应的修改才能生效,可以尝试检查配置是否正确。

    另外,可以尝试使用 Flink 提供的 Remote Debugging 功能进行调试,以定位具体问题所在。

    2023-04-23 18:07:28
    赞同 展开评论 打赏
  • 如果你修改了 Flink JDBC Connector 的源码,并在 YARN 集群上运行 Flink 应用程序时发现修改无效,可以尝试以下几个解决方案:

    1. 确认是否正确打包并上传了修改后的 JDBC Connector Jar 包。在构建 Jar 包时,需要将修改后的代码编译成 class 文件,并将其打包进包含 Flink JDBC Connector 依赖的 Jar 包中。确认 Jar 包正确后,将其上传到 YARN 集群中,并在提交 Flink 应用程序时指定 Jar 包的路径。

    2. 确认 Flink 集群的 Classpath 是否包含了修改后的 JDBC Connector Jar 包。在提交 Flink 应用程序时,需要确保 Flink 集群的 Classpath 中包含了包含 JDBC Connector Jar 包的路径。可以通过执行 flink run -h 命令来查看提交命令的参数和选项,特别是 --classpath--classpath-first 等参数。

    3. 确认是否正确设置了 Flink 应用程序的 Classpath。在提交 Flink 应用程序时,可以通过指定 --classpath 或者 --classpath-first 参数将需要的依赖 Jar 包添加到 Flink 应用程序的 Classpath 中。如果依赖 Jar 包不在本地目录中,可以通过 flink run 命令中的 --classpath 或者 --classpath-first 参数指定远程 Jar 包的路径。

    2023-04-23 17:41:51
    赞同 展开评论 打赏
滑动查看更多

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    深度学习+大数据 TensorFlow on Yarn 立即下载
    Docker on Yarn 微服务实践 立即下载
    深度学习+大数据-TensorFlow on Yarn 立即下载