1. 程式人生 > 其它 >Spark獨立叢集(瞭解即可)、Spark如何在Yarn上執行

Spark獨立叢集(瞭解即可)、Spark如何在Yarn上執行

Spark獨立叢集(瞭解即可)、Spark如何在Yarn上執行、

目錄

叢集模式

這裡僅僅只是記錄一下 Spark Standalone -- 獨立叢集模式 如何搭建

在公司一般不適用standalone模式,因為公司一般已經有yarn 不需要搞兩個資源管理框架

所以不需要搭建

Standalone 架構圖

Standalone 的搭建

1、上傳、解壓、重新命名

cd /usr/local/module

tar -zxvf /usr/local/module/spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/

mv spark-2.4.5-bin-hadoop2.7 spark-2.4.5

2、配置環境變數

vim /etc/profile

export SPARK_HOME=/usr/local/soft/spark-2.4.5

export PATH=$PATH:$SPARK_HOME/bin

source /etc/profile

3、修改配置檔案 conf

cd /usr/local/soft/spark-2.4.5/conf

cp spark-env.sh.template spark-env.sh

#增加配置 -- spark-env.sh檔案
export SPARK_MASTER_IP=master
export SPARK_MASTER_PORT=7077

export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=2g
export JAVA_HOME=/usr/local/soft/jdk1.8.0_171
-------------------------------------------------
cp slaves.template slaves

#新增 -- slaves檔案
node1
node2

4、同步到其他節點

scp -r spark-2.4.5 node1:`pwd`
scp -r spark-2.4.5 node2:`pwd`

5、啟動、關閉

啟動、停止 叢集,在master中執行

cd /usr/local/soft/spark-2.4.5/sbin

# 啟動
./start-all.sh	
# 關閉
./stop-all.sh	

訪問 spark web 介面

http://master:8080/

Spark 提交任務的兩種模式

需要進入到spark-examples_2.11-2.4.5.jar 包所在的目錄下執行

spark-examples_2.11-2.4.5.jar -- 是 Spark 官方提供的,用於測試 Spark 是否搭建成功的一個例子

  • standalone client模式 日誌在本地輸出,一般用於上線前測試(bin/下執行)

spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512m --total-executor-cores 1 spark-examples_2.11-2.4.5.jar 100

spark-submit  --  提交命令以這個開頭
--class -- 指定類名
org.apache.spark.examples.SparkPi -- 類名
--master -- 指定執行模式
spark://master:7077 -- 指定Spark提交任務的埠
--executor-memory -- 指定任務執行資源
--total-executor-cores -- 指定任務執行資源
spark-examples_2.11-2.4.5.jar -- 指定jar包
100 -- 傳入main()的引數,這裡的main()是前面指定的類裡面的
  • standalone cluster模式 上線使用,不會在本地列印日誌

spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 --executor-memory 512M --total-executor-cores 1 --deploy-mode cluster spark-examples_2.11-2.4.5.jar 100

--deploy-mode -- 指定部署模式
cluster -- 叢集模式

可以通過 web 介面檢視執行結果

自己寫的程式碼如何提交到 Spark 並執行?

package com.shujia.spark

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

object Demo20Submit {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf()

    /**
      * 將程式碼提交到叢集執行,不需要指定master(執行模式)
      * 在spark的提交命令指定
      */
    //conf.setMaster("local")
    conf.setAppName("Demo20Submit")

    val sc = new SparkContext(conf)

    val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8, 9))

    val sum: Double = listRDD.sum()

    println(s"sum is:$sum")

    /**
      * 將程式碼提交到叢集執行
      * 1、將專案打包上傳到叢集
      * 2、spark-submit --class com.shujia.spark.Demo20Submit --master spark://master:7077 spark-1.0.jar
      * 需要在jar所在的位置提交任務
      * 注意:執行的時候如果報錯說spark-1.0.jar在worker中找不到,則需要將spark-1.0.jar分發到node1、node2
      * scp spark-1.0.jar node1:`pwd`
      * scp spark-1.0.jar node2:`pwd`
      */
  }
}

YARN -- 在yarn上執行

