程序打包
注意
1、打包前注意把本地模式配置去掉。
2、 Spark通过一系列的逻辑执行计划后编译成物理执行计划,离线作业在Spark On yran 模式中 Spark 最终会编译成MR作业。
3、打包方式主要有两种:只打包编译源文件:
优点:打包后生成的jar包空间小,只有几K。缺点:如果在引用第三方jar包后在提交作业的时候需要通过--jars 来指定除了Spark 和scala 以及jdk 之外的jar包 比如JDBC 驱动,json解析工具等。
打包所有依赖文件:
优点:不需要而外指定jar包。缺点:生成的jar文件过大一般100M左右
maven插件
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass></mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
修改源码(构建Session 不指定Local模式)
val session = SparkSession.builder().getOrCreate()
打包编译命令
mvn assembly:assembly
把程序拷贝有服务器
原则上来说,一般服务器上的Spark 已经配置好了HADOOP环境变量 以及HADOOP_CONF_DIR
官网Spark 提交应用
配置Spark环境 (这里主要讲的是Spark OnYarn 需要的配置)
1、配置HADOOP_CONF_DIR
cd {Spark环境变量}/conf 目录如:cd /home/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf
ls 查看是否用 spark-env.sh 文件如果没有 执行命令拷贝模板
cp spark-env.sh.template spark-env.sh
所以我们需要配置HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
vi spark-env.sh 并添加 HADOOP_CONF_DIR=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop2、编写shell 脚本来直接运行你的提交应用 (由于我已经配置好spark 环境变量所有可以直接用 spark-submit,不需要指定目录)
vi user_stat.sh 内容如下
spark-submit \
--class cn.harsons.mbd.UserStatSaveApp \
--name UserStatSaveApp \
--master yarn \
--executor-memory 1G \
--num-executors 1 \
--files /home/lib/config/ipDatabase.csv,/home/lib/config/ipRegion.xlsx \
/home/lib/app.jar \
hdfs://hadoop001:8020/mbd/user/log/user_log.csv
vi user_stat_hdfs.sh 内容如下
spark-submit \
--class cn.harsons.mbd.UserLogStatApp \
--name UserLogStatApp \
--master yarn \
--executor-memory 1G \
--num-executors 1 \
--files /home/lib/config/ipDatabase.csv,/home/lib/config/ipRegion.xlsx \
/home/lib/app.jar \
hdfs://hadoop001:8020/mbd/user/log/user_log.csv hdfs://hadoop001:8020/mbd/user/clean/log/
参数说明:
--class 指定main方法所在的class
--name 指定appName名称将体现在yarn上面
--master yarn yarn模式提交spark
--executor-memory 1G 执行内存
--num-executors 1 执行器个数
--files 指定程序加载的文件,这个类似于classPATH 下的配置文件指定
home/lib/app.jar 指定要运行的jar包
hdfs://hadoop001:8020/mbd/user/log/user_log.csv 程序入参,这里是日志文件的目录。
测试数据说明
1、测试数据存放在hdfs 上面。
2、hsfs 可能使用的命令:
创建目录 : ./bin/hadoop fs -mkdir -p /mbd/user/log
加载文件到hdfs : ./bin/hadoop fs -appendToFile /home/lib/config/user_log.csv /mbd/user/log/user_log.csv