1. 程式人生 > >Spark spark-submit 提交的幾種模式

Spark spark-submit 提交的幾種模式

  • local 模式

  1. 程式碼
package com.imooc.spark.Test

import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SaveMode, SparkSession}

/**
  * 測試sparkContext 案例
  */
object TestOfSparkContext2 {


  def main(args: Array[String]): Unit = {
    //System.setProperty("hadoop.home.dir", "E:\\soft\\winutils\\hadoop-common-2.2.0-bin-master")
    val spark = SparkSession.builder()
      .appName("TestOfSparkContext2")
      .master("local[2]").getOrCreate()

    //反射的方式 RDD=>DF
    // reflection(spark)
    //程式設計的方式 RDD=>DF
    program(spark)
    spark.stop()
  }

  private def reflection(spark: SparkSession) = {
    val rdd = spark.sparkContext
      .textFile("file///home/hadoop/data/test-data-spark/emp-forSpark.txt")
      .map(w => w.split("\t"))

    import spark.implicits._
    val empDF = rdd.map(line =>
      EMP(line(0), line(1), line(2), line(3),
        line(4), line(5), line(6), line(7))).toDF()
    empDF.printSchema()
    empDF.show()
  }

  def program(spark: SparkSession) = {
    val infoRdd = spark.sparkContext
      .textFile("/home/hadoop/data/test-data-spark/emp-forSpark.txt")
      .map(w => w.split("\t")).map(line => Row(line(0), line(1), line(2), line(3), line(4), line(5), line(6), line(7)))


    val filedName = Array(StructField("empNo", StringType, true)
      , StructField("ename", StringType, true), StructField("job", StringType, true)
      , StructField("mgr", StringType, true), StructField("hireDate", StringType, true)
      , StructField("sal", StringType, true), StructField("comm", StringType, true)
      , StructField("deptNo", StringType, true))

    val schema = StructType(filedName)
    val empDf = spark.createDataFrame(infoRdd, schema)
    empDf.printSchema()
     empDf.show(false)

    //註冊臨時表
    empDf.createOrReplaceTempView("emp")
    val sqlDF = spark.sql("select ename,job,comm from emp")
   // sqlDF.printSchema()
    //sqlDF.show()
    /*empDf.write.format("json")
      .mode(SaveMode.Overwrite).save("E:///testData/empTable3")*/
    empDf.coalesce(1).write.format("json").mode(SaveMode.Overwrite)
      .partitionBy("deptno").save("/home/hadoop/app/spark-2.1.1-bin-2.6.0-cdh5.7.0/testData/emp-jsonTable")
  }

  case class EMP(empNo: String, empName: String, job: String, mgr: String, hiredate: String,
                 sal: String, comm: String, deptNo: String)

}

  1. 打包

在這裡插入圖片描述

  1. 提交

在$SPARK_HOME 下執行

./bin/spark-submit \
--class com.imooc.spark.Test.TestOfSparkContext2 \
--master local[2] \
/home/hadoop/data/test-jar/sql-1.0.jar

  1. 引數解釋

對empDf.write.format(“json”)
.mode(SaveMode.Overwrite).save(“E:///testData/empTable3”)*/
empDf.coalesce(1).write.format(“json”).mode(SaveMode.Overwrite)
.partitionBy(“deptno”).save("/home/hadoop/app/spark-2.1.1-bin-2.6.0-cdh5.7.0/testData/emp-jsonTable")中的引數解釋

write.format(“json”) 寫入檔案的格式
mode(SaveMode.Overwrite). 儲存檔案,如果檔案已經存在,則覆蓋.還有:Append(如果存在,則追加),ErrorIfExists(如果存在報錯,則退出)等)
empDf.coalesce(1) 分割槽的個數,如10,則在每個部門分割槽下被分成10個新分割槽
partitionBy(“deptno”). 指定儲存分割槽欄位
save("/home/hadoop/app/spark-2.1.1-bin-2.6.0-cdh5.7.0/testData/emp-jsonTable") 報錯檔案路徑.注意:如果是直接儲存到本地,file://path…;如果是儲存到HDFS下,則路徑是:hdfs:/ip:port+path;特別是如果是yarn模式提交,檔案路徑,直接寫hdfs上的路徑,且只能是hdfs上的路,如:/user/hadoop/…
  • yarn client模式提交

  1. 程式碼
