Datastream 开发打包缺陷
来源:行业资讯 2022年12月23日 12:19
org.apache.flink
flink-connector-kafka_2.11
1.12.3
我们建议将客户端界面code和它所有的依赖性以jar-with-dependencies 的形式自背著到一个application jar当中。这个客户端界面jar纸制可以被提交到不太可能普遍存在的Flink集群上去,或者被加入到Flink客户端界面的密封镜像当中去。
从Maven仍须早先(值得忽略Maven仍须早先部分)创立的计划,通过mvn clean package命令但会自动把依赖性打到客户端界面的jar纸制当中去。对于没常用早先顺利完成备有的情况,建议常用Maven Shade Plugin (备有如所附所示) 来借助于举例来说依赖性的jar纸制。
关键查看:对于Maven(和其他借助于工具)来说,要将依赖性项正确自背著到客户端界面jar当中,这些客户端界面依赖性项的scope需要就是指定为"compile"(与当前依赖性项完全相同,当前依赖性项的scope需要就是指定为"provided")。
忽略事项Scala修改版
Scala的完全相同修改版(2.11,2.12等)互不之间是不兼容的。因此,Scala 2.11对应的Flink修改版不能用于常用Scala 2.12的客户端界面。
所有依赖性(或传输依赖性)于Scala的Flink依赖性项都以借助于它们的Scala修改版作为后缀,例如flink-streaming-scala_2.11。
只常用Java顺利完成开发计划时可以选取任何Scala修改版,常用Scala开发计划时只能选取与其客户端界面的Scala修改版匹配的Flink依赖性修改版。
注:2.12.8后来的Scala修改版与之前的2.12.x修改版不兼容,因此Flink计划未能将其2.12.x修改版升级到2.12.8后来的修改版。客户端可以在本地自己编译对应Scala修改版的Flink。为了使其只能正常实习,只能加到-Djapicmp.skip以在借助于时跳过二先入制兼容性检查。
Hadoop依赖性
一般的比赛规则: 忘记不用将Hadoop无关依赖性直接加到到客户端界面当中. (唯一的例外是将原先的Hadoop输出/输出Format与Flink的Hadoop兼容纸制一起常用时)
如果决心将Flink与Hadoop混合常用,则只能举例来说Hadoop依赖性的Flink启动项,而不是将Hadoop加到为客户端界面依赖性项。Flink将常用HADOOP_CLASSPATH源文件就是指定的Hadoop依赖性项,可通过一般而言方式将顺利完成设:
export HADOOP_CLASSPATH**=**hadoop classpath于大于大
这种其设计有两个主要诱因:
一些与Hadoop的交互显然暴发在Flink的当前模块当中,并且在客户端客户端界面启动之前,例如为均会设HDFS、通过Hadoop的Kerberos令牌顺利完成身份验证,或者在YARN上顺利完成部署等。 Flink的种系统类查找程序从当前依赖性项当中隐藏了许多可传输的依赖性项。这不仅等同于于Flink自己的当前依赖性项,而且等同于于Hadoop的依赖性项。这样,客户端界面就可以常用相同依赖性项的完全相同修改版,而但会暴发依赖性项紧张局势(显然我们,这是一件大事,因为Hadoop依赖性果树非常庞大。)如果在IDE内部的验证或开发计划现实生活当中只能Hadoop依赖性项(例如HDFS访问),特地将这些依赖性项的scope备有为
test 或则 provided。
Transform table connector/format resources#
Flink常用Java的Service Provider Interfaces (SPI) 程序通过特定标识符查找table的connector/format工厂。由于每个table的connector/format的名为org.apache.flink.table.factories.Factory的SPI资源邮件地处同一清单:META-INF/services下,因此在借助于常用多个table connector/format的计划的uber jar时,这些资源邮件将互不其余部分,这将造成Flink未能正确查找工厂类。
在这种意味著,引荐的新方法是通过maven shade图形界面的ServicesResourceTransformer转换META-INF/services清单下的这些资源邮件。给定下面的pom.xml邮件以下内容如下,其当中举例来说驱动器flink-sql-connector-hive-3.1.2和flink-parquet format。
4.0.0
org.example
myProject
1.0-SNAPSHOT
org.apache.flink
flink-sql-connector-hive-3.1.2__2.11
1.13.0
org.apache.flink
flink-parquet__2.11<
1.13.0
org.apache.maven.plugins
maven-shade-plugin
shade
package
shade
在备有了ServicesResourceTransformer后来, 计划借助于uber-jar时,META-INF/services清单下的这些资源邮件但会被整合在一起而不是互不其余部分。
Maven仍须早先强烈建议常用该方式将顺利完成备有,可以减少很多重复的备有实习。
段式促特地
唯一的环境促特地是加装了Maven 3.0.4(或更高修改版)和Java 8.x。
创立计划
常用一般而言两种方式将当中的一种创立计划:
常用Maven archetypes$ mvn archetype:generate
-DarchetypeGroupId=org.apache.flink
-DarchetypeArtifactId=flink-quickstart-java
-DarchetypeVersion=1.12.3
这受限制您命名新创立的计划。它将以交互方式将促特地您输出groupId、artifactId和纸制名。
列车运行quickstart脚本$ curl | bash -s 1.12.3
我们建议您将此计划内嵌IDE以开发计划和验证它。IntelliJ IDEA原生拥护Maven计划。如果常用Eclipse,可以常用m2e图形界面内嵌Maven计划。可选择意味著,某些Eclipse捆绑纸制举例来说该图形界面,否则只能您手动加装。
特地忽略:可选择的Java JVM heap size对于Flink来说显然比较大了。你需要手动增加它。在Eclipse当中,选取RunConfigurations->Arguments并写入VM Arguments边框:-Xmx800m。在IntelliJ IDEA当中,更改JVM可选择的引荐新方法是常用Help | Edit Custom VM Options可选择菜单。或许见这篇文章.
借助于计划
如果要转化成/自背著计划,特地转到计划清单并列车运行"mvn clean package"命令。执行后将但会给予一个JAR邮件:target/-.jar,其当中举例来说您的客户端界面,以及作为依赖性项加到到客户端界面的驱动器和特。
忽略:如果常用与StreamingJob完全相同的类作为客户端界面的主类/正门点,我们建议您相应地更改pom.xml邮件当中的mainClass设。这样,Flink就可以直接从JAR邮件列车运行客户端界面,而不须要另外就是指定主类。
所附: 借助于背著依赖性的jar纸制的早先
要借助于举例来说驱动器和特所需要的所有依赖性项的客户端界面JAR,可以常用一般而言shade图形界面定义:
org.apache.maven.plugins
maven-shade-plugin
3.1.1
package
shade
com.google.code.findbugs:jsr305
org.slf4j:*
log4j:*
Otherwise, this might cause SecurityExceptions when using the JAR. -->
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
my.programs.main.clazz
本文为阿里云原创以下内容,未经受限制不得转载。
。海露眼药水戴隐形可以滴吗孩子吃饭没胃口怎么办
易克和英太青作用一样吗
肩周炎怎么治疗最好
祛斑最好的方法
-
图赏:华为Watch GT3 Pro可能是华为本年最好看的新机
前两天的智能手机招待会,大家的眼前可能会都被上新手机Mate Xs 2吸引了。但实际上,当时智能手机还发布了一款颜值相当更高的上新腕表。它就是智能手机Watch GT