大數據Hadoop之——Spark集群部署(Standalone)

来源:https://www.cnblogs.com/liugp/archive/2022/04/16/16153043.html
-Advertisement-
Play Games

一、Spark概述 Spark基礎概念和原理講解可以參考我上篇博文:大數據Hadoop之——計算引擎Spark 二、Spark的運行模式 1)Standalone(本章講解) 獨立模式,自己獨立一套集群(master/client/slave),Spark 原生的簡單集群管理器, 自帶完整的服務, ...


目錄

一、Spark概述

Spark基礎概念和原理講解可以參考我上篇博文:大數據Hadoop之——計算引擎Spark

二、Spark的運行模式

1)Standalone(本章講解)

獨立模式,自己獨立一套集群(master/client/slave),Spark 原生的簡單集群管理器, 自帶完整的服務, 可單獨部署到一個集群中,無需依賴任何其他資源管理系統, 使用 Standalone 可以很方便地搭建一個集群,一般在公司內部沒有搭建其他資源管理框架的時候才會使用。缺點:資源不利於充分利用

2)Mesos

一個強大的分散式資源管理框架,它允許多種不同的框架部署在其上,包括 yarn,由於mesos這種方式目前應用的比較少,這裡沒有記錄mesos的部署方式。

3)YARN(推薦)

統一的資源管理機制, 在上面可以運行多套計算框架, 如map reduce、storm,spark、flink 等, 根據 driver 在集群中的位置不同,分為 yarn client 和 yarn cluster,其實本質就是drive不同。企業里用得最多的一種模式。這種模式環境部署,已經在大數據Hadoop之——計算引擎Spark博文中講過,這裡就不重覆了。

  • yarn Client模式:Driver運行在本地,適合交互調試
  • yarn Cluster模式:Driver運行在集群(AM),正式提交任務的模式(remote)

4)K8S(新模式)

K8S 是 Spark 上全新的集群管理和調度系統。由於在實際生產環境下使用的絕大多數的集群管理器是 ON YARN模式,因此我們目前最主要還是關註ON YARN模式,ON K8S模式瞭解就行,有興趣的小伙伴可以試試,工作模式如下圖所示:

Spark 的運行模式取決於傳遞給 SparkContext 的 MASTER 環境變數的值, 個別模式還需要輔助的程式介面來配合使用,目前支持的 Master 字元串及 URL 包括:

--deploy-mode:是否將驅動程式(driver)部署在工作節點(cluster)上,或作為外部客戶機(client)本地部署(預設值:client)。

Master URL 含義
local 在本地運行,只有一個工作進程,無並行計算能力
local[K] 在本地運行,有 K 個工作進程,通常設置 K 為機器的CPU 核心數量
local[*] 在本地運行,工作進程數量等於機器的 CPU 核心數量。
spark://HOST:PORT 以 Standalone 模式運行,這是 Spark 自身提供的集群運行模式,預設埠號: 7077
mesos://HOST:PORT 在 Mesos 集群上運行,Driver 進程和 Worker 進程運行在 Mesos 集群上,部署模式必須使用固定值:--deploy-mode cluster
yarn 在yarn集群上運行,依賴於hadoop集群,yarn資源調度框架,將應用提交給yarn,在ApplactionMaster(相當於Stand alone模式中的Master)中運行driver,在集群上調度資源,開啟excutor執行任務。
k8s 在k8s集群上運行

三、Standalone 模式運行機制

Standalone 集群有四個重要組成部分, 分別是:

  • Driver: 是一個進程,我們編寫的 Spark 應用程式就運行在 Driver 上, 由Driver 進程執行;
  • Master:是一個進程,主要負責資源的調度和分配,併進行集群的監控等職責;
  • Worker:是一個進程,一個 Worker 運行在集群中的一臺伺服器上,主要負責兩個職責,一個是用自己的記憶體存儲 RDD 的某個或某些 partition;另一個是啟動其他進程和線程(Executor) ,對 RDD 上的 partition 進行並行的處理和計算。
  • Executor:是一個進程, 一個 Worker 上可以運行多個 Executor, Executor 通過啟動多個線程( task)來執行對 RDD 的 partition 進行並行計算,也就是執行我們對 RDD 定義的例如 map、flatMap、reduce 等運算元操作。

1)Standalone Client 模式

  • 在Standalone Client模式下,Driver在任務提交的本地機器上運行,
  • Driver啟動後向Master註冊應用程式,Master根據submit腳本的資源需求找到內部資源至少可以啟動一個Executor的所有Worker,
  • 然後在這些Worker之間分配Executor,Worker上的Executor啟動後會向Driver反向註冊,所有的Executor註冊完成後,
  • Driver開始執行main函數,之後執行到Action運算元時,開始劃分stage,每個stage生成對應的taskSet,之後將task分發到各個Executor上執行。

