Maven编译Spark程序jar包体积大,上传时间长的完美解决方案

时间:2024-03-28 19:27:56

问题

大家使用Maven编译Spark程序打包可能会遇到下边的情况:
Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
打一个jar包花费长达3分钟的时间
Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
一个jar包的体积200多MB,如果依赖多可能会更大
Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
再加上公司这种佛系网络,只能喝喝茶,谈谈人生与理想了

解决方案

我们可以使用下列步骤来解决:

  1. 在HDFS创建一个目录来缓存程序依赖的jar包, 这里要注意权限问题,保证该目录下的文件可以正常读取

hadoop fs -mkdir /user/spark/spark-libs

  1. 将Spark相关的jar包以及开发可能会用到的jar包全部上传到该目录,我这里是CDH,本身已经把jar做了整合,如果是Apache版本,大家可到各Hadoop各组件安装目录下上传相关jar包到该目录

hadoop fs -put -f /opt/cloudera/parcels/CDH-5.13.2-1.cdh5.13.2.p0.3/jars/* /user/spark/spark-libs

  1. 配置Spark jar HDFS路径,Apache版本通过修改spark-defalults.conf 设置:
    spark.yarn.jars=hdfs://dn15:9000/user/spark/spark-libs/
    分发配置来完成,CDH版本修改下列配置即可
    Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
  2. 修改pom.xml文件,所有依赖全部添加provided属性
    Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
  3. 使用以下命令行方式快捷打包,需要配置Maven环境变量,也可通点击方式完成
    Maven编译Spark程序jar包体积大,上传时间长的完美解决方案

最终结果

Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
打包时间43s
Maven编译Spark程序jar包体积大,上传时间长的完美解决方案
jar包大小275KB,上传时间就不用说了

注:

  1. 后续引入新的依赖需要将相应的jar包上传到 /user/spark/spark-libs上,否则会找不到对应的jar包
  2. 也可以使用sbt进行打包
  3. 记得点赞哦