大数据任务部署流程

2020-05-18  本文已影响0人  ShiPF

本次主要讲解任务部署,从常用配置,到打包发布。再到任务线上运行,一套全部搞定。

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,在项目路径下新建日志目录,可以记录程序的运行。这个后面再更新。

上一篇下一篇

猜你喜欢

热点阅读