程序打包
注意
1、打包前注意把本地模式配置去掉中符。
2、 Spark通過一系列的邏輯執(zhí)行計劃后編譯成物理執(zhí)行計劃,離線作業(yè)在Spark On yran 模式中 Spark 最終會編譯成MR作業(yè)妓美。
3、打包方式主要有兩種:只打包編譯源文件:
優(yōu)點:打包后生成的jar包空間小鲤孵,只有幾K壶栋。缺點:如果在引用第三方jar包后在提交作業(yè)的時候需要通過--jars 來指定除了Spark 和scala 以及jdk 之外的jar包 比如JDBC 驅(qū)動,json解析工具等普监。
打包所有依賴文件:
優(yōu)點:不需要而外指定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 已經(jīng)配置好了HADOOP環(huán)境變量 以及HADOOP_CONF_DIR
官網(wǎng)Spark 提交應用
配置Spark環(huán)境 (這里主要講的是Spark OnYarn 需要的配置)
1凯正、配置HADOOP_CONF_DIR
cd {Spark環(huán)境變量}/conf 目錄如:cd /home/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf
ls 查看是否用 spark-env.sh 文件如果沒有 執(zhí)行命令拷貝模板
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 腳本來直接運行你的提交應用 (由于我已經(jīng)配置好spark 環(huán)境變量所有可以直接用 spark-submit,不需要指定目錄)
vi user_stat.sh 內(nèi)容如下
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 內(nèi)容如下
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/
參數(shù)說明:
--class 指定main方法所在的class
--name 指定appName名稱將體現(xiàn)在yarn上面
--master yarn yarn模式提交spark
--executor-memory 1G 執(zhí)行內(nèi)存
--num-executors 1 執(zhí)行器個數(shù)
--files 指定程序加載的文件,這個類似于classPATH 下的配置文件指定
home/lib/app.jar 指定要運行的jar包
hdfs://hadoop001:8020/mbd/user/log/user_log.csv 程序入?yún)?這里是日志文件的目錄廊散。
測試數(shù)據(jù)說明
1桑滩、測試數(shù)據(jù)存放在hdfs 上面。
2允睹、hsfs 可能使用的命令:
創(chuàng)建目錄 : ./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