package com.imooc.spark.Test

import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SaveMode, SparkSession}

/**
  * 測試sparkContext 案例
  */
object TestOfSparkContext2OnYarn {


  def main(args: Array[String]): Unit = {
    //System.setProperty("hadoop.home.dir", "E:\\soft\\winutils\\hadoop-common-2.2.0-bin-master")
    /*val spark = SparkSession.builder()
      .appName("TestOfSparkContext2OnYarn")
      .master("local[2]").getOrCreate()*/
    val path = "/user/hadoop/data/test-data-forSpark/emp-forSpark.txt"
    val spark = SparkSession.builder().getOrCreate()


    //反射的方式 RDD=>DF
    // reflection(spark,path)
    //程式設計的方式 RDD=>DF
    program(spark,path)
    spark.stop()
  }

  private def reflection(spark: SparkSession,path:String ) = {
    val rdd = spark.sparkContext
      .textFile(path)
      .map(w => w.split("\t"))

    import spark.implicits._
    val empDF = rdd.map(line =>
      EMP(line(0), line(1), line(2), line(3),
        line(4), line(5), line(6), line(7))).toDF()
    empDF.printSchema()
    empDF.show()
  }

  def program(spark: SparkSession,path:String) = {
    val infoRdd = spark.sparkContext
      .textFile(path)
      .map(w => w.split("\t")).map(line => Row(line(0), line(1), line(2), line(3), line(4), line(5), line(6), line(7)))


    val filedName = Array(StructField("empNo", StringType, true)
      , StructField("ename", StringType, true), StructField("job", StringType, true)
      , StructField("mgr", StringType, true), StructField("hireDate", StringType, true)
      , StructField("sal", StringType, true), StructField("comm", StringType, true)
      , StructField("deptNo", StringType, true))

    val schema = StructType(filedName)
    val empDf = spark.createDataFrame(infoRdd, schema)
    empDf.printSchema()
     empDf.show(false)

    //註冊臨時表
    empDf.createOrReplaceTempView("emp")
    val sqlDF = spark.sql("select ename,job,comm from emp")
   // sqlDF.printSchema()
    //sqlDF.show()
    /*empDf.write.format("json")
      .mode(SaveMode.Overwrite).save("E:///testData/empTable3")*/
    empDf.coalesce(1).write.format("json").mode(SaveMode.Overwrite)
      .partitionBy("deptno").save("hdfs://hadoop001:9000/user/hadoop/emp-spark-test/emp-jsonOnYarnTable")
  }

  case class EMP(empNo: String, empName: String, job: String, mgr: String, hiredate: String,
                 sal: String, comm: String, deptNo: String)

}

  1. 提交
./bin/spark-submit \
--class com.imooc.spark.Test.TestOfSparkContext2OnYarn \
--master yarn \
/home/hadoop/data/jar-test/sql-3.0-onYarn.jar

./bin/spark-submit \
--class com.imooc.spark.Test.TestOfSparkContext2OnYarn \
--master yarn \
--deploy-mode client \
/home/hadoop/data/jar-test/sql-3.0-onYarn.jar
注意:

spark-submit 提交jar包到yarn上的時候,資料輸入路徑,資料輸出路徑都必須是HDFS的路徑,否則報錯 :Input path does not exist

  1. 檢視
  • 日誌直接在控制檯輸出
    在這裡插入圖片描述
  1. 結果
[[email protected] ~]$ hadoop fs -ls /user/hadoop/emp-spark-test/emp-jsonOnYarnTable
18/11/20 17:42:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 5 items
-rw-r--r--   1 hadoop supergroup          0 2018-11-20 17:33 /user/hadoop/emp-spark-test/emp-jsonOnYarnTable/_SUCCESS
drwxr-xr-x   - hadoop supergroup          0 2018-11-20 17:33 /user/hadoop/emp-spark-test/emp-jsonOnYarnTable/deptno=10
drwxr-xr-x   - hadoop supergroup          0 2018-11-20 17:33 /user/hadoop/emp-spark-test/emp-jsonOnYarnTable/deptno=20
drwxr-xr-x   - hadoop supergroup          0 2018-11-20 17:33 /user/hadoop/emp-spark-test/emp-jsonOnYarnTable/deptno=30
drwxr-xr-x   - hadoop supergroup          0 2018-11-20 17:33 /user/hadoop/emp-spark-test/emp-jsonOnYarnTable/deptno=44
[[email protected] ~]$ 

