大數據 - Spark開發環境(IDEA)

Spark運行模式

本地運行模式 (單機)

       該模式被稱爲Local[N]模式,是用單機的多個線程來模擬Spark分佈式計算,通常用來驗證開發出來的應用程序邏輯上有沒有問題。
       運行該模式非常簡單,只需要把Spark的安裝包解壓後,改一些常用的配置即可使用,而不用啓動Spark的Master、Worker守護進程( 只有集羣的Standalone方式時,才需要這兩個角色),也不用啓動Hadoop的各服務(除非你要用到HDFS),這是和其他模式的區別哦,要記住才能理解。
spark-submit 和 spark-submit --master local 效果是一樣的
       單機模擬集羣,這種運行模式和Local[N]很像,不同的是,它會在單機啓動多個進程來模擬集羣下的分佈式場景,而不像Local[N]這種多個線程只能在一個進程下委屈求全的共享資源。通常也是用來驗證開發出來的應用程序邏輯上有沒有問題,或者想使用Spark的計算框架而沒有太多資源。
       用法是:提交應用程序時使用local-cluster[x,y,z]參數:x代表要生成的executor數,y和z分別代表每個executor所擁有的core和memory數。
spark-submit --master local-cluster[2, 3, 1024]
(同理:spark-shell --master local-cluster[2, 3, 1024]用法也是一樣的

Spark自帶Cluster Manager的Standalone Client模式(集羣)

啓動方式
       master sbin/start-master.sh -h master-hostname
       slave sbin/start-slave.sh spark:master-hostname:端口
執行命令
       spark-submit --master spark://hadoop1:7077
       和單機運行的模式不同,這裏必須在執行應用程序前,先啓動Spark的Master和Worker守護進程。
代表着會在所有有Worker進程的節點上啓動Executor來執行應用程序,此時產生的JVM進程如下:(非master節點,除了沒有Master、SparkSubmit,其他進程都一樣)

基於YARN的Resource Manager的Client模式(集羣)

       現在大部分環境都是Spark跑在Hadoop集羣中,所以爲了做到資源能夠均衡調度,會使用YARN來做爲Spark的Cluster Manager,來爲Spark的應用程序分配資源。
       在執行Spark應用程序前,要啓動Hadoop的各種服務。由於已經有了資源管理器,所以不需要啓動Spark的Master、Worker守護進程。可已理解爲使用了hadoop的yarn來管理Spark的工作節點
執行命令spark-submit --master yarn

IDEA開發環境

       IDEA安裝scala插件
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
       下載sacla2.11.12,msi安裝包會自動配置環境變量 https://www.scala-lang.org/download/all.html
在這裏插入圖片描述
       創建項目,這裏因爲習慣使用maven的方式,也可以使用SBT。
在這裏插入圖片描述
       添加Scala SDK
在這裏插入圖片描述
       因爲IDEA的maven方式會自動設置scala的版本,需要修改pom.xml對應的scala版本和添加Spark依賴包

  <properties>
    <scala.version>2.11.2</scala.version>
  </properties>
 <dependency>
   <groupId>org.apache.spark</groupId>
   <artifactId>spark-core_2.11</artifactId>
   <version>2.4.0</version>
 </dependency>

       創建SparkDemo對象
在這裏插入圖片描述

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
object SparkDemo {
  def main(args: Array[String]) {
    //待處理的文件
    // 創建目錄 hadoop fs -mkdir -p spark_demo/input/ hadoop fs -mkdir -p spark_demo/input/
    // 上傳linux本地文件到hdfs
    val testFile = "hdfs://hadoop1:9000/spark_demo/input/words.txt"
    val conf = new SparkConf().setAppName("SparkDemo Application")
      .setMaster("local")
      //遠程調試spark standalone集羣
      //.setJars(List("E:\\OneDrive\\study\\spark\\out\\artifacts\\spark_jar\\spark.jar")).setMaster("spark://hadoop1:7077")
    val sc = new SparkContext(conf)
    val rdd = sc.textFile(testFile)
    //處理之後文件路徑
    val wordcount = rdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1))
    wordcount.saveAsTextFile( "hdfs://hadoop1:9000/spark_demo/out/"+System.currentTimeMillis())
    sc.stop()
  }
}

       上傳待處理的文檔到hdfs。

[hadoop@hadoop1 ~]$ vi /home/hadoop/words.txt

       隨便輸入幾個單詞保存退出。

[hadoop@hadoop1 ~]$ hadoop fs -put /home/hadoop/words.txt /spark_demo/input/

       代碼完成之後,右鍵選擇run “SparkApp”,運行程序進行功能測試。
       如遇到程序報錯java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries,這是因爲windows環境變量不兼容的原因。
       解決辦法:
       下載winutils地址https://github.com/srccodes/hadoop-common-2.2.0-bin下載解壓
       複製winutils.exe winutils.pdb到之前配置好的hadoop/bin目錄下
       目錄 http://hadoop1:50070/explorer.html 查看輸出結果
在這裏插入圖片描述

用spark-submit方式

       打包SparkApp程序:File—>preject structure —>from modules with dependencies:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
       可以看到spark.jar編譯打包在項目out文件,然後上傳spark.jar到/home/hadoop/下,用spark-submit方式測試jar包:

[hadoop@hadoop1 ~]$ cd /app/hadoop/spark-2.4.0-bin-hadoop2.7/
[hadoop@hadoop1 spark-2.4.0-bin-hadoop2.7]$ bin/spark-submit  --master yarn --deploy-mode client  /home/hadoop/spark.jar

遠程調試spark standalone集羣

       啓動spark standalone集羣模式

[hadoop@hadoop1 spark-2.4.0-bin-hadoop2.7]$ cd sbin/./start-all.sh
[hadoop@hadoop1 sbin]$ ./start-all.sh

       將SparkDemo中的

  val conf = new SparkConf().setAppName("SparkDemo Application")
  .setMaster("local")

        改成

 val conf = new SparkConf().setAppName("SparkDemo Application")
.setJars(List("E:\\OneDrive\\study\\spark\\out\\artifacts\\spark_jar\\spark.jar")).setMaster("spark://hadoop1:7077")

       Github地址:https://github.com/lyhkmm/spark-demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章