Flink实践-搭建Flink项目
讲述怎么搭建一个Flink的项目,一开始怎么安装环境。开始Flink开发之旅。
准备
需要下载的文件有sbt,Eclipse,以及插件的网址。
sbt设置
sbt的作用与maven一样,这里不做讲述,可以从sbt官网获取更多信息。下面讲述怎么安装sbt,以及验证sbt安装成功与否。
首先,必须确保开发环境的版本一致,由于开发环境涉及其他开源框架,这里统一采用了sbt-0.13.6版本。
下载sbt-launch.jar,并把它放置在/bin/目录下;然后创建/bin/sbt文件,更改其模式为755,另外填写如下配置到sbt文件里:
1 | SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -Dsbt.override.build.repos=true" |
然后,是设置库,即sbt构建项目时从何处查找库,一般按照本地优先,然后是公共库,以及特殊库的顺序设置。1
2
3
4
5
6
7
8在$HOME/.sbt/repositories文件里填入
[repositories]
local
my-maven-snapshots:https://repository.apache.org/content/repositories/snapshots/
my-sbt-releases:https://repository.apache.org/content/repositories/releases/
my-sbt-public:https://repository.apache.org/content/repositories/public/
my-maven-public:http://repo.maven.apache.org/maven2/
其他库亦可添加。
最后,验证安装是否成功,在命令行输入sbt –version或者sbt sbt-version,出现sbt版本即成功安装。
另外,sbt下载的包,均在$HOME/.ivy2/cache目录下。
Eclipse插件
开发环境用的是Eclipse,在其中安装scala的插件,打开eclipse点击help下的install new software,然后,填写名字和网站,选择对应的版本,网址信息查找,按照步骤完成安装。
sbt使用生产项目
使用sbt构建项目有多种方法,因为sbt下载依赖的包可以很多方式是设置,下面采取的是一种简单的方式。把各个模块当成是小项目进行生成。
sbt构建项目所需的目录结果和内容,
1 | 大目录,项目名称(英文小写) |
把上述文件建好后,在对应的文件中添加如下信息,
plugins.sbt
1 | addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0") |
assembly.sbt
1 | addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0") |
上述两个文件如需添加多个,记得两行之间用一个空行隔开。
最关键是build.sbt文件,是项目生成的最重要的文件,其编辑的格式如下。
1 | lazy val commonSettings = Seq( |
构建的解析,
1,build.sbt里编辑,具体信息可以查找sbt官网获得更多信息,这里提供几个快捷经验,%%会在对应包自动加上scala的版本,比如加上_2.11或者_2.10;
2,当你不知道某个包的版本号时,可以从maven的开源库中找存在的版本;
3,provided是在打包时不用加载其中,而使用运行集群中的包,或者提交运行时带上的包;为了减少打包的大小,对通用的包可以使用集群的;为了确保程序运行不报错,建议都带上,即去除provided.
4,对于dependsOn的使用,具有传递性,所以不必要把所有的依赖都写上,可以根据传递依赖选择;
5,在sbt生成项目时,用sbt eclipse命令,会很慢是正常的,最好能连vpn,国外网址来加速,请等待,若出现失败,请根据提示定位哪个包下载失败,或者重新sbt eclipse,多次运行;
6,单个子项目中,独立添加库,如下例子,单独添加了下载amidsttoolbox的库源,
1 | .settings( |
7,使用sbt可以打包,即sbt projectName/assembly,另在sbt构建项目下,可以设置过滤不要的包,减少打包后的jar大小,具体设置如下:1
2
3
4
5
6
7
8
9
10.settings(
assemblyExcludedJars in assembly := {
val cp = (fullClasspath in assembly).value
cp filter { j =>
j.data.getName =='****.jar'||
j.data.getName.contains("***")||
j.data.getName.startsWith("***")
}
}
)
sbt的项目中使用的一些作用,比如assemblyExcludedJars,assemblyMergeStrategy等,可以从此网站参考;注意的是,如果不知道去除哪些包,可以起初不去除任何包的情况下打包,把记录copy下来,1
sbt projectName/assembly > assemblyJar.txt
然后,在文件assemblyJar.txt中查看include的包有哪些,在确认去除哪些,并且parquet前缀的包记得一定打进去。