2)Standalone Cluster 模式

  • 在 Standalone Cluster 模式下,任務提交後,Master 會找到一個 Worker 啟動 Driver進程,
  • Driver 啟動後向 Master 註冊應用程式,
  • Master 根據 submit 腳本的資源需求找到內部資源至少可以啟動一個 Executor 的所有 Worker,
  • 然後在這些 Worker 之間分配 Executor,Worker 上的 Executor 啟動後會向 Driver 反向註冊,
  • 所有的 Executor 註冊完成後,Driver 開始執行 main 函數,之後執行到 Action 運算元時,開始劃分 stage,每個 stage 生成對應的 taskSet,之後將 task 分發到各個 Executor 上執行。

【 註意】Standalone的兩種模式下(client/Cluster),Master在接到Driver註冊Spark應用程式的請求後,會獲取其所管理的剩餘資源能夠啟動一個Executor的所有Worker,然後在這些Worker之間分發Executor,此時的分發只考慮Worker上的資源是否足夠使用,直到當前應用程式所需的所有Executor都分配完畢,Executor反向註冊完畢後,Driver開始執行main程式。

四、Spark 集群安裝(Standalone)

1)機器及角色劃分

機器IP 機器名 節點類型
192.168.0.113 hadoop-node1 Master/Worker
192.168.0.114 hadoop-node2 Worker
192.168.0.115 hadoop-node3 Worker

2)三台機器安裝JDK環境

之前安裝Hadoop集群的時候已經安裝過了,這裡就略過了,不清楚的可以參考我之前的文章:大數據Hadoop原理介紹+安裝+實戰操作(HDFS+YARN+MapReduce)

3)下載

Spark下載地址:http://spark.apache.org/downloads.html

這裡需要註意版本,我的hadoop版本是3.3.1,這裡spark就下載最新版本的3.2.0,而Spark3.2.0依賴的Scala的2.13,所以後面用到Scala編程時註意Scala的版本。

$ cd /opt/bigdata/hadoop/software
# 下載
$ wget https://dlcdn.apache.org/spark/spark-3.2.0/spark-3.2.0-bin-hadoop3.2.tgz
# 解壓
$ tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /opt/bigdata/hadoop/server/
# 修改安裝目錄名稱
$ cp -r /opt/bigdata/hadoop/server/spark-3.2.0-bin-hadoop3.2 /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2

4)配置spark

1、配置slaves文件

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/conf
$ cp workers.template workers
# slaves文件內容如下:
hadoop-node1
hadoop-node2
hadoop-node3

hadoop-node1即是master,也是worker

2、配置spark-env.sh

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/conf
# 創建data目錄(所有節點都得創建這個目錄)
$ mkdir -p /opt/bigdata/hadoop/data/spark-standalone
# copy一份環境變數文件
$ cp spark-env.sh.template spark-env.sh
# 加入以下內容:
export SPARK_MASTER_HOST=hadoop-node1
export SPARK_LOCAL_DIRS=/opt/bigdata/hadoop/data/spark-standalone

3、配置spark-defaults.conf
這裡不做修改,如果需要修改,自行修改就行,預設埠7077

$ cp spark-defaults.conf.template spark-defaults.conf
$ cat spark-defaults.conf

5)將配置好的包copy另外兩台集群

$ scp -r spark-standalone-3.2.0-bin-hadoop3.2 hadoop-node2:/opt/bigdata/hadoop/server/
$ scp -r spark-standalone-3.2.0-bin-hadoop3.2 hadoop-node3:/opt/bigdata/hadoop/server/

5)啟動

1、啟動Master(在hadoop-node1節點上執行)

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/sbin
$ ./start-master.sh
# 查看進程埠,spark master web ui 預設埠為8080
$ ss -tnlp|grep :8080
# 如果埠衝突,修改start-master.sh腳本里的埠即可
$ grep SPARK_MASTER_WEBUI_PORT start-master.sh


訪問spark master web ui:http://hadoop-node1:8080

2、啟動Worker節點(在所有節點上都執行)

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/sbin
$ ./start-worker.sh spark://hadoop-node1:7077

五、測試驗證

spark-submit 詳細參數說明

