【數據倉庫】spark大數據處理框架

文章目錄

    • 概述
    • 架構
    • spark 架構角色
    • 下載
    • 安裝
    • 啟動pyspark
    • 啟動spark-sehll
    • 啟動spark-sql
    • spark-submit
    • 經驗

概述

Spark是一個性能優異的集群計算框架,廣泛應用于大數據領域。類似Hadoop,但對Hadoop做了優化,計算任務的中間結果可以存儲在內存中,不需要每次都寫入HDFS,更適用于需要迭代運算的算法場景中。

Spark專注于數據的處理分析,而數據的存儲還是要借助于Hadoop分布式文件系統HDFS等來實現。

大數據問題場景包含以下三種:

  • 復雜的批量數據處理
  • 基于歷史數據的交互式查詢
  • 基于實時數據流的數據處理

Spark技術棧基本可以解決以上三種場景問題。

架構

在這里插入圖片描述

1 spark Core :spark的核心模塊,是spark運行基礎。以RDD為數據抽象,提供python、java、scala、R語言的api,可以通過RDD編程進行海量離線數據批處理計算。

2 Spark SQL:基于Spark Core,提供結構化數據處理功能。可以使用SQL語言對數據進行處理,可用于離線計算場景。同時基于Spark SQL提供了StructuredStreaming模塊,可以使用時SQL進行流式計算。

3 sparkStreaming : 以Spark Core為基礎,提供數據的流式計算功能

4 MLlib:以spark Core為基礎,進行機器學習計算,內置大量機器學習庫和API算法等。

5 Graphx:以spark Core為基礎,進行圖計算,提供大量圖計算的API,方便以分布式資源進行圖計算。

6 spark底層的文件存儲還是基于hdfs分布式文件系統,支持多種部署方式。

spark 架構角色

在這里插入圖片描述

從兩個層面理解:

資源管理層面:(典型的Master-Worker架構)

管理者:即Master角色,只能有一個

? 工作者:即Worker角色,可以有多個。一個worker在一個分布式節點上,監測當前節點的資源狀況,向master節點匯總。

任務執行層面:

? 某任務管理者:Driver角色,一個任務只能有一個

? 某任務執行者:Executor角色,可以有多個

在特殊場景下(local模式),Driver即是管理者又是執行者

下載

下載地址:

http://spark.apache.org/downloads.html

或者

https://archive.apache.org/dist/spark/

選擇合適自己的版本下載。

Spark2.X預編譯了Scala2.11(Spark2.4.2預編譯Scala2.12)

Spark3.0+預編譯了Scala2.12

該教程選擇Spark3.2.1版本,其中預編譯了Hadoop3.2和Scala2.13,對應的包是 spark-3.2.1-bin-hadoop3.2-scala2.13.tgz,但這里的預編譯Hadoop不是指不需要再安裝Hadoop。

linux 服務器上下載地址

wget https://archive.apache.org/dist/spark/spark-3.2.1/spark-3.2.1-bin-hadoop3.2-scala2.13.tgz

安裝

Spark的安裝部署支持三種模式,

local本地模式(單機):啟動一個JVM Process進程,通過其內部的多個線程來模擬整個spark運行時各個角色。一個進程里有多個線程。

Local[N]:可以使用N個線程,一個線程利用一個cpu核,通常cpu有幾個核,就指定幾個線程,最大化利用計算能力;
Local[*],按照cpu核數設置線程數;

standalone模式(集群):各個角色以獨立進程的形式存在,并組成spark集群

? spark on YARN模式(集群):各個角色運行在yarn的容器內部,組成集群環境

? kubernetes 模式(容器集群):各個角色運行在kubernetes 容器內部,組成集群環境

本文將只介紹 本地Local模式,其它模式將會在后續文章中進行介紹。

該文的安裝環境為centos7。

1、將下載的包上傳到服務器指定目錄,解壓

[root@localhost softnew]# tar zxvf spark-3.1.2-bin-hadoop3.2.tgz
# 修改目錄
mv spark-3.1.2-bin-hadoop3.2 spark-3.1.2

2、修改配置文件

