一、對于spark程序只是用于默認的spark包的情況
直接點擊pcakage
將程序進行在linux當中進行發(fā)布
客戶端模式:測試
spark-submit --class? com.keduox.App \
--master yarn \
--deploy-mode client \
test_submit-1.0-SNAPSHOT.jar
1、 (在數(shù)據(jù)量很小的時候)速度快
2、 依賴于jvm進程來執(zhí)行的。所以不需要啟動hdfs、yarn、spark的。
集群模式:生產(chǎn)環(huán)境、正式環(huán)境
出現(xiàn)異常:Retrying connect to server: master/192.168.200.200:8032.
表示yarn沒有啟動:start-yarn.sh
java.net.ConnectException: Call From master/192.168.200.200 to? master:9000
表示hdfs沒有啟動:start-dfs.sh
發(fā)布之后出現(xiàn)錯誤:
yarn.ApplicationMaster: SparkContext did not initialize after? waiting for 100000 ms
將代碼中的setMaster(local[*])刪除掉--à不推薦這樣子使用
刪掉之后,重新打包是可以成功運行。
沒有成功的原因是:因為spark在執(zhí)行的時候,是采用分布的執(zhí)行,也就是每一個節(jié)點執(zhí)行的東西只是代表整個程序的一部分。代碼當中將輸出地寫成了file:///keduox/spark_out,看到的情況是一會成功,一會失敗。
建議使用方式:
如果在一個模塊當中有多個spark的程序代碼時,建立將setMaster的值設(shè)置在properties文件當中。因為我們會經(jīng)常在local和yarn之前進行切換操作。
new SparkConf().setMaster("yarn-cluster")
二、發(fā)布到cdh上
2.1cdh配置spark

2.2讓yarn與spark進行關(guān)聯(lián)
在yarn點當中點擊以下內(nèi)容

3、 改變spark任務的默認大小



重啟
三、將統(tǒng)計的結(jié)果放到y(tǒng)arn去運行:
3.1:直接package
java.sql.SQLException: No suitable driver 缺少mysql的包
如果使用的是通過mysql 的方式的話,將無法找到spark默認使用的驅(qū)動包。建議在map屬性當中加入:"driver" -> "com.mysql.jdbc.Driver"
java.lang.InstantiationException: org.apache.spark.sql.execution.datasources.jdbc.DriverWrapper
當我們需要有數(shù)據(jù),寫入到mysql的時候,也需要指定driver
val properties = new Properties()
properties.setProperty("driver","com.mysql.jdbc.Driver")
--------------------------------------------------------------------------
spark-submit --class com.keduox.HotCount \
--master yarn \
--deploy-mode cluster \
--jars /keduox/mysql-connector-java-5.1.38.jar \
hot_sales-1.0-SNAPSHOT.jar
3.2采用插件方式
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
? </plugin>
</plugins>
發(fā)布:
用默認方式打包的話,會將所有的maven中的包全打到jar當中,jar太大了。
可以在打包的時間,將spark、hadoop、hive的包給他去掉
在pom.xml文件當中,對于不需要打包的依賴中當入:
<scope>provided</scope> ---但是要特別注意:打包完了之后,還需要進行編碼的話,需要將這個scope去掉,不然代碼編譯不通過
3.3可以通過sc的方式加載包
? ? ? ? sc.addJar("")
3.4 idea提供的打包方式



END。。。
來源:成都科多大數(shù)據(jù)科技有限公司?