大数据任务部署流程
本次主要讲解任务部署,从常用配置,到打包发布。再到任务线上运行,一套全部搞定。
1. 实例代码
新建一个项目,大部分时间需要依赖外部的jar包,但是在打包时候如果将所有依赖一起打包,最终的结果会很大,在每次上传服务器和任务修改部署的时候都比较麻烦。这种方式我们一般不会采用。而是使用单独的依赖包上传。有新增依赖直接新增即可。另一种情况是我们根据线上和测试两套配置文件进行发布,将配置信息放在包外面,可以在修改配置的时候不需要重新打包。这样会降低任务的维护成本。
我们看一下例子。首先看下我的目录结构
项目中读取配置文件,使用第三方的hutool包,代码非常简单
package com.xx.cn;
import cn.hutool.setting.dialect.Props;
public class HutoolTest {
public static void main(String[] args) {
String path = args[0];
Props props = new Props(path);
String path1 = props.getStr("path");
System.out.println("=============="+path1+"==========");
}
}
2. 打包
代码写完之后是打包,我们看下打包的pom文件信息,执行完成后,依赖jar包会放在项目路径下的lib目录中。第一次需要上传所有依赖。后面如果写的代码有新增依赖,直接把新增依赖上传的服务器即可。再执行自己开发的jar包时候,我们只需要指定依赖包的路径即可。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xx.cn</groupId>
<artifactId>Flink_Learn</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mainClass>HutoolTest</mainClass>
<hotool.version>5.3.2</hotool.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-cron</artifactId>
<version>${hotool.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--指定程序主类入口的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${groupId}.${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!--指定依赖jar包的信息插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<!--执行依赖再target目录下的lib文件夹放所有的依赖-->
<configuration>
<outputDirectory>${project.basedir}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
在Terminal执行 mvn clean package 即可完成打包。打包后在项目目录下新增了target目录,在这个目录下会有(项目名.jar的文件)
3. 任务部署
在服务器新建项目同名文件夹,子目录结构 bin放启动脚本 conf放配置文件,结构和IDEA中conf结构项目,lib目录下方依赖文件。 将IDEA中的对应文件上传。
编写运行程序的脚本run.sh,这里编写脚本主要是为了满足多人协作开发的通用项目,简化在线运行命令。同时可以修改运行脚本,执行spark程序或者Flink程序。脚本如下
#project 执行jar文件脚本
#author xx
#date 2020-05-18
#参数校验
arglen=$#
if [ $arglen -le 1 ]
then
echo "useage run.sh [runname] [runmode prd | prev]"
exit;
fi
runname=$1
runmode=$2
echo "============${runname}==========${runmode}"
case "$runmode" in
prev)
true
;;
prd)
true
;;
*)
echo "runmode must in [prd | prev]"
exit;
;;
esac
# 设置依赖目录和配置文件目录
cd ..
basDir="`pwd`"
cd bin
propFile=
libDir=
case "$runname" in
hutoolTest)
propFile=$basDir"/conf/$runmode/hutoolTest-$runmode.properties"
libDir=$basDir"/lib"
;;
## 添加新项目,需要在这里添加一个case when 语句,执行自己的配置文件名称即可
esac
echo "java -Djava.ext.dirs=$libDir -jar Flink_Learn-1.0-SNAPSHOT.jar $propFile"
java -Djava.ext.dirs=$libDir -jar Flink_Learn-1.0-SNAPSHOT.jar $propFile
最后将自己编写的jar包放到bin目录下,在bin目录下执行命令,执行程序加载文件的选项和运行模式
./run.sh hutoolTest prev
到这里,部署完成。还有需要完善的地方,在加载日志文件,需要引入SLF4J,在项目路径下新建日志目录,可以记录程序的运行。这个后面再更新。