注意
  • 本地提交:輸入輸出路檔案在本地寫法:file:///
  • 輸入輸出檔案在HDFS寫法:hdfs://ip:port/
  • 其中提交模式是yarn模式的時候,輸入輸出只能是在hdfs上操作
  • yarn cluster 模式

  1. 提交命令
sql-1.0-yarnCluster.jar
./bin/spark-submit \
--class com.imooc.spark.Test.TestOfSparkContext2OnYarn \
--master yarn-cluster \
/home/hadoop/data/jar-test/sql-3.0-onYarn.jar
  1. 檢視
  • 檢視輸出日誌需要在 yarn的日誌上檢視
    在這裡插入圖片描述
  • Spark on YARN 之 client 與cluster 模式區別
模式 區別
yarn-client Driver執行在Client端;Client請求container完成作業排程執行,client不能退出;日誌在控制檯輸出,方便檢視
yarn-cluster Driver執行在applicationMaster;Client一但提交作業就可以關掉,作業已經執行在yarn上;日誌在客戶端看不到,以為作業執行在yarn上,通過 yarn logs -applicationIdapplication_id 檢視呢
  • standalone 模式

  1. 程式碼

和local模式一樣和local模式一樣

  1. 提交

./bin/spark-submit
–class com.imooc.spark.Test.TestOfSparkContext2
–master spark://192.168.52.130:7077
–executor-memory 4G
–total-executor-cores 6
/home/hadoop/data/jar-test/sql-1.0-yarnCluster.jar

  • 三種模式比較

模式 簡介
local 開發使用
standalone Spark自帶,如果一個叢集是Standalone的話,需要在每臺機器上部署Spark
YARN 建議大家在生產上使用該模式,統一使用YARN對整個叢集作業(MR/Spark)的資源排程
Mesos
  • 提交引數詳解

引數 作用
–class jar包的包路徑,如:com.imooc.spark.Test.TestOfSparkContext2OnYarn
–master 1.local[k]:本地模式,設定k個core ;2.yarn模式(1)-master yarn \ ----deploy-mode yarn-client–master;(2) yarn \ ----deploy-mode yarn-cluster 注意:不寫----deploy-mode:預設是yarn-client模式;
執行jar包 3./home/hadoop/data/jar-test/sql-3.0-onYarn.jar 執行的jar包
–executor-memory 分配記憶體
–master local[8] 8個core
1000 1000個task

相關推薦

spark 環境搭建及模式測試

spark 環境搭建及幾種模式測試 spark安裝部署spark安裝前的環境準備 需要安裝jdk、scala、hadoop作為前提環境。 1、安裝jdk1.7 先解除安裝自帶的jdk,防止自帶的jdk和安裝的出現衝突。而且自帶的版本較低不能滿足現在軟體對jdk的要求。 使用

Spark spark-submit 提交模式

local 模式 程式碼 package com.imooc.spark.Test import org.apache.spark.sql.types.{StringType, StructField, StructType} import org

運行Spark程序的模式

etc 屏幕 角色 ast java_home enabled driver env ram 一. local 模式 -- 所有程序都運行在一個JVM中,主要用於開發時測試 無需開啟任何服務,可直接運行 ./bin/run-example 或 ./bin/spark-

spark模式的比較

在spark的學習中,spark一共有四種模式,分別是: spark基於local spark基於standalone spark基於yarn spark基於metsos   Standalone模式兩種提交任務方式 Standalone-cli

