加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • PART1:Spark是什么
    • PART2:Spark的特點
    • PART3:Spark的生態(tài)系統(tǒng)
    • PART4:Spark的部署模式
    • PART5:Spark的運行架構(gòu)
    • PART6:PySpark庫介紹
    • PART7:快速入門PySpark
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

一文理解Spark的基本概念和工作原理

02/28 08:52
5233
閱讀需 21 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

在Hadoop 1.x版本中,采用的是MRv1版本的MapReduce編程模型,包括3個部分:運行時環(huán)境(JobTracker和TaskTracker)、編程模型(MapReduce)、數(shù)據(jù)處理引擎(MapTask和ReduceTask)。但是MRv1存在以下不足:

1)可擴展性差。在運行時,JobTracker既負(fù)責(zé)資源管理,又負(fù)責(zé)任務(wù)調(diào)度,當(dāng)集群繁忙時JobTracker很容易成為瓶頸,最終導(dǎo)致它的可擴展性問題。

2)可用性差。采用了單節(jié)點的Master,沒有備用Master及選舉操作,這就存在單點故障的問題,一旦Master出現(xiàn)故障,整個集群將不可用。

3)資源利用率低。TaskTracker使用slot來劃分節(jié)點上的CPU、內(nèi)存等資源,并將空閑的slot分配給Task使用,一個Task只有在獲得slot后才有機會進行運行。但是一些Task并不能充分利用獲得的slot,導(dǎo)致slot有空閑,而其他Task又無法使用這些空閑資源。

Apache為了解決MRv1中的缺陷,對Hadoop進行了升級改造及重構(gòu),就有了MRv2。MRv2重構(gòu)了MRv1中的運行時環(huán)境,將原來的JobTracker拆分成集群資源調(diào)度平臺(ResourceManager)、節(jié)點資源管理者(NodeManager)、任務(wù)管理者(ApplicationMaster),這就是后來Hadoop中的YARN。除

了運行時環(huán)境,編程模型和數(shù)據(jù)處理引擎變成了可插拔的,可以用其他框架模型來替換,比如Spark。

PART1:Spark是什么

官方網(wǎng)站表明Spark是一個用于大規(guī)模數(shù)據(jù)(Large-scala Data)分析的統(tǒng)一引擎(Unified Engine)。Apache Spark?是一個多語言引擎,用于在單節(jié)點機器或集群上執(zhí)行數(shù)據(jù)工程、數(shù)據(jù)科學(xué)和機器學(xué)習(xí)。

Spark最早源于加州大學(xué)柏克萊分校的Matei Zaharia等人發(fā)表的一篇論文“Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing”。Spark借鑒了MapReduce的思想,保留了分布式并行計算的優(yōu)點并改進了其明顯的缺陷,對MapReduce做了大量的優(yōu)化,例如減少磁盤I/O、增加并行度、避免重新計算、以及采用內(nèi)存計算及靈活的內(nèi)存管理策略等。Spark提出了一種彈性分布式數(shù)據(jù)集(Resilient Distributed Datasets,RDD)的概念,RDD是一種分布式內(nèi)存數(shù)據(jù)抽象,使得程序員能夠在大規(guī)模集群中做內(nèi)存運算,并且有一定的容錯方式,而這也是整個Spark的核心數(shù)據(jù)結(jié)構(gòu),Spark整個平臺都圍繞著RDD進行。中間數(shù)據(jù)存儲在內(nèi)存中提高了運行速度,并且Spark提供豐富的操作數(shù)據(jù)的API,提高了開發(fā)速度。

Spark是如何處理數(shù)據(jù)的?Spark會將HDFS中文件的每個數(shù)據(jù)塊讀取為RDD的一個分區(qū)(Partition),每個分區(qū)會啟動一個計算任務(wù)(Task),以實現(xiàn)大規(guī)模數(shù)據(jù)集的并行計算,過程如圖2所示。

圖2.Spark如何處理數(shù)據(jù)

Spark是一款分布式內(nèi)存計算的統(tǒng)一分析引擎,其特點就是對任意類型的數(shù)據(jù)進行自定義計算,可以計算結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化等各種類型的數(shù)據(jù)結(jié)構(gòu)。Spark的適用面比較廣,所以被稱為統(tǒng)一的分析引擎,它同時支持使用Python、Java、Scala、R以及SQL語言開發(fā)應(yīng)用程序處理數(shù)據(jù)。

PART2:Spark的特點

Spark具有運行速度快、易用性好、通用性強和隨處運行等特點。