參數名 參數說明
--master master 的地址,提交任務到哪裡執行,例如 spark://host:port, yarn, local
--deploy-mode 在本地 (client) 啟動 driver 或在 cluster 上啟動,預設是 client
--class 應用程式的主類,僅針對 java 或 scala 應用
--name 應用程式的名稱
--jars 用逗號分隔的本地 jar 包,設置後,這些 jar 將包含在 driver 和 executor 的 classpath 下
--packages 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐標
--exclude-packages 為了避免衝突 而指定不包含的 package
--repositories 遠程 repository
--conf PROP=VALUE 指定 spark 配置屬性的值, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
--properties-file 載入的配置文件,預設為 conf/spark-defaults.conf
--driver-memory Driver記憶體,預設 1G
--driver-java-options 傳給 driver 的額外的 Java 選項
--driver-library-path 傳給 driver 的額外的庫路徑
--driver-class-path 傳給 driver 的額外的類路徑
--driver-cores Driver 的核數,預設是1。在 yarn 或者 standalone 下使用
--executor-memory 每個 executor 的記憶體,預設是1G
--total-executor-cores 所有 executor 總共的核數。僅僅在 mesos 或者 standalone 下使用
--num-executors 啟動的 executor 數量。預設為2。在 yarn 下使用
--executor-core 每個 executor 的核數。在yarn或者standalone下使用

1)driver client模式(--deploy-mode client)

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/bin
$ ./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop-node1:7077 \
--deploy-mode client \
--driver-memory 1G \
--executor-memory 1G \
--total-executor-cores 2 \
--executor-cores 1 \
/opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/examples/jars/spark-examples_2.12-3.2.0.jar 10

這種模式運行結果,直接在客戶端顯示出來了。

2)driver cluster模式(--deploy-mode cluster)

$ cd /opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/bin
$ ./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop-node1:7077 \
--deploy-mode cluster \
--driver-memory 1G \
--executor-memory 1G \
--total-executor-cores 2 \
--executor-cores 1 \
/opt/bigdata/hadoop/server/spark-standalone-3.2.0-bin-hadoop3.2/examples/jars/spark-examples_2.12-3.2.0.jar 10

這種模式基本上沒什麼輸出信息,需要登錄web頁面查看

查看driver日誌信息

最終在driver日誌里查看運行結果了。

【溫馨提示】目前企業里用的最多的模式還是on yarn模式,Standalone模式瞭解就行。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 工具 這裡用到兩個工具分別為Procdump+Windbg Procdump:ProcDump是一個命令行實用工具,主要目的是監視應用程式,以便在管理員或開發人員可用於確定峰值的原因期間監視 CPU 峰值和生成故障轉儲。 ProcDump 還包括使用視窗掛起 (使用相同的視窗掛起定義,Windows ...
  • 在實際的軟體開發過程中,我們通常會採用一種前後端分離的開發模式,在這種模式下一般會由前後端兩類開發人員協同開發,在這種情況下後端開發人員則需要提供API文檔去與前端人員進行對接,這樣才能保障後續的工作能夠順利開展。 並且當前項目在與外部系統進行業務往來或者數據交互的時候,我們通常會作為“介面方”對外 ...
  • 1. 前言 通過之前的學習,我們已經掌握了crank的配置以及對應http基準工具bombardier、wrk、wrk2的用法,本篇文章介紹一下如何將其用於實戰,在實際的項目中我們如何使用crank來完成壓測任務。 2. 項目背景 目前有一個項目,我們希望通過壓測來瞭解其QPS、吞吐量、以及臨界值, ...
  • RTF文檔即富文本格式(Rich Text Format)的文檔。我們在處理文件時,遇到需要對文檔格式進行轉換時,可以將RTF轉為其他格式,如轉為DOCX/DOC、PDF或者HTML,以滿足程式設計需要。網上有開發者提供了可實現RTF轉為HTML格式的方法,但是方法可能不一定適用於所有程式,比如可能 ...
  • 實驗網站 課程網站:CSAPP 源碼下載 源碼下載 實驗文檔下載 我的實驗環境:Ubuntu 20.04 lab7文檔解讀 ​ 查看 tsh.c (tiny shell) 文件,您會看到它包含一個簡單的 Unix shell 的功能骨架。為了幫助您入門,我們已經實現了不太有趣的功能。你的任務是完成下 ...
  • 官方wiki:https://wiki.archlinux.org/ 基礎安裝 一:製作安裝介質 下載ISO鏡像文件: https://archlinux.org/download/ # 官方下載網址 在linux系統中可以用pgp驗證系統簽名: gpg --keyserver-options au ...
  • 概述 資料庫中關於數據的查詢有時非常複雜,例如表連接、子查詢等,這種查詢編寫難度大,很容易出錯。另外,在具體操作表時,有時候要求只能操作部分欄位。 為了提高複雜 SQL 語句的復用性和表的操作的安全性,MySQL 提供了視圖特性。所謂視圖,本質上是一種虛擬表,同樣包含一系列帶有名稱的列和行數據。行和 ...
  • 整數類型 標準 SQL 中支持 INTEGER 和 SMALLINT 這兩種類型,MySQL 資料庫除了支持這兩種類型以外,還擴展支持了 TINYINT、MEDIUMINT 和 BIGINT 整數類型 位元組數 無符號數的取值範圍 有符號數的取值範圍 TINYINT 1 (0,255) (-128,1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...