spark 提交任務到yarn上執行
阿新 • • 發佈:2018-12-22
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,得到了兩個分割槽
以上