Spark學習筆記5:Spark集羣架構

  Spark的一大好處就是能夠經過增長機器數量並使用集羣模式運行,來擴展計算能力。Spark能夠在各類各樣的集羣管理器(Hadoop YARN , Apache Mesos , 還有Spark自帶的獨立集羣管理器)上運行,因此Spark應用既可以適應專用集羣,又能用於共享的雲計算環境。java

  • Spark運行時架構

Spark在分佈式環境中的架構以下圖:python

  在分佈式環境下,Spark集羣採用的是主/從結構。在Spark集羣,驅動器節點負責中央協調,調度各個分佈式工做節點。執行器節點是工做節點,做爲獨立的Java進行運行,能夠和大量的執行器節點進行通訊,做爲獨立的Java進程運行。驅動器節點和全部的執行器節點一塊兒被稱爲一個Spark應用。mysql

  Spark應用經過一個叫作集羣管理器的外部服務在集羣上的機器上啓動。Spark自動的集羣管理器稱爲獨立集羣管理器。Spark也能運行在Hadoop YARN和Apache Mesos兩大開源集羣管理器上。sql

  詳細說明驅動器節點和執行器節點的做用:apache

一、驅動器節點緩存

Spark驅動器是執行程序中main()方法的進程。它執行用戶編寫的用來建立SparkContext ,建立RDD,以及進行RDD轉化操做和行動操做的代碼。架構

驅動器進程在Spark應用中有如下兩個職責:app

  • 把用戶程序轉爲任務

Spark驅動器程序負責把用戶程序轉爲多個物理執行的單元,這些單元稱爲任務。任務是Spark中最小的工做單元,用戶程序一般要啓動成百上千的獨立任務。分佈式

  • 爲執行器節點調度任務

Spark驅動器在各執行器進程間協調任務的調度,驅動器進程對應用中全部的執行器節點有完整的記錄。每一個執行器節點表明一個可以處理任務和存儲RDD數據的進程。oop

二、執行器節點

Spark執行器節點是一種工做進程,負責在Spark做業中運行任務,任務間相互獨立。執行器節點在Spark應用啓動時啓動,伴隨着整個Spark應用的生命週期而存在。

執行器節點負責運行組成Spark應用的任務,並將結果返回給驅動器進程。

執行器節點經過自身的塊管理器爲用戶程序中要求緩存的RDD提供內存式存儲。

 

  • spark-submit部署應用

使用Spark提供的統一腳本spark-submit將應用提交到集羣管理器上。

spark-submit提供了各類選項能夠控制應用每次運行的各項細節。這些選項分爲兩類:第一類是調度信息,好比你但願爲做業申請的資源量。第二類是應用的運行時依賴,好比須要部署到全部工做節點的庫和文件。

spark-submit的通常格式:

  bin/spark-submit [options]  <app jar | python file>  [app options]

[options]是要傳給spark-submit的標記列表,運行spark-submit --help 能夠列出全部能夠接收的標記。

<app jar | python file>表示包含應用入口的JAR包或Python腳本。

[app options]是傳給應用的選項。

spark-submit一些經常使用的標記以下:

 

  • 使用Maven依賴
<properties>
        <scala.version>2.10.4</scala.version>
        <spark.version>1.6.3</spark.version>
        <hadoop.version>2.6.0</hadoop.version>
    </properties>

    <dependencies>
        <!--         scala        -->
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-compiler</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-reflect</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <!--         spark        -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.10</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.10</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.10</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <!--         hive        -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.10</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <!--       hadoop      -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>

       <!--    JDBC     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>
    </dependencies>
  •   Spark應用內與應用間調度

在調度多用戶集羣時,Spark主要依賴集羣管理器來在Saprk應用間共享資源。Spark內部的公平調度器會讓長期運行的應用定義調度任務的優先級隊列。

相關文章
相關標籤/搜索