Spark Standalone與Spark on YARN的提交方式

  不多說,直接上乾貨! Spark Standalone的幾種提交方式 別忘了先啟動spark叢集!!! spark-shell用於除錯,spark-submit用於生產。 1.spark-shell client [[email protected] spark-1

Spark on yarn的兩模式 yarn-cluster 和 yarn-client

然而 技術 負責 blog 作業 mage 申請 .com contain 從深層次的含義講,yarn-cluster和yarn-client模式的區別其實就是Application Master進程的區別,yarn-cluster模式下,driver運行在AM(Appli

spark寫入mysql的方法,針對不同場景

方法一:各個欄位都是提前定好的 val prop = new java.util.Properties prop.setProperty("user", "root") prop.setProperty("password", "123456") df1.write.mode(SaveMode

檢視spark任務日誌的方式

    spark執行的任務往往通過web來檢視,但是,當執行的是sparkStreaming任務時,日誌往往會很大,web檢視並不方便,因此需要定位到伺服器上去看。下面將分別介紹兩種檢視driver端和executor端日誌的方式。一、web端日誌的檢視:下面是四個yarn

hybrid模式

訪問 andro 原生應用 需要 ble 依賴 綁定 內核 client native和web適合的場景 Native: 用戶體驗要求高 業務變動很小(如首頁) 性能要求高 Web: 業務變化頻繁(如廣告) 性能要求低 展

總結js面向對象調用的模式

跟著 模式 也會 name proto bject prot .proto 混合模式   一、工廠模式:類似於function func(A,B){ var obj=new Object(); obj.A=A; obj.B=B; return obj;}; var obt

JavaScript中創建對象的模式

-c aps lang mage pen lin round property mar 代碼如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <met

vim的模式&快捷鍵

後退 -h shell命令 識別 需要 刪除 .html 頁簽 空字符 vim的幾種模式&快捷鍵 2017年01月01日 14:05:24 閱讀數:3060 一.vim的模式 基本上vim可以分為三種模式:命令模式,插入模式和底行模式,其實vi

交易所系統有哪模式?交易系統開發,imToken錢包開發

易信 完成後 操作 愛好 數字 比例 線下 借貸 風險 交易所系統有哪幾種模式?交易系統開發,imToken錢包開發 交易系統有哪幾種模式? (1)OTC交易系統 OTC:是一套獨立於交易所外的線下購買數字資產的平臺,任何人都可以在該平臺上發布購買/出售廣告,購買/出售用戶

建立物件的模式

一般建立物件是用以下兩種方式 new object建立物件: var Person = new Object(); Person.name = "張三"; Person.age = "18"; Person.job = "123"; 或者,物件字面量的方式: var Person =

創建對象的模式

開發 組合 無法 只需要 toolbar 同名 工廠模式 但是 方式 一般創建對象是用以下兩種方式 new object創建對象: var Person = new Object(); Person.name = "張三"; Person.age = "18";

redis模式的部署(Windows下實現)

原文地址:https ://www.cnblogs.com/yu421/p/8081544.html <參考> http://www.cnblogs.com/ruiati/p/6374152.html 1.自行下載redis客戶端.redis官方不支援Windows系統,所以官網

vim的模式

Normal Mode 普通模式 功能:在這種模式下可以移動游標等。 進入:預設進入vim之後,處於這種模式。在其他模式下狂按ESC後進入此模式。 Visual Mode 可視模式 功能:在這種模式下可以選定一些字元、行、多列。 進入:在普通模式下,按v進入。 Insert Mode 插入模式

Atitit 單點登入實現模式架構圖 目錄 1. 因此要點也就以下兩個:儲存信任驗證信任 1 1.1. 共享cookie (最簡單 1 1.2. 通過 url帶token引數跳轉 1 1.3.

Atitit 單點登入實現幾種模式架構圖   目錄 1. 因此要點也就以下兩個:儲存信任驗證信任 1 1.1. 共享cookie (最簡單 1 1.2. 通過 url帶token引數跳轉 1 1.3. 頁面重定向(複雜 1 1.3.1. 父子應用重定向 2

(四)高德地圖之定位的模式

這一節主要實現的功能是地圖定位的幾種模式,包括展示、定位、追隨、旋轉、旋轉位置、跟隨不移動中心點、旋轉不移動中心點、旋轉位置不移動到中心點,我們根據實際需要來選擇用那種模式。下面還是主要從程式碼中來體現,主要部分有註釋。 還是先新建佈局檔案:activity_locationmodesour

DevOps--模式

目錄 模式一 模式二 模式三 本文摘抄自:DevOps的概念與實踐  模式一 敏捷開發模式  通常,在軟體開發專案中,開發會用完所有計劃的時間用於開發功能,這樣會導致無法充分解決IT運維的問題,這就是開發和IT運維以及次優結果之間的永恆的緊張關