修改/etc/profile文件,新增spark環境變量:

 # Spark Environment Variablesexport SPARK_HOME=/home/bigData/softnew/sparkexport PATH=$PATH:$SPARK_HOME/bin

修改完成后記得執行 source /etc/profile 使其生效

啟動pyspark

? pyspark 是spark集成python后,可以使用python 腳本編寫spark 數據 批處理計算。pyspark提供了一個shell窗口。

./pyspark
[root@yd-ss bin]# ./pyspark
Python 3.10.10 (main, Dec 26 2024, 22:46:13) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
24/12/27 10:46:44 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 10:46:44 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.metastore.event.db.notification.api.auth does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.server2.active.passive.ha.enable does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.exec.default.charset does not exist
24/12/27 10:46:46 WARN HiveConf: HiveConf of name hive.exec.default.national.charset does not exist
24/12/27 10:46:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//__ / .__/\_,_/_/ /_/\_\   version 3.2.1/_/Using Python version 3.10.10 (main, Dec 26 2024 22:46:13)
Spark context Web UI available at http://sc:4040
Spark context available as 'sc' (master = local[*], app id = local-1735267609271).
SparkSession available as 'spark'.
>>>

進入窗口,即可使用python 寫RDD編程代碼了。

同時,可以通過web ui 在4040端口訪問,查看spark 任務執行情況。

執行如下計算任務

sc.parallelize([1,2,3,4,5]).map(lambda x:x*10).collect()

訪問localhost:4040

在這里插入圖片描述

可以看到job清單,這個job,起了24個線程去處理計算。 由于跑任務的服務器是24核的,執行./pyspark 默認以local[*]最大線程去啟動。

在這里插入圖片描述

可以看到任務層面,啟動了一個driver,由于是local模式,所以driver即是管理者也是執行者。

可以在pyspark-shell下利用spark做一些簡單開發任務;

下面修改啟動命令:

# 該local模式啟動2個線程
./pyspark --master local[2]

再次執行

sc.parallelize([1,2,3,4,5]).map(lambda x:x*10).collect()

在這里插入圖片描述

可以看到這個job只用了2個線程來處理計算。

還可以利用該shell處理其他計算任務,也就是說一個shell 啟動起來,是可以處理多個任務的,但只要關閉窗口,shell就會關閉。就不能再處理任務了。

通過shell 總是不便,后續將介紹通過pycharm進行RDD計算任務編寫。

退出shell腳本

quit()或者ctrl + D

啟動spark-sehll

./spark-shell

可以看到如下信息:

[root@yd-ss bin]# ./spark-shell
24/12/27 11:11:50 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 11:11:50 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to____              __/ __/__  ___ _____/ /___\ \/ _ \/ _ `/ __/  '_//___/ .__/\_,_/_/ /_/\_\   version 3.2.1/_/Using Scala version 2.13.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201)
Type in expressions to have them evaluated.
Type :help for more information.
24/12/27 11:12:04 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark context Web UI available at http://sc:4040
Spark context available as 'sc' (master = local[*], app id = local-1735269126553).
Spark session available as 'spark'.scala>

這個是要使用scala語言編寫,其他跟pyspark類似。

啟動spark-sql

./spark-sql

可以看到如下:

[root@yd-ss bin]# ./spark-sql
24/12/27 11:14:28 WARN Utils: Your hostname, yd-ss resolves to a loopback address: 127.0.0.1; using xx.xx.xx.xx instead (on interface bond0)
24/12/27 11:14:28 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
24/12/27 11:14:29 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.metastore.event.db.notification.api.auth does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.server2.active.passive.ha.enable does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.exec.default.charset does not exist
24/12/27 11:14:30 WARN HiveConf: HiveConf of name hive.exec.default.national.charset does not exist
Spark master: local[*], Application Id: local-1735269273943
spark-sql>

可以看到這個是依賴hive數倉配置的。spark-sql是沒有元數據管理的,所以需要跟hive集成,利用其元數據管理功能。后續將詳細介紹。

spark-submit

該工具是用來提交寫好的計算腳本,到saprk上去執行,執行完成即結束。和前面的shell不一樣,shell只要沒關閉,就可以一直執行的。

# 執行spark自帶的python示例,計算pi的值(8次迭代)
./spark-submit /home/spark/spark-3.2.1/examples/src/main/python/pi.py 8

該腳本,會基于spark啟動一個driver,執行pi.py計算,然后打開web ui 4040監控接口,執行完成后輸出結果,最后關閉driver,關閉web ui。

是個一次性的任務執行。

經驗

1 spark 功能比較強大,使用方式也很豐富,初步學習只需要了解自己使用方式即可;

2 spark local模式使用配置是比較簡單的,基本是開箱即用;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64647.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫容災備份的意義+分類+執行工具!

數據庫容災解決方案的背景 數據庫容災(Disaster Recovery,DR)解決方案的背景主要源于企業對數據安全性、業務連續性和系統高可用性的需求。隨著數字化轉型的加速,企業的數據量迅猛增長,數據庫已成為支撐核心業務的關鍵…

PDF怎么壓縮得又小又清晰?5種PDF壓縮方法

PDF 文件在日常辦公與學習中使用極為頻繁,可想要把它壓縮得又小又清晰卻困難重重。一方面,PDF 格式本身具有高度兼容性,集成了文字、圖像、矢量圖等多樣元素,壓縮時難以兼顧不同元素特性,稍不注意,文字就會…

SpringBoot數據字典字段自動生成對應code和desc

效果:接口會返回orderType,但是這個orderType是枚舉的類型(1,2,3,4),我想多返回一個orderTypeDesc給前端展示,這樣前端就可以直接拿orderTypeDesc使用了。 1. 定義注解 …

【YashanDB知識庫】imp導入數據庫時,報錯YAS-08023

本文內容來自YashanDB官網,原文內容請見 https://www.yashandb.com/newsinfo/7849010.html?templateId1718516 **【問題分類】**數據導入導出 **【關鍵字】**imp、YAS-08023 【問題描述】 導出數據庫時,使用以下命令,導出正常&#xff1…

又一年。。。。。。

2024,渾渾噩噩的一年。 除了100以內的加減法(數據,數據,還是數據。。。。。。),似乎沒做些什么。 臉盲癥越來越重的,怕是哪天連自己都不認得自己的了。 看到什么,聽到什…

FreeRTOS: ISR(中斷服務例程)和 TCB(任務控制塊)

在討論 ISR(中斷服務例程)和 TCB(任務控制塊,Task Control Block)時,我們實際上是在探討 FreeRTOS 中兩個不同但又相互關聯的概念:一個是用于處理硬件或軟件觸發的中斷事件,另一個是…

GoldenDB組件及對應的用戶和進程

1. GoldenDB組件及對應的用戶和進程 GoldenDB數據庫由管理節點、全局事務節點GTM、計算節點CN、數據節點DN等組成。 1.1. 管理節點 管理節點分為集群管理、Insight運維管理平臺(InsightServer、RDB、ZK)。 1.1.1. 集群管理 1. 集群管理包括Metadatas…

OpenStack系列第四篇:云平臺基礎功能與操作(Dashboard)

文章目錄 1. 鏡像(Image)添加鏡像查看鏡像刪除鏡像 2. 卷(Volume)創建卷查看卷刪除卷 3. 網絡(虛擬網絡)創建網絡查看網絡刪除網絡 4. 實例類型創建實例類型查看實例類型刪除實例類型 4. 密鑰對&#xff08…

CSDN編輯器

這里寫自定義目錄標題 歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題,有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants 創建一個自定義列表如何創建一個…

MTK 平臺關于WIFI 6E P2P的解說

一 前言 官方 P2P 6E 設計原理,請查看這個網站 hostap - hostapd/wpa_supplicant 配置:p2p_6ghz_disable 允許上層指定是否允許6G連接 僅允許6G用于WFD –不允許6G用于純P2P 缺點:存在很多 IOT issues 如:一些物聯網設備無法識別6G類/信道,可能存在物聯網問…

四大自平衡樹對比:AVL樹、紅黑樹、B樹與B+樹

AVL樹、紅黑樹、B樹和B樹的對比與應用場景 樹系列相關文章(置頂) 1、從鏈表到平衡樹:二叉查找樹的退化與優化 2、自平衡二叉查找樹:如何讓二叉查找樹始終保持高效 3、AVL樹入門:理解自平衡二叉查找樹的基礎 4、紅黑樹全…

Linux下讀取Windows下保存的文件,報錯信息中出現“^M“時如何解決?【由于Windows和Linux的換行方式不同造成的-提供兩種轉換方式】

Windows 和 Linux 的文本文件使用的換行符不同: Windows 使用 \r\n (回車 換行)。Linux 使用 \n (換行)。 因此,當在 Linux 系統上運行帶有 Windows 換行符的腳本或讀取相關文件時,可能會出現…

簡易內存池(下)

提示&#xff1a;文章 文章目錄 前言一、背景二、2.1Ace代碼 三、3.1 總結 前言 前期疑問&#xff1a; 本文目標&#xff1a; 一、背景 最近 二、 2.1 Ace代碼 Aced代碼形式如下 #include <stdbool.h> #include <stdio.h> #include <malloc.h> #inclu…

npm ERR! ECONNRESET 解決方法

問題&#xff1a;npm 命令遇到的錯誤是 ECONNRESET&#xff0c;這通常與網絡連接問題相關。設置代理解決問題。 一、查看當前代理設置 npm config get proxy npm config get https-proxy二、設置代理 npm config set proxy http://your-proxy-address:port npm config set h…

【UE5】UnrealEngine源碼構建2:windows構建unreal engine 5.3.2

參考大神知乎的文章:UE5 小白也能看懂的源碼編譯指南 據說會耗費400G的空間。 代碼本身并不大,可能是依賴特別多,畢竟看起來UE啥都能干,核心還是c++的, 【UE5】UnrealEngine源碼構建1:tag為5.3.2源碼clone 本著好奇+ 學習的態度,想著也許有機會能更為深入的熟悉UE的機制…

Day60 圖論part10

今天大家會感受到 Bellman_ford 算法系列在不同場景下的應用。 建議依然是:一刷的時候,能理解 原理,知道Bellman_ford 解決不同場景的問題 ,照著代碼隨想錄能抄下來代碼就好,就算達標。 二刷的時候自己嘗試獨立去寫,三刷的時候 才能有一定深度理解各個最短路算法。 Bell…

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件

在Linux上獲取MS(如Media Server)中的RTP流并錄制為雙軌PCM格式的WAV文件 一、RTP流與WAV文件格式二、實現步驟三、偽代碼示例四、C語言示例代碼五、關鍵點說明六、總結在Linux操作系統上,從媒體服務器(如Media Server,簡稱MS)獲取RTP(Real-time Transport Protocol)流…

Vue3 簡介

Vue3 簡介 最新版本&#xff1a; v3.5.13 1、性能提升 打包大小減少 41% - 初次渲染快 55%, 更新渲染快 133%內存減少 54% 2、源碼的升級 使用 Proxy 代替 defineProperty 實現響應式。重寫虛擬 DOM 的實現和 Tree-Shaking 3、擁抱TypeScript Vue3 可以更好的支持 TypeSc…

打造RAG系統:四大向量數據庫Milvus、Faiss、Elasticsearch、Chroma 全面對比與選型指南

在當今信息爆炸的時代&#xff0c;檢索增強生成&#xff08;Retrieval-Augmented Generation&#xff0c;簡稱RAG&#xff09;系統已成為自然語言處理&#xff08;NLP&#xff09;領域的重要工具。RAG 系統通過結合生成模型和信息檢索技術&#xff0c;能夠在大規模數據中高效地…

檢索增強生成(RAG):大語言模型的創新應用

近年來,隨著自然語言處理(NLP)技術的不斷發展,大型語言模型(Large Language Models, LLMs)在文本生成、對話系統等任務中展現出卓越的性能。然而,由于模型參數和訓練數據的靜態性,它們難以生成包含實時或領域特定信息的高質量文本。為解決這一局限性,檢索增強生成(Re…