专栏首页earthchen的专栏解决 flink 本地执行和集群执行依赖问题
原创

解决 flink 本地执行和集群执行依赖问题

背景

flink 在本地开发和提交到集群时的依赖是不同的,本地因为需要执行,所以一些依赖在本地是需要的,在部署到集群中是不需要的。

maven 中有一个叫 profile 的东西,但由于我使用的是 gradle 中,并没有这个功能,所以需要另外想办法

过程

方案1

首先先尝试了一下在 gradle 中设置一个变量,然后在执行打包task 时去更新这个字段去选择相应的依赖

def prod=false

def conditionDependencies = [

 "org.apache.flink:flink-table:${flinkVersion}",

 "org.apache.flink:flink-table-api-java:${flinkVersion}",

 "org.apache.flink:flink-table-api-java-bridge\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-table-planner-blink\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-table-planner\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-clients\_${scalaBinaryVersion}:${flinkVersion}",

_//        "ch.qos.logback:logback-core:1.2.3",_

_//        "ch.qos.logback:logback-classic:1.2.3"_

]

dependencies {

 print("----当前prod=${prod}-------")

 if (prod) {

 compileOnly(conditionDependencies)

    } else {

 implementation(conditionDependencies)

    }

}

shadowJar {

        prod=true

 mergeServiceFiles()

}

按上述配置去执行时,发现不行,在执行shadowJar的 task 时,发现dependencies块会比这个 task 先执行,所以就还是会含有相关依赖

方案2

和方案1一样,主要是去解决 prod 变量的赋值顺序问题,只要我们能够在执行所有 task 之前让他获取到合适的值,此时就可以完成

那么,怎么让它可以执行任务时候就拿到呢?想到了环境变量,在执行 gradlew 命令时后面可以传参,然后在 gradle.build 中获取,就可以实现了

_// 使用传递的属性_

def prod = System.getProperty("prod") ?: false;

def conditionDependencies = [

 "org.apache.flink:flink-table:${flinkVersion}",

 "org.apache.flink:flink-table-api-java:${flinkVersion}",

 "org.apache.flink:flink-table-api-java-bridge\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-table-planner-blink\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-table-planner\_${scalaBinaryVersion}:${flinkVersion}",

 "org.apache.flink:flink-clients\_${scalaBinaryVersion}:${flinkVersion}",

_//        "ch.qos.logback:logback-core:1.2.3",_

_//        "ch.qos.logback:logback-classic:1.2.3"_

]

dependencies {

 print("----当前prod=${prod}-------")

 if (prod) {

 compileOnly(conditionDependencies)

    } else {

 implementation(conditionDependencies)

    }

}

shadowJar {

 mergeServiceFiles()

}

修改后,在本地执行main 方法时,就含有上述依赖,在打包时,执行下列命令传递 prod 参数

gradlew -Dprod=true :spendreport-table:shadowJar

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RedisTemplate执行lua脚本,集群模式下报错解决

    在使用spring的RedisTemplate执行lua脚本时,报错EvalSha is not supported in cluster environmen...

    stys35
  • Flink Client 实现原理与源码解析(保姆级教学)

    这次我们的目的是,在本地的 IDEA 中去 debug flink-clients 代码,然后远程提交给 flink standalone 集群上去执行,看一看...

    kk大数据
  • Flink从1.7到1.12版本升级汇总

    最进再看官方flink提供的视频教程,发现入门版本因为时间关系都是基于1.7.x讲解的. 在实际操作中跟1.12.x版本还是有差距的, 所以整理一下从1.7 版...

    王知无-import_bigdata
  • 实时计算框架:Flink集群搭建与运行机制

    Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。主要...

    知了一笑
  • Flink学习笔记(2) -- Flink部署

      https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.6.1/flink-1.6.1-bin-...

    挽风
  • Flink面试通关手册「160题升级版」

    主要是当Flink开启Checkpoint的时候,会往Source端插入一条barrir,然后这个barrir随着数据流向一直流动,当流入到一个算子的时候,这个...

    大数据真好玩
  • Flink Scala Shell:使用交互式编程环境学习和调试Flink

    当前最著名的交互式编程环境莫属Jupyter Notebook了,程序员可以启动一个交互的Session,在这Session中编写代码、执行程序、获取结果,所见...

    PP鲁
  • Flink面试通关手册

    2019 年是大数据实时计算领域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (内部的 Flink 分支版本)开源,大数据领域一夜间从 Spark ...

    大数据真好玩
  • Flink面试通关手册

    2019 年是大数据实时计算领域最不平凡的一年,2019 年 1 月阿里巴巴 Blink (内部的 Flink 分支版本)开源,大数据领域一夜间从 Spark ...

    王知无-import_bigdata
  • 大数据面试杀招 | Flink,大数据时代的“王者”

    近几年Flink发展得异常的火热,对Flink还不太了解的朋友可以先去看看博主的上一篇文章?《简单告诉你,为什么要学 Flink,Flink 优...

    大数据梦想家
  • 详解flink 1.11中的新部署模式-Application模式

    目前对于flink来说,生产环境一般有两个部署模式,一个是 session模式,一个是per job模式。

    大数据技术与应用实战
  • Flink on YARN 常见问题与排查思路

    杨弢(搏远),阿里巴巴计算平台事业部技术专家,Apache Hadoop Committer,目前专注于 YARN、Flink、YuniKorn 等开源项目的资...

    zhisheng
  • 基于Flink打造实时计算平台为企业赋能

    随着互联网技术的广泛使用,信息的实时性对业务的开展越来越重要,特别是业务的异常信息,没滞后一点带来的就是直接的经济损失。所以实时信息处理能力,越来越成为企业的重...

    王知无-import_bigdata
  • 收藏|Flink比Spark好在哪?

    Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台。和 Spark 类似,两者都希望提供一个统一功能的计算平台给用户,都在尝试建立一个统一的平台...

    数据社
  • Flink CDC我吃定了耶稣也留不住他!| Flink CDC线上问题小盘点

    如果你对Flink CDC 还没有什么概念,可以参考这里:Flink CDC 原理及生产实践。

    王知无-import_bigdata
  • [第十七周]批处理和流处理

    大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的...

    OrekiShiko
  • 「大数据分析」寻找数据优势:Spark和Flink终极对决

    当涉及到大数据时,流计算和它所带来的实时强大分析的重要性是不可避免的。此外,当涉及到流计算时,无法避免该领域最强大的两种数据处理引擎:Spark和Flink。

    首席架构师智库
  • Flink入门(三)——环境与部署

    flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性、高吞吐、低延迟等优势,本文简述flink在windows和linux中安装步骤,...

    实时计算
  • 这5种必知的大数据处理框架技术,你的项目到底应该使用其中的哪几种

    大数据是收集、整理、处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称。虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的...

    华章科技

扫码关注云+社区

领取腾讯云代金券