Hive udf 或者 spark maven打包问题


正常打包maven pom配置如下

<properties>
    <project.build.sourceEncoding>UTF8project.build.sourceEncoding>
    <hive.version>1.2.1hive.version>
properties>

<dependencies>
    
    <dependency>
        <groupId>org.apache.hivegroupId>
        <artifactId>hive-execartifactId>
        <version>${hive.version}version>
        provided
    dependency>

    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>fastjsonartifactId>
        <version>1.2.79version>
    dependency>

dependencies>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-pluginartifactId>
            <version>2.3.2version>
            <configuration>
                <source>1.8source>
                <target>1.8target>
            configuration>
        plugin>
        <plugin>
            <artifactId>maven-assembly-pluginartifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependenciesdescriptorRef>
                descriptorRefs>
            configuration>
            <executions>
                <execution>
                    <id>make-assemblyid>
                    <phase>packagephase>
                    <goals>
                        <goal>singlegoal>
                    goals>
                execution>
            executions>
        plugin>
    plugins>
build>
如上 采用maven package打包的时候,会生成 俩个文件,其中 第一个 是idea自己打包出来的,不带任何第三方依赖,只有本身项目代码文件。 而第二个是maven插件打出来的, 如果 上面 hive-exec 依赖不加 provided这个属性,那么maven会将这些依赖打到生成的jar包里面,虽然生成的jar包体积变大了 ,但是在执行的时候缺提示找不到文件不好使,怀疑是因为目标机器存在hive的环境,所以我们将scope属性设置为provided,这样打包就不会包含了, 但是第三方的比如 fastjson 就不用加了,因为需要将它一起打入到jar包里面,否则会出现class not found问题,并且即使将fastjson的包放到hive目录的lib目录下面,依然会有时候提示找不到class的问题,所以最后测试 最稳妥方法就是将第三方依赖直接打入到jar 中就可以。   但是 spark的jar包全部打入进去就没事,不用设置spark相关依赖为provided,具体我也不知道怎么回事,反正以后注意如果目标机器存在相关自带依赖,尽量设置provided