這里以一個(gè)scala版本的word count 程序?yàn)槔?br/>①創(chuàng)建一個(gè)maven項(xiàng)目:
②填寫maven的GAV:
③填寫項(xiàng)目名稱:
④ 創(chuàng)建好 maven 項(xiàng)目后,點(diǎn)擊 Enable Auto-Import
⑤配置pom.xml文件:
UTF8
1.8
1.8
UTF-8
2.11.8
2.3.1
2.7.6
2.11
org.scala-lang
scala-library
${scala.version}
org.apache.spark
spark-core_2.11
${spark.version}
org.apache.spark
spark-sql_2.11
${spark.version}
org.apache.spark
spark-streaming_2.11
${spark.version}
org.apache.spark
spark-graphx_2.11
${spark.version}
org.apache.spark
spark-mllib_2.11
${spark.version}
org.apache.hadoop
hadoop-client
${hadoop.version}
編寫代碼:
object WordCount {
def main(args: Array[String]): Unit = {
//獲取集群入口
val conf: SparkConf = new SparkConf()
conf.setAppName("WordCount")
val sc = new SparkContext(conf)
//從 HDFS 中讀取文件
val lineRDD: RDD[String] = sc.textFile("hdfs://zzy/data/input/words.txt")
//做數(shù)據(jù)處理
val wordRDD: RDD[String] = lineRDD.flatMap(line=>line.split("\\s+"))
val wordAndCountRDD: RDD[(String, Int)] = wordRDD.map(word=>(word,1))
//將結(jié)果寫入到 HDFS 中
wordAndCountRDD.reduceByKey(_+_).saveAsTextFile("hdfs://zzy/data/output")
//關(guān)閉編程入口
sc.stop()
}
}
打jar包:
在pom.xml中加入相應(yīng)的插件:
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-jar-plugin
3.0.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
maven-site-plugin
3.7.1
maven-project-info-reports-plugin
3.0.0
然后:
將jar包上傳到集群中運(yùn)行:
spark-submit \
--class com.zy.scala.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 200M \
--executor-memory 200M \
--total-executor-cores 1 \
hdfs://zzy/data/jar/ScalaTest-1.0-SNAPSHOT.jar \
此時(shí)在yarn的web就能查看相應(yīng)的程序的運(yùn)行進(jìn)度。
這時(shí)候,程序總是異常的結(jié)束:
我就使用:
yarn logs -applicationId application_1522668922644_40211 查看了一下報(bào)錯(cuò)信息。
結(jié)果:not fount class :scala.WordCount.
然后我就在想是不是jar包出現(xiàn)了問題,我就打開了,之前上傳的jar包,果然根本找不到 我打jar的程序,只有一個(gè),META-INF,此時(shí) 我就百思不得不得解,然后由重新反復(fù)嘗試了很多次,還是解決不了。后來吃個(gè)飯回來,突然想到是不是maven不能將scala編寫的程序打成jar包,后來通過百度,發(fā)現(xiàn)了:
maven 默認(rèn)只編譯java 的文件,而不會(huì)編譯scala 文件。但是maven 提供了 能夠編譯scala 的類庫。
好心的博主:scala 在IDEA打jar包相關(guān)問題:https://blog.csdn.net/freecrystal_alex/article/details/78296851
然后 我修改了pom.xml文件:
http://down.51cto.com/data/2457588
按照上述的步驟,重新的向集群提交了一次任務(wù),結(jié)果不盡人意,又出錯(cuò)了:
但是這一次錯(cuò)誤和上次的不同(說明上一個(gè)問題已經(jīng)解決):
這才明白,原來是Driver進(jìn)程分配的內(nèi)存太小了,最少應(yīng)該大于450M,之后我又修改了 --driver-memory 512M --executor-memory 512M,重新提交任務(wù)。結(jié)果運(yùn)行成功!??!
注意:
這里使用的是yarn的任務(wù)調(diào)用,不是spark自帶的standalone,需要加入的參數(shù):
--master yarn
--deploy-mode cluster
這里的--deploy-mode,使用的是cluster集群模式,client是客戶端模式。
二者的區(qū)別是:client表示,在哪個(gè)節(jié)點(diǎn)提交,Driver就哪里啟動(dòng),而cluster模式表示當(dāng)將Driver放入到集群中啟動(dòng)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。