1. 程式人生 > >spark 提交任務到yarn上執行

spark 提交任務到yarn上執行

1、在idea上先寫好,自己的程式碼並進行測試,這裡貼一個很簡單的統計單詞個數的程式碼

package spark

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object WordCount {
  def main(args: Array[String]) {
    //1/建立sparkconf和spark上下文
    /**
      *
    A master URL must be set in your configuration
        An application name must be set in your configuration
        所有的配置檔案資訊,其實都是在sparkconf當中載入的,所以如果你要設定
        配置檔案的資訊的話,conf.set("key","value")
      */
    val conf = new SparkConf()
      //本地模式,* 會在執行期間檢查當前環境下還剩下多少cpu核心,佔滿
      //.setMaster("local[*]")
      //.setAppName("idea_start_wc")

    val sc = new SparkContext(conf)

    val coalesceNum = Integer.parseInt(conf.get("spark.app.coalesce"))

    val resultRdd: RDD[(String, Int)] = sc.textFile("hdfs://192.168.89.77:8020/spark/datas/test.txt")
      .flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _) //到這一步已經實現wc
      .map(t=>(-t._2,t._1)).sortByKey().map(t=>(t._2,-t._1)) //這一步做排序
      //repartition   
	  //coalesce
      //以上這兩個重分割槽的api有什麼區別?
      .coalesce(coalesceNum)

    //儲存
    resultRdd.saveAsTextFile(s"hdfs://192.168.89.77:8020/spark/sparkrdd_idea/wordcount_res${System.currentTimeMillis()}")

    //呼叫執行緒等待,為了方便去頁面上看結果資訊
    //程式終止(通過正常手段關閉程式)
    sc.stop()

  }
}

2、在本地測試無誤後,將程式碼打包,這裡有兩種打包方式,1是胖包,2是瘦包,如果石胖包則是將所有的依賴包,都打進這個包裡,有可能會報錯,則將META-INF下的幾個檔案刪除 

==>    zip -d <你的jar包名稱.jar> META-INF/*.RSA META-INF/*.DSA META-INF/*.SF  這個是對壓縮包裡的檔案進行刪除的命令

3、編寫,匯入的指令碼檔案 我的配置有限  如下

#!/usr/bin/env bash


bin/spark-submit \  
--master yarn \         你的master平臺
--name wordcount \       你的任務名稱
--deploy-mode client \    deploy-mode模式設定,不知道的百度下
--class spark.WordCount \  你編寫的類所在的位置
--driver-memory   1G  \     driver的記憶體分配
--driver-cores 1 \          driver的核心數
--executor-memory 1G \       每個executor的記憶體
--executor-cores 1 \         executor的核心數
--num-executors 1  \         executor個數
--conf spark.app.coalesce=2 \   我們程式碼裡面穿的引數的名字,也就是分割槽數
/opt/cdh/spark/datas/word_count.jar    我們jar包所在的位置

4、對此指令碼程式進行提交bin/spark-submit 命令提交,可以在yarn平臺看到我們提交的任務,以及我麼你的結果

這裡可以我麼那可以看到,是兩個檔案,雖然有一個為空檔案,但確實是我們傳進來的引數2,得到了兩個分割槽

以上