這里以一個scala版本的word count 程序為例:
①創(chuàng)建一個maven項目:
②填寫maven的GAV:
③填寫項目名稱:
④ 創(chuàng)建好 maven 項目后,點擊 Enable Auto-Import
⑤配置pom.xml文件:
成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的貴定網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
<properties>
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.11.8</scala.version>
<spark.version>2.3.1</spark.version>
<hadoop.version>2.7.6</hadoop.version>
<scala.compat.version>2.11</scala.compat.version>
</properties>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-graphx_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies>
編寫代碼:
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)的插件:
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
然后:
將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 \
此時在yarn的web就能查看相應(yīng)的程序的運(yùn)行進(jìn)度。
這時候,程序總是異常的結(jié)束:
我就使用:
yarn logs -applicationId application_1522668922644_40211查看了一下報錯信息。
結(jié)果:not fount class :scala.WordCount.
然后我就在想是不是jar包出現(xiàn)了問題,我就打開了,之前上傳的jar包,果然根本找不到 我打jar的程序,只有一個,META-INF,此時 我就百思不得不得解,然后由重新反復(fù)嘗試了很多次,還是解決不了。后來吃個飯回來,突然想到是不是maven不能將scala編寫的程序打成jar包,后來通過百度,發(fā)現(xiàn)了:
maven 默認(rèn)只編譯java 的文件,而不會編譯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é)果不盡人意,又出錯了:
但是這一次錯誤和上次的不同(說明上一個問題已經(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表示,在哪個節(jié)點提交,Driver就哪里啟動,而cluster模式表示當(dāng)將Driver放入到集群中啟動。
本文標(biāo)題:在IDEA中編寫spark程序
鏈接地址:http://muchs.cn/article18/jpdsgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)