在公司一般不適用standalone模式,因為公司一般已經有yarn 不需要搞兩個資源管理框架

整合yarn(spark在yarn上執行的環境搭建)

1、停止上面搭建的Spark獨立叢集

停止叢集,在master中執行

cd /usr/local/soft/spark-2.4.5/sbin

# 關閉
./stop-all.sh	

2、spark整合yarn只需要在一個節點整合, 可以刪除node1 和node2中所有的spark 檔案

3、修改配置檔案

注:若上面的 Spark Standalone -- 獨立叢集模式 並沒有搭建,則還需要做 上傳解壓、配置環境變數

上面搭建的獨立叢集時對配置檔案做的修改可以刪掉,也可以不用管他

cd /usr/local/soft/spark-2.4.5/conf

cp spark-env.sh.template spark-env.sh

vim spark-env.sh
#增加配置 -- spark-env.sh檔案
export HADOOP_CONF_DIR=/usr/local/soft/hadoop-2.7.6/etc/hadoop
#因為Spark需要獲取hadoop的配置資訊

-------------------------------------------------------------------------
往yarn提交任務需要增加兩個配置  yarn-site.xml (/usr/local/soft/hadoop-2.7.6/etc/hadoop/yarn-site.xml)
先關閉yarn
stop-yarn.sh

# 新增 -- yarn-site.xml檔案
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>

    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

4、yarn-site.xml 同步到其他節點,重啟yarn

scp -r yarn-site.xml node1:`pwd`
scp -r yarn-site.xml node2:`pwd`

啟動yarn
start-yarn.sh

之後就可以通過yarn來執行spark任務了

在 yarn 上執行 org.apache.spark.examples.SparkPi

在 master 上提交

先切到cd /usr/local/soft/spark-2.4.5/examples/jars目錄下

本地 -- 任務在哪提交,哪裡就是本地

  • spark on yarn client模式 日誌在本地輸出,一般用於上線前測試

spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --executor-memory 512M --num-executors 2 spark-examples_2.11-2.4.5.jar 100
  • spark on yarn cluster模式 上線使用,不會在本地列印詳細日誌 減少io

spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 512m --num-executors 2 --executor-cores 1 spark-examples_2.11-2.4.5.jar 100

檢視執行日誌

spark on yarn cluster模式不會列印日誌和結果

獲取yarn程式執行日誌,執行成功之後才能獲取到
yarn logs -applicationId application_1560967444524_0003

application_1560967444524_0003 -- 程式執行id

自己寫的spark程式碼如何提交到yarn上並執行?

package com.shujia.spark

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

object Demo21ClazzNum {
  def main(args: Array[String]): Unit = {

    val conf = new SparkConf()

    /**
      * 將程式碼提交到叢集執行,不需要指定master(執行模式)
      * 在spark的提交命令指定
      */
    //conf.setMaster("local")
    conf.setAppName("Demo21ClazzNum")

    val sc = new SparkContext(conf)

    /**
      * 讀取hdfs中的檔案
      * 前提是HDFS的目錄中一定要有資料檔案
      */
    val studentsRDD: RDD[String] = sc.textFile("/data/students.txt")

    val kvRDD: RDD[(String, Int)] = studentsRDD.map(stu => {
      val clazz: String = stu.split(",")(4)
      (clazz, 1)
    })

    //統計班級的人數
    val clazzNumRDD: RDD[(String, Int)] = kvRDD.reduceByKey((x, y) => x + y)

    //整理資料
    val resultRDD: RDD[String] = clazzNumRDD.map {
      case (clazz: String, num: Int) =>
        s"$clazz\t$num"
    }

    //儲存資料, 儲存到hdfs,指定輸出目錄
    resultRDD.saveAsTextFile("/data/clazz_num")

    /**
      * 將程式碼提交到yarn上執行
      * 1、將需要處理的檔案上傳到hdfs
      * 2、將專案打包上傳到叢集
      * 3、提交任務
      *   spark-submit --class com.shujia.spark.Demo21ClazzNum --master yarn-client spark-1.0.jar
      * 4、檢視結果
      *   hadoop dfs -ls /data
      */
  }
}