美文网首页
大数据任务部署流程

大数据任务部署流程

作者: ShiPF | 来源:发表于2020-05-18 10:26 被阅读0次

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

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

    相关文章

      网友评论

          本文标题:大数据任务部署流程

          本文链接:https://www.haomeiwen.com/subject/alayohtx.html