在local模式下的spark程序打包到集羣上運行 Hadoop2.0僞分佈式平臺環境搭建 Spark2.4.0僞分佈式環境搭建 Spark學習之在集羣上運行Spark

1、前期準備

  前期的環境準備,在Linux系統下要有Hadoop系統,spark僞分佈式或者分佈式,具體的教程能夠查閱個人這兩篇博客:html

       Hadoop2.0僞分佈式平臺環境搭建apache

       Spark2.4.0僞分佈式環境搭建編程

  而後在spark僞分佈式的環境下必須出現以下八個節點纔算spark環境搭建好。windows

  

  而後再在本地windows系統下有一個簡單的詞頻統計程序。app

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD

object ScalaSparkDemo {
  def main(args: Array[String]) {
    /**
     * 第一步:建立Spark的配置對象SparkConf,設置Spark程序的運行時的配置信息,
     * 例如說經過setMaster來設置程序要鏈接的Spark集羣的Master的URL,
     * 若是設置爲local,則表明Spark程序在本地運行,特別適合於機器配置條件很是差
     * (例如只有1G的內存)的初學者
     */
    val conf = new SparkConf() //建立SparkConf對象,因爲全局只有一個SparkConf因此不須要工廠方法
    conf.setAppName("wow,my first spark app") //設置應用程序的名稱,在程序的監控界面能夠看獲得名稱
    //conf.setMaster("local") //此時程序在本地運行,不須要安裝Spark集羣
    /**
     * 第二步:建立SparkContext對象
     * SparkContext是Spark程序全部功能的惟一入口,不管是採用Scala、Java、Python、R等都必需要有一個
     * SparkContext
     * SparkContext核心做用:初始化Spark應用程序運行所須要的核心組件,包括DAGScheduler,TaskScheduler,SchedulerBacked,
     * 同時還會負責Spark程序往Master註冊程序等
     * SparkContext是整個Spark應用程序中最爲相當重要的一個對象
     */
    val sc = new SparkContext(conf) //建立SpackContext對象,經過傳入SparkConf實例來定製Spark運行的具體參數的配置信息
    /**
     * 第三步:根據具體的數據來源(HDFS,HBase,Local,FileSystem,DB,S3)經過SparkContext來建立RDD
     * RDD的建立基本有三種方式,(1)根據外部的數據來源(例如HDFS)(2)根據Scala集合(3)由其它的RDD操做
     * 數據會被RDD劃分爲成爲一系列的Partitions,分配到每一個Partition的數據屬於一個Task的處理範疇
     */
    //讀取本地文件並設置爲一個Partition
    // val lines = sc.textFile("words.txt", 1) //第一個參數爲爲本地文件路徑,第二個參數minPartitions爲最小並行度,這裏設爲1
    sc.setLogLevel("WARN")
    val lines = sc.parallelize(List("pandas","i like pandas"))
    //類型推斷 ,也能夠寫下面方式
    // val lines : RDD[String] =sc.textFile("words.txt", 1)
    /**
     * 第四步:對初始的RDD進行Transformation級別的處理,例如map,filter等高階函數
     * 編程。來進行具體的數據計算
     * 第4.1步:將每一行的字符串拆分紅單個的單詞
     */
    //對每一行的字符串進行單詞拆分並把全部行的結果經過flat合併成一個大的集合
    val words = lines.flatMap { line => line.split(" ") }
    /**
     * 第4.2步在單詞拆分的基礎上,對每一個單詞實例計數爲1,也就是word=>(word,1)tuple
     */
    val pairs = words.map { word => (word, 1) }
    /**
     * 第4.3步在每一個單詞實例計數爲1的基礎之上統計每一個單詞在文中出現的總次數
     */
    //對相同的key進行value的累加(包括local和Reduce級別的同時Reduce)
    val wordCounts = pairs.reduceByKey(_ + _)
    //打印結果
    wordCounts.foreach(wordNumberPair => println(wordNumberPair._1 + ":" + wordNumberPair._2))
    //釋放資源
    sc.stop()
  }
}

2、導出jar包

  這裏注意詞頻統計程序的包名爲test,類名爲ScalaSparkDemo。分佈式

  

   

  注意這裏勾選要打包所依賴的一些文件。固然能夠選擇把整個工程打包。還要注意這裏打包後的文件名爲test.jar。函數

  

  而後上傳到Ubuntu中,使用這個命令 bin/spark-submit --class test.ScalaSparkDemo --master local /home/xiaow/test.jar   便可運行。/home/xiaow/test.jar:指明此jar包在主節點上的位置。關於打包到集羣的詳細命令,能夠查閱個人這一篇博客:Spark學習之在集羣上運行Sparkoop

   

      

  如此,搞定收工!!!post

相關文章
相關標籤/搜索