1)速度快。由于Apache Spark支持內(nèi)存計算,并且通過有向無環(huán)圖(DAG)執(zhí)行引擎支持無環(huán)數(shù)據(jù)流,所以官方宣稱其在內(nèi)存中的運算速度要比Hadoop的MapReduce快100倍,在硬盤中要快10倍。Spark處理數(shù)據(jù)與MapReduce處理數(shù)據(jù)相比,有兩個不同點:其一,Spark處理數(shù)據(jù)時,可以將中間處理結(jié)果數(shù)據(jù)存儲到內(nèi)存中;其二,Spark提供了非常豐富的算子(API),可以做到復(fù)雜任務(wù)在一個Spark程序中完成。

2)易用性好。Spark的版本已經(jīng)更新到3.4.0(截至2023年4月13日),支持包括 Java、Scala、Python、R和SQL語言在內(nèi)的多種語言。為了兼容Spark 2.x企業(yè)級應(yīng)用場景,Spark仍然持續(xù)更新Spark 2.x版本。

3)通用性強。在Spark核心基礎(chǔ)上,Spark還提供了包括Spark SQL、Spark Streaming、MLlib 及GraphX在內(nèi)的多個工具庫,可以在一個應(yīng)用中無縫地使用這些工具庫。

4)隨處運行。Spark支持多種運行方式,包括在YARN和Mesos上支持獨立集群運行模式,同時也可以運行在云Kubernetes(Spark 2.3開始支持)和云環(huán)境上。

5)批處理/流數(shù)據(jù)??梢允褂檬走x語言(Python、SQL、Scala、Java或R)以批處理和實時流的方式統(tǒng)一數(shù)據(jù)處理。

6)SQL分析。執(zhí)行快速、分布式的ANSI
SQL查詢,用于儀表板和即席報告。運行速度比大多數(shù)數(shù)據(jù)倉庫都快。

7)大規(guī)模數(shù)據(jù)科學(xué)。對PB級數(shù)據(jù)執(zhí)行探索性數(shù)據(jù)分析(EDA),而無須采用縮減采樣。

8)機器學(xué)習(xí)。在筆記本電腦上訓(xùn)練機器學(xué)習(xí)算法,并使用相同的代碼擴展到數(shù)千臺計算機的容錯群集。

PART3:Spark的生態(tài)系統(tǒng)

Spark有一套自己的生態(tài)體系,以Spark為核心(Spark Core),并提供支持SQL語句操作的Spark SQL模塊、支持流式計算的Spark Streaming模塊、支持機器學(xué)習(xí)的MLlib模塊、支持圖計算的GraphX模塊。在資源調(diào)度方面,Spark支持自身獨立集群的資源調(diào)度、YARN及Mesos等資源調(diào)度框架。Spark的體系架構(gòu)如圖3所示。

圖3.Spark的體系架構(gòu)

1)Spark Core。包含Spark的基本功能,包含任務(wù)調(diào)度、內(nèi)存管理、容錯機制等,內(nèi)部采用RDD數(shù)據(jù)抽象,并提供了很多API來創(chuàng)建和操作這些RDD。為其他組件提供底層的服務(wù)。

2)Spark SQL。用來操作結(jié)構(gòu)化數(shù)據(jù)的核心組件,通過Spark SQL可以直接查詢Hive、 HBase等多種外部數(shù)據(jù)源中的數(shù)據(jù)。Spark SQL能夠統(tǒng)一處理關(guān)系表,在處理結(jié)構(gòu)化數(shù)據(jù)時,開發(fā)人員無須編寫MapReduce程序,直接使用SQL命令就能完成更復(fù)雜的數(shù)據(jù)查詢操作。

3)Spark Streaming。Spark提供的流式計算框架,支持高吞吐量、可容錯處理的實時流式數(shù)據(jù)處理,其核心原理是將流式數(shù)據(jù)分解成一系列微小的批處理作業(yè),每個微小的批處理作業(yè)都可以使用Spark Core進行快速處理。Spark Streaming支持多種數(shù)據(jù)來源,如文件、Socket、Kafka、Kinesis等。

4)MLlib。Spark提供的關(guān)于機器學(xué)習(xí)功能的算法程序庫,包括分類、回歸、聚類、協(xié)同過濾算法等,還提供了模型評估、數(shù)據(jù)導(dǎo)入等額外的功能,開發(fā)人員只需了解一定的機器學(xué)習(xí)算法知識就能進行機器學(xué)習(xí)方面的開發(fā),降低了學(xué)習(xí)成本。

5)GraphX。Spark提供的分布式圖處理框架,擁有圖計算和圖挖掘算法的API接口以及豐富的功能和運算符,極大地方便了對分布式圖的處理,能在海量數(shù)據(jù)上運行復(fù)雜的圖算法。

