问题
大家使用Maven编译Spark程序打包可能会遇到下边的情况:
打一个jar包花费长达3分钟的时间
一个jar包的体积200多MB,如果依赖多可能会更大
再加上公司这种佛系网络,只能喝喝茶,谈谈人生与理想了
解决方案
我们可以使用下列步骤来解决:
- 在HDFS创建一个目录来缓存程序依赖的jar包, 这里要注意权限问题,保证该目录下的文件可以正常读取
hadoop fs -mkdir /user/spark/spark-libs
- 将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
- 配置Spark jar HDFS路径,Apache版本通过修改spark-defalults.conf 设置:
spark.yarn.jars=hdfs://dn15:9000/user/spark/spark-libs/
分发配置来完成,CDH版本修改下列配置即可
- 修改pom.xml文件,所有依赖全部添加provided属性
- 使用以下命令行方式快捷打包,需要配置Maven环境变量,也可通点击方式完成
最终结果
打包时间43s
jar包大小275KB,上传时间就不用说了
注:
- 后续引入新的依赖需要将相应的jar包上传到 /user/spark/spark-libs上,否则会找不到对应的jar包
- 也可以使用sbt进行打包
- 记得点赞哦