Spark內(nèi)置模塊
(1)Spark是一種基于內(nèi)存的快速癣缅、通用安聘、可擴(kuò)展的大數(shù)據(jù)分析引擎。
(2)SparkSQL麦向、SparkStreaming瘟裸、Spark Mlib、Spark Graghx诵竭、SparkCore
- Spark Core:實現(xiàn)了Spark的基本功能话告,包含任務(wù)調(diào)度、內(nèi)存管理卵慰、錯誤恢復(fù)沙郭、與存儲系統(tǒng)交互等模塊。Spark Core中還包含了對彈性分布式數(shù)據(jù)集(Resilient Distributed DataSet裳朋,簡稱RDD)的API定義病线。
- Spark SQL:是Spark用來操作結(jié)構(gòu)化數(shù)據(jù)的程序包。通過Spark SQL鲤嫡,我們可以使用 SQL或者Apache Hive版本的SQL方言(HQL)來查詢數(shù)據(jù)送挑。Spark SQL支持多種數(shù)據(jù)源,比如Hive表暖眼、Parquet以及JSON等惕耕。
- Spark Streaming:是Spark提供的對實時數(shù)據(jù)進(jìn)行流式計算的組件。提供了用來操作數(shù)據(jù)流的API诫肠,并且與Spark Core中的 RDD API高度對應(yīng)司澎。
- Spark MLlib:提供常見的機(jī)器學(xué)習(xí)(ML)功能的程序庫。包括分類区赵、回歸惭缰、聚類、協(xié)同過濾等笼才,還提供了模型評估漱受、數(shù)據(jù) 導(dǎo)入等額外的支持功能。
- 集群管理器:Spark 設(shè)計為可以高效地在一個計算節(jié)點到數(shù)千個計算節(jié)點之間伸縮計 算骡送。為了實現(xiàn)這樣的要求昂羡,同時獲得最大靈活性,Spark支持在各種集群管理器(Cluster Manager)上運行摔踱,包括Hadoop YARN虐先、Apache Mesos,以及Spark自帶的一個簡易調(diào)度 器派敷,叫作獨立調(diào)度器蛹批。
Spark特點
1)快:與Hadoo的MapReduce相比撰洗,Spark基于內(nèi)存的運算要快100倍以上,基于硬盤的運算也要快10倍以上腐芍。Spark實現(xiàn)了高效的DAC執(zhí)行引擎差导,可以通過基于內(nèi)存來高效處理數(shù)據(jù)流。計算的中間結(jié)果是存在于內(nèi)存中的猪勇。
2)易用:Spak支持Java设褐、Pthor和Scala的API,還支持超過30種高級算法泣刹,使用戶可以快速構(gòu)建不同的應(yīng)用助析。而且Spak支持交互式的Python和Scala的Shell,可以非常方便地在這些Shell中使用Spak集群來驗證解決問題的方法椅您。
3)通用:Spak提供了統(tǒng)一的解決方案外冀。Spark可以用于批處理、交互式查詢(SparkSQL)襟沮、實時處理(Spark Stearing)锥惋、機(jī)器學(xué)習(xí)(Spark MLlb)和圖計算(GraphX)昌腰。這些不同類型的處理都可以在同一個應(yīng)用中無縫使用开伏。減少了開發(fā)和維護(hù)的人力成本和部署平臺的物力成本。
4)兼容性:Spark可以非常方便地與其他的開源產(chǎn)品進(jìn)行融合遭商。比如固灵,Spark可以使用Hadoo的YAR和Apache Mesos作為它的資源管理和調(diào)度器,并且可以處理所有Hadoop支持的數(shù)據(jù)劫流,包括HDFS巫玻、HBase等。這對于已經(jīng)部署Hadoop集群的用戶特別重要祠汇,因為不需要做任何數(shù)據(jù)遷移就可以使用Spal的強(qiáng)大處理能力仍秤。
Spark運行模式
重要角色
- Driver(驅(qū)動器)
Spark的驅(qū)動器是執(zhí)行開發(fā)程序中的main方法的進(jìn)程。它負(fù)責(zé)開發(fā)人員編寫的用來創(chuàng)建SparkContext可很、創(chuàng)建RDD诗力,以及進(jìn)行RDD的轉(zhuǎn)化操作和行動操作代碼的執(zhí)行。如果你是用spark shell我抠,那么當(dāng)你啟動Spark shell的時候苇本,系統(tǒng)后臺自啟了一個Spark驅(qū)動器程序,就是在Spark shell中預(yù)加載的一個叫作 sc的SparkContext對象菜拓。如果驅(qū)動器程序終止瓣窄,那么Spark應(yīng)用也就結(jié)束了。主要負(fù)責(zé):
1)把用戶程序轉(zhuǎn)為作業(yè)(JOB)
2)跟蹤Executor的運行狀況
3)為執(zhí)行器節(jié)點調(diào)度任務(wù)
4)UI展示應(yīng)用運行狀況 - Executor(執(zhí)行器)
Spark Executor是一個工作進(jìn)程纳鼎,負(fù)責(zé)在 Spark 作業(yè)中運行任務(wù)俺夕,任務(wù)間相互獨立裳凸。Spark 應(yīng)用啟動時,Executor節(jié)點被同時啟動劝贸,并且始終伴隨著整個 Spark 應(yīng)用的生命周期而存在登舞。如果有Executor節(jié)點發(fā)生了故障或崩潰,Spark 應(yīng)用也可以繼續(xù)執(zhí)行悬荣,會將出錯節(jié)點上的任務(wù)調(diào)度到其他Executor節(jié)點上繼續(xù)運行菠秒。主要負(fù)責(zé):
1)負(fù)責(zé)運行組成 Spark 應(yīng)用的任務(wù),并將結(jié)果返回給驅(qū)動器進(jìn)程氯迂;
2)通過自身的塊管理器(Block Manager)為用戶程序中要求緩存的RDD提供內(nèi)存式存儲践叠。RDD是直接緩存在Executor進(jìn)程內(nèi)的,因此任務(wù)可以在運行時充分利用緩存數(shù)據(jù)加速運算嚼蚀。
運行模式
- Local模式
Local模式就是運行在一臺計算機(jī)上的模式禁灼,通常就是用于在本機(jī)上練手和測試。
它可以通過以下集中方式設(shè)置Master轿曙。
local:所有計算都運行在一個線程當(dāng)中弄捕,沒有任何并行計算,通常我們在本機(jī)執(zhí)行一些測試代碼导帝,或者練手守谓,就用這種模式;
local[K]:指定使用幾個線程來運行計算您单,比如local[4]就是運行4個Worker線程斋荞。通常我們的Cpu有幾個Core,就指定幾個線程虐秦,最大化利用Cpu的計算能力平酿;
local[]:這種模式直接幫你按照Cpu最多Cores來設(shè)置線程數(shù)了。
(1)基本語法
bin/spark-submit
--class <main-class>
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
... # other options
<application-jar>
[application-arguments]
(2)參數(shù)說明:
--master 指定Master的地址悦陋,默認(rèn)為Local
--class: 你的應(yīng)用的啟動類 (如 org.apache.spark.examples.SparkPi)
--deploy-mode: 是否發(fā)布你的驅(qū)動到worker節(jié)點(cluster) 或者作為一個本地客戶端 (client) (default: client)*
--conf: 任意的Spark配置屬性蜈彼, 格式key=value. 如果值包含空格,可以加引號“key=value”
application-jar: 打包好的應(yīng)用jar,包含依賴. 這個URL在集群中全局可見俺驶。 比如hdfs:// 共享存儲系統(tǒng)幸逆, 如果是 file:// path, 那么所有的節(jié)點的path都包含同樣的jar
application-arguments: 傳給main()方法的參數(shù)
--executor-memory 1G 指定每個executor可用內(nèi)存為1G
--total-executor-cores 2 指定每個executor使用的cup核數(shù)為2個
- Standalone模式
構(gòu)建一個由Master+Slave構(gòu)成的Spark集群痒钝,Spark運行在集群中秉颗。
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100
歷史服務(wù)端口(需要額外配置)
hadoop102:18080
- Yarn模式(重點)
Spark客戶端直接連接Yarn,不需要額外構(gòu)建Spark集群送矩。有yarn-client和yarn-cluster兩種模式蚕甥,主要區(qū)別在于:Driver程序的運行節(jié)點。
yarn-client:Driver程序運行在客戶端栋荸,適用于交互菇怀、調(diào)試凭舶,希望立即看到app的輸出
yarn-cluster:Driver程序運行在由RM(ResourceManager)啟動的AP(APPMaster)適用于生產(chǎn)環(huán)境。
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100