PART4:Spark的部署模式

Spark提供多種部署模式,包括:

1)本地模式(單機模式)。本地模式就是以一個獨立的進程,通過其內(nèi)部的多個線程來模擬整個Spark運行時環(huán)境。本地模式不適合用于生產(chǎn)環(huán)境,僅用于本地程序開發(fā)、代碼驗證等。

2)獨立集群模式(集群模式)。Spark中的各個角色以獨立進程的形式存在,并組成Spark集群環(huán)境,這種模式下Spark自己獨立管理集群的資源。

3)Spark on YARN模式(集群模式)。Spark中的各個角色運行在YARN的容器內(nèi)部,并組成Spark集群環(huán)境,這種模式下Spark不再管理集群的資源,而由YARN進行集群資源管理。

4)Kubernetes模式(容器集群)。Spark中的各個角色運行在Kubernetes的容器內(nèi)部,并組成Spark集群環(huán)境。

5)云服務(wù)模式(運行在云平臺上)。Spark的商業(yè)版本Databricks就運行在谷歌、微軟、亞馬遜云服務(wù)提供商的云平臺上。

PART5:Spark的運行架構(gòu)

從物理部署層面上看,如果是獨立集群模式部署的集群,則Spark主要包含兩種類型的節(jié)點:Master節(jié)點和Worker節(jié)點。Master節(jié)點負(fù)責(zé)管理集群資源,分配Application到Worker節(jié)點,維護Worker節(jié)點、Driver和Application的狀態(tài)。

Worker節(jié)點負(fù)責(zé)具體的任務(wù)運行。如果是運行在YARN環(huán)境下,則不需要Master節(jié)點和Worker節(jié)點。

從程序運行層面上看,Spark主要分為Driver和Executor。Driver充當(dāng)單個Spark任務(wù)運行過程中的管理者,Executor充當(dāng)單個Spark任務(wù)運行過程中的執(zhí)行者。Spark中的4類角色組成了Spark的整個運行時(Runtime)環(huán)境。這些角色與YARN中的各個角色有類似的地方。

在集群資源管理層面:整個集群的管理者,在YARN中是ResourceManager,在Spark中是Master;單個節(jié)點的管理者,在YARN中是NodeManager,在Spark中是Worker。在任務(wù)執(zhí)行層面:單個任務(wù)的管理者,在YARN中是ApplicationMaster,在Spark中是Driver;單個任務(wù)的執(zhí)行者,在YARN中是Task,在Spark中是Executor。Spark官方提供的運行結(jié)構(gòu)如下圖所示。

圖4.Spark的運行結(jié)構(gòu)

在Spark的運行結(jié)構(gòu)中涉及一些關(guān)鍵概念:

1)Master Node。集群中的主節(jié)點,負(fù)責(zé)集群的資源管理。

2)Worker Node。可以在集群中運行應(yīng)用程序代碼的任何節(jié)點。

3)Application?;赟park構(gòu)建的用戶應(yīng)用程序。由集群上Driver程序和Executor執(zhí)行。

4)Driver程序。運行應(yīng)用程序的main()函數(shù),并創(chuàng)建SparkContext的過程。

5)Executor。為Worker節(jié)點上的應(yīng)用程序啟動的進程,用于運行任務(wù)并將數(shù)據(jù)保存在內(nèi)存中或跨磁盤存儲。每個Application都分配有自己的Executor。

6)Cluster Manager(集群管理者)。用于獲取、管理集群上的資源,如果是獨立集群模式部署的集群則是Standalone Manager,否則就是外部服務(wù),例如Mesos、YARN、Kubernetes。

7)Job。Spark的數(shù)據(jù)抽象是RDD,RDD提供了很多算子(API),這些算子被劃分為Transformation和Action算子兩種類型。Transformation算子只構(gòu)建程序的執(zhí)行計劃,但并不會執(zhí)行;Action算子的作用是觸發(fā)Spark程序的真正執(zhí)行。為了響應(yīng)Action算子,當(dāng)程序中遇到一個Action算子時,Spark會提交一個Job,用來真正執(zhí)行前面的一系列操作。通常一個Application會包含多個Job,Job之間按串行方式依次執(zhí)行。

8)Stage。每個Job會根據(jù)Shuffle依賴劃分為更小的任務(wù)集,稱為Stage(階段),Stage之間具有依賴關(guān)系及執(zhí)行的先后順序,比如MapReduce中的map stage和reduce stage。

9)Task。Stage再細(xì)分就是Task(任務(wù)),Task是發(fā)送給一個Executor的最細(xì)執(zhí)行單元,RDD的每個Partition都會啟動一個Task,因此每個Stage中Task的數(shù)量就是當(dāng)前Stage的并行度。

PART6:PySpark庫介紹

Spark是用Scala語言編寫的,運行在JVM上,即Spark的任務(wù)都是以JVM的進程來運行的。Python是機器學(xué)習(xí)的首選語言,Python編寫的代碼運行在Python進程里面。在Python代碼中想要調(diào)用Spark的API,就涉及Python進程與JVM進程之間的通信與交互,想要實現(xiàn)這樣不同進程之間的交互,就需要用到遠(yuǎn)程過程調(diào)用(RPC)。

Py4j是一個非常有趣的RPC庫,它可以在JVM進程開辟一個ServerSocket來監(jiān)聽客戶端的連接,在Python進程端啟動一個連接池連接到JVM,所有的遠(yuǎn)程調(diào)用都被封裝成消息指令,通過連接池中的連接將消息指令發(fā)送到JVM遠(yuǎn)程執(zhí)行。

Py4j實現(xiàn)了讓Python自由操縱Java,借助Py4j就可以實現(xiàn)在Python代碼中調(diào)用Spark的API,但是,每次調(diào)用Spark的API都讓開發(fā)人員自己編寫RPC代碼,效率低下且不易使用。為了讓Spark支持Python,Apache Spark社區(qū)發(fā)布了一個工具庫PySpark,PySpark是Python中Apache Spark的接口。SparkContext作為Spark應(yīng)用程序的入口,執(zhí)行Spark應(yīng)用程序會優(yōu)先在Driver端創(chuàng)建SparkContext。

在Python Driver端,SparkContext利用Py4j啟動一個JVM并創(chuàng)建JavaSparkContext,借助Py4j實現(xiàn)Python代碼與JavaSparkContext的通信。Python環(huán)境下的RDD會被映射成Java環(huán)境下的PythonRDD。在Executor端,PythonRDD對象會啟動一些子進程,并與這些子進程通信,以此來發(fā)送數(shù)據(jù)和執(zhí)行代碼。PySpark的架構(gòu)如下圖所示。

圖5.PySpark架構(gòu)

大多數(shù)數(shù)據(jù)科學(xué)家和數(shù)據(jù)分析師都熟悉Python,并使用它來實現(xiàn)機器學(xué)習(xí),PySpark允許他們在大規(guī)模分布式數(shù)據(jù)集上使用自己最熟悉的語言。

以上內(nèi)容節(jié)選自《PySpark大數(shù)據(jù)分析實戰(zhàn)》

作者:伍鮮?常麗娟

PART7:快速入門PySpark

為了幫助大家快速掌握PySpark大數(shù)據(jù)分析核心技術(shù),我們邀請中電金信軟件有限公司高級軟件工程師、《PySpark大數(shù)據(jù)分析實戰(zhàn)》作者,伍鮮老師。于2月29日(周四),為大家?guī)砻赓M直播分享,“程序員核心技能提升”系列直播講座 第13講——如何快速入門PySpark大數(shù)據(jù)分析

直播主題:程序員核心技能提升”系列直播講座 第13講——如何快速入門PySpark大數(shù)據(jù)分析開放時間:2024年2月29日(周四)20:00主講老師:伍鮮課程類型:視頻直播觀看平臺:?九州云播平臺, 機械工業(yè)出版社“IT有得聊”視頻號

合作媒體:SegmentFault 思否、蔻享學(xué)術(shù)、示說網(wǎng)、志明與數(shù)據(jù)、數(shù)據(jù)社

講師介紹:伍鮮,中電金信軟件有限公司高級軟件工程師

擁有多年金融領(lǐng)域大數(shù)據(jù)處理實戰(zhàn)經(jīng)驗,曾負(fù)責(zé)多家銀行的Teradata數(shù)據(jù)倉庫、FusionInsight大數(shù)據(jù)集群、阿里云大數(shù)據(jù)倉庫、智能營銷客戶集市和客戶中心建設(shè)。

撰? 稿? 人:計旭

責(zé)任編輯:張淑謙

審? 核? 人:曹新宇

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
SN74LV244APW 1 Texas Instruments Eight-channel 2-V to 5.5-V buffers with tri-state outputs 20-TSSOP -40 to 125

ECAD模型

下載ECAD模型
$0.83 查看
XRCGB24M000F3A00R0 1 Murata Manufacturing Co Ltd Parallel - Fundamental Quartz Crystal, 24MHz Nom, ROHS AND REACH COMPLIANT, SMALL, SMD, 4 PIN

ECAD模型

下載ECAD模型
$0.45 查看
X1G004171004700 1 Seiko Epson Corporation CMOS Output Clock Oscillator,
$2.94 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