在local模式下的spark程序打包到集群上运行
一、前期準(zhǔn)備
前期的環(huán)境準(zhǔn)備,在Linux系統(tǒng)下要有Hadoop系統(tǒng),spark偽分布式或者分布式,具體的教程可以查閱我的這兩篇博客:
? ? ? ?Hadoop2.0偽分布式平臺環(huán)境搭建
? ? ? ?Spark2.4.0偽分布式環(huán)境搭建
然后在spark偽分布式的環(huán)境下必須出現(xiàn)如下八個節(jié)點才算spark環(huán)境搭建好。
然后再在本地windows系統(tǒng)下有一個簡單的詞頻統(tǒng)計程序。
import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.rdd.RDDobject ScalaSparkDemo {def main(args: Array[String]) {/*** 第一步:創(chuàng)建Spark的配置對象SparkConf,設(shè)置Spark程序的運行時的配置信息,* 例如說通過setMaster來設(shè)置程序要連接的Spark集群的Master的URL,* 如果設(shè)置為local,則代表Spark程序在本地運行,特別適合于機器配置條件非常差* (例如只有1G的內(nèi)存)的初學(xué)者*/val conf = new SparkConf() //創(chuàng)建SparkConf對象,由于全局只有一個SparkConf所以不需要工廠方法conf.setAppName("wow,my first spark app") //設(shè)置應(yīng)用程序的名稱,在程序的監(jiān)控界面可以看得到名稱//conf.setMaster("local") //此時程序在本地運行,不需要安裝Spark集群/*** 第二步:創(chuàng)建SparkContext對象* SparkContext是Spark程序所有功能的唯一入口,無論是采用Scala、Java、Python、R等都必須要有一個* SparkContext* SparkContext核心作用:初始化Spark應(yīng)用程序運行所需要的核心組件,包括DAGScheduler,TaskScheduler,SchedulerBacked,* 同時還會負責(zé)Spark程序往Master注冊程序等* SparkContext是整個Spark應(yīng)用程序中最為至關(guān)重要的一個對象*/val sc = new SparkContext(conf) //創(chuàng)建SpackContext對象,通過傳入SparkConf實例來定制Spark運行的具體參數(shù)的配置信息/*** 第三步:根據(jù)具體的數(shù)據(jù)來源(HDFS,HBase,Local,FileSystem,DB,S3)通過SparkContext來創(chuàng)建RDD* RDD的創(chuàng)建基本有三種方式,(1)根據(jù)外部的數(shù)據(jù)來源(例如HDFS)(2)根據(jù)Scala集合(3)由其它的RDD操作* 數(shù)據(jù)會被RDD劃分為成為一系列的Partitions,分配到每個Partition的數(shù)據(jù)屬于一個Task的處理范疇*///讀取本地文件并設(shè)置為一個Partition// val lines = sc.textFile("words.txt", 1) //第一個參數(shù)為為本地文件路徑,第二個參數(shù)minPartitions為最小并行度,這里設(shè)為1sc.setLogLevel("WARN")val lines = sc.parallelize(List("pandas","i like pandas"))//類型推斷 ,也可以寫下面方式// val lines : RDD[String] =sc.textFile("words.txt", 1)/*** 第四步:對初始的RDD進行Transformation級別的處理,例如map,filter等高階函數(shù)* 編程。來進行具體的數(shù)據(jù)計算* 第4.1步:將每一行的字符串拆分成單個的單詞*///對每一行的字符串進行單詞拆分并把所有行的結(jié)果通過flat合并成一個大的集合val words = lines.flatMap { line => line.split(" ") }/*** 第4.2步在單詞拆分的基礎(chǔ)上,對每個單詞實例計數(shù)為1,也就是word=>(word,1)tuple*/val pairs = words.map { word => (word, 1) }/*** 第4.3步在每個單詞實例計數(shù)為1的基礎(chǔ)之上統(tǒng)計每個單詞在文中出現(xiàn)的總次數(shù)*///對相同的key進行value的累加(包括local和Reduce級別的同時Reduce)val wordCounts = pairs.reduceByKey(_ + _)//打印結(jié)果wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2))//釋放資源sc.stop()} }二、導(dǎo)出jar包
這里注意詞頻統(tǒng)計程序的包名為test,類名為ScalaSparkDemo。
?
注意這里勾選要打包所依賴的一些文件。當(dāng)然可以選擇把整個工程打包。還要注意這里打包后的文件名為test.jar。
然后上傳到Ubuntu中,使用這個命令?bin/spark-submit --class test.ScalaSparkDemo --master local /home/xiaow/test.jar?? 即可運行。/home/xiaow/test.jar:指明此jar包在主節(jié)點上的位置。關(guān)于打包到集群的詳細命令,可以查閱我的這一篇博客:Spark學(xué)習(xí)之在集群上運行Spark
?
??
如此,搞定收工!!!
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaoyh/p/10822102.html
總結(jié)
以上是生活随笔為你收集整理的在local模式下的spark程序打包到集群上运行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《羊了个羊》小游戏爆火 通关率不到0.1
- 下一篇: 防火墙综合实验