Spark入門及環(huán)境搭建

一垮刹、Spark是什么

Spark是Apache下的一個用于大規(guī)模數(shù)據(jù)處理的統(tǒng)一分析引擎,Unified engine for large-scale data analytics.

Spark還是一個支持多語言的(Python培他、SQL、Scala遗座、Java靶壮、R),可以在單節(jié)點(diǎn)或者集群上用作數(shù)據(jù)工程员萍、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的內(nèi)存計算引擎腾降。

Spark借鑒了MapReduce的思想發(fā)展而來,保留了其分布式并行計算的優(yōu)點(diǎn)碎绎,并改進(jìn)了其缺陷螃壤,讓中間數(shù)據(jù)存儲在內(nèi)存中從而提高了運(yùn)行速度,并提供了豐富的操作數(shù)據(jù)的API筋帖,提升了開發(fā)的效率奸晴。

Spark工作示意圖

二、為什么要使用Spark

談起Spark日麸,就不得不對比Hadoop寄啼,相比Hadoop而言,Spark具有更大的優(yōu)勢代箭,但是它并不能完全替代Hadoop墩划,如下是它們之間的一個簡單對比:

Hadoop Spark
類型 是大數(shù)據(jù)基礎(chǔ)平臺,包括HDFS存儲嗡综、MapReduce計算乙帮、Yarn資源調(diào)度 僅是一個計算框架
場景 基于磁盤的海量數(shù)據(jù)批處理場景 基于內(nèi)存的海量數(shù)據(jù)批處理流計算
價格 對機(jī)器要求低极景,價格低 對機(jī)器內(nèi)存要求高察净,價格貴
編程 MR框架,API較為底層盼樟,算法適應(yīng)性低氢卡,編程較為復(fù)雜 RDD組成DAG的模式,API較為高層晨缴,方便編程
存儲 中間計算結(jié)果存在HDFS的磁盤上译秦,延遲高 中間計算結(jié)果存在內(nèi)存中,延遲低
運(yùn)行 Task以進(jìn)程方式維護(hù),任務(wù)啟動慢 Task以線程方式維護(hù)诀浪,任務(wù)啟動快,可批量創(chuàng)建提高并行能力

總結(jié)下來延都,Spark只是一個計算框架雷猪,頂多用來替換Hadoop中的MapReduce計算框架,而HDFS和Yarn仍然是大數(shù)據(jù)技術(shù)棧的主流晰房。

Spark的四大特點(diǎn)是:

  • 速度快求摇,由于是基于DAG的內(nèi)存計算框架,速度比Hadoop要快100倍殊者;

  • 易于使用与境,支持Python、SQL猖吴、Scala摔刁、Java、R在內(nèi)的主流數(shù)據(jù)分析語言海蔽,用戶涵蓋面大共屈,API使用簡潔高效;

  • 通用性強(qiáng)党窜,支持對接多種數(shù)據(jù)源拗引,比如LocalFS、HDFS幌衣、Hive矾削、Text、CSV豁护、Json等等哼凯;

    Spark支持多種數(shù)據(jù)源

而且在Spark核心的基礎(chǔ)上,還提供了SparkSQL楚里、StructedStreaming挡逼、SparkStreaming、MLlib腻豌、GraphX等工具庫家坎,可以在一個應(yīng)用里面無縫切換使用;

Spark平臺工具一覽
  • 運(yùn)行方式靈活吝梅,支持多種運(yùn)行方式虱疏,包括local、standalone苏携、Spark on Yarn做瞪、Mesos、Kubernetes、云平臺等等装蓬;

三著拭、Spark是如何工作的

我們在原先學(xué)習(xí)Yarn的時候,有提到過Yarn里面的角色:

  • ResourceManager牍帚,負(fù)責(zé)整個集群的資源管理和調(diào)度儡遮;
  • NodeManager,負(fù)責(zé)當(dāng)前節(jié)點(diǎn)的資源管理并監(jiān)控資源匯報給ResourceManager暗赶;
  • ApplicationMaster鄙币,負(fù)責(zé)應(yīng)用任務(wù)的執(zhí)行和管理,一個應(yīng)用任務(wù)僅有一個AM蹂随,且運(yùn)行在節(jié)點(diǎn)的容器中十嘿;
  • TaskContainer,負(fù)責(zé)具體任務(wù)的執(zhí)行岳锁,并匯報給AM绩衷,一個應(yīng)用任務(wù)會被拆分為多個Task,運(yùn)行在任意節(jié)點(diǎn)的容器中激率;
Yarn集群角色示意圖

那么Spark想要實(shí)現(xiàn)計算任務(wù)和資源調(diào)度唇聘,那么也會擁有類似Yarn的角色和職能:

  • Master,類似Yarn中的ResourceManager柱搜,管理整個集群中的資源和調(diào)度迟郎;在Spark on Yarn的模式下沒有Master,由Yarn的ResourceManager替代聪蘸;
  • Worker宪肖,類似Yarn中的NodeManager,管理當(dāng)前節(jié)點(diǎn)的資源并向Master匯報健爬;在Spark on Yarn的模式下沒有Worker控乾,由Yarn的NodeManager替代;
  • Driver娜遵,類似Yarn中的AM蜕衡,一個應(yīng)用任務(wù)對應(yīng)一個Driver,負(fù)責(zé)管理任務(wù)的執(zhí)行设拟;在Spark on Yarn的模式下慨仿,AM和Driver將會并存在節(jié)點(diǎn)的容器中;
  • Executor纳胧,類似Yarn中的TaskContainer镰吆,也是以容器的形式負(fù)責(zé)具體任務(wù)的執(zhí)行;
Spark集群角色示意圖

四跑慕、Spark環(huán)境搭建

在搭建Spark不同的部署模式之前万皿,我們都需要做一些準(zhǔn)備工作摧找,在上面運(yùn)行方式的內(nèi)容中,我們介紹了6種牢硅,但是本文只介紹如下的2種最常見的蹬耘,其它的比如Standalone模式需要借助虛擬機(jī)實(shí)現(xiàn)集群,在企業(yè)中很少用到减余,而Mesos综苔、K8s、和云平臺的方式和Spark本身并無關(guān)系休里,就待以后再介紹赃承。

Spark的運(yùn)行依賴于Hadoop悴侵,因此我們需要準(zhǔn)備好:

  • 服務(wù)器,從阿里云購買ECS服務(wù)器抓于,Local模式就買一臺浇借,Spark on Yarn集群模式就購買三臺;
  • 操作系統(tǒng)巾遭,Linux CentOS7.5 X64闯估;
  • JDK,配置好JDK環(huán)境骑素,確保java -version能執(zhí)行刚夺;
  • Hadoop,按照往期教程搭建單機(jī)或者集群模式的Hadoop環(huán)境阳距;

4.1 Local模式

Local模式即本地模式结借,是一種只能在開發(fā)和測試中使用的模式,因?yàn)槠浔举|(zhì)就是啟動一個JVM進(jìn)程咖熟,通過啟動多個線程來提供并行計算能力執(zhí)行多個Task任務(wù),其不能算是分布式的集群郭赐,不能用在生產(chǎn)環(huán)境确沸。Local模式分為:

  • Local[n],n表示線程數(shù)观谦,通常n小于等于CPU核心數(shù)桨菜,可以充分利用CPU的計算能力,n不指定則默認(rèn)為1泻红;
  • Local[*]霞掺,表示按照CPU最多的核心數(shù)設(shè)置線程數(shù);

在Local模式下缠劝,因?yàn)橹挥幸粋€進(jìn)程挤巡,所以Master、Worker和Driver角色就是其進(jìn)程本身喉恋,而且不會有Executor角色母廷,任務(wù)Task的執(zhí)行會由Driver啟動的多線程來完成并行計算;而且在同一時間氓鄙,只能執(zhí)行一個Spark應(yīng)用程序业舍。

我們能將下載好的Spark壓縮包放到/soft目錄下并解壓縮升酣,下載可以從國內(nèi)鏡像源下載态罪,會快很多。

cd /soft
tar -zxvf spark-3.3.2-bin-hadoop3.tgz

然后我們設(shè)置Spark的環(huán)境變量:

vim /etc/profile
export SPARK_HOME=/root/soft/spark-3.3.2-bin-hadoop3
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile

此時绩聘,我們就可以運(yùn)行和使用Spark應(yīng)用程序了:

# 運(yùn)行Spark自帶的示例程序——計算圓周率
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/root/soft/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar \
20

INFO SparkContext: Running Spark version 3.3.2
......
INFO Utils: Successfully started service 'sparkDriver' on port 34697.
......
INFO Utils: Successfully started service 'SparkUI' on port 4040.
......
INFO Executor: Starting executor ID driver on host node1
......
INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0) (node1, executor driver, partition 0, PROCESS_LOCAL, 4                       578 bytes) taskResourceAssignments Map()
INFO TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1) (node1, executor driver, partition 1, PROCESS_LOCAL, 4                       578 bytes) taskResourceAssignments Map()
......
# 打印出計算結(jié)果
Pi is roughly 3.1421555710777858
......
INFO SparkUI: Stopped Spark web UI at http://node1:4040
......
INFO SparkContext: Successfully stopped SparkContext
......

如上是執(zhí)行提交到Spark的應(yīng)用程序的模式凿菩,執(zhí)行完成Spark就退出了帜讲,其實(shí)Spark還是支持命令行模式,命令行模式有很多種会喝,比如:

  • pyspark玩郊,python語言的命令行交互窗口译红;
  • spark-shell兴溜,scala語言的命令行交互窗口;
  • sparkR刨沦,R語言的命令行交互窗口膘怕;
  • spark-sql挣柬,SQL語言的命令行交互窗口;

由于Spark本身就是使用scala實(shí)現(xiàn)的货岭,我們就使用spark-shell來體驗(yàn)一下命令行交互窗口的使用:

[root@node1 bin]# spark-shell
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
23/03/10 15:10:52 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Spark context Web UI available at http://node1:4040
Spark context available as 'sc' (master = local[*], app id = local-1678432255647).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 3.3.2
      /_/

Using Scala version 2.12.15 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_351)
Type in expressions to have them evaluated.
Type :help for more information.

# 等待輸入scala命令
scala> sc.parallelize(Array(1,2,3,4,5)).map(x => x * 10).collect()
res0: Array[Int] = Array(10, 20, 30, 40, 50)

在使用命令行模式的時候,Spark守護(hù)進(jìn)程會一直存在髓堪,此時訪問4040端口就能看到Spark的一些信息,比如執(zhí)行器Executor驶沼、集群環(huán)境信息商乎、任務(wù)Job情況、Job執(zhí)行的Stage情況等鲜戒;

4.2 Spark onYarn模式

Spark on Yarn集群模式才是企業(yè)生產(chǎn)環(huán)境中最常使用的模式抹凳,由于至少要準(zhǔn)備三臺服務(wù)器,本教程暫時擱置該搭建過程失都,網(wǎng)上也有很多類似的教程幸冻,此處就先省略了洽损。Spark的驗(yàn)證可通過如下命令驗(yàn)證:

jps
844046 ResourceManager
3863790 RunJar
# Spark的Master角色
859128 Master
641310 Jps
# Spark的Worker角色
859973 Worker
504718 JobHistoryServer
3863616 RunJar
843665 SecondaryNameNode
846707 NameNode
894978 QuorumPeerMain


# 進(jìn)入scala命令交互模式
spark-shell --master yarn
......
scala> sc.parallelize(Array(1,2,3,4,5)).map(x => x * 10).collect()
res0: Array[Int] = Array(10, 20, 30, 40, 50)

# 提交代碼運(yùn)行
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
/root/soft/spark-3.3.2-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.2.jar \
20

......
Pi is roughly 3.1421555710777858

集群Cluster模式:Driver在Yarn的容器中運(yùn)行碑定,提交任務(wù)的客戶端可能看不到太多日志信息,性能和網(wǎng)絡(luò)情況較好漫试,適合生產(chǎn)環(huán)境碘赖;

客戶端Client模式:Driver在提交任務(wù)的客戶端上運(yùn)行,方便打印日志秘车,但是網(wǎng)絡(luò)流量大叮趴,延遲會高权烧,適合開發(fā)和測試環(huán)境;

Spark on yarn的client妻率、cluster模式提交job流程及區(qū)別_spark on yarn client_java編程藝術(shù)的博客-CSDN博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末走净,一起剝皮案震驚了整個濱河市孤里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说搅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異霍衫,居然都是意外死亡慕淡,警方通過查閱死者的電腦和手機(jī)沸毁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門携兵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搂誉,“玉大人,你說我怎么就攤上這事并级〕氨蹋” “怎么了父阻?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長煤篙。 經(jīng)常有香客問我毁腿,道長,這世上最難降的妖魔是什么已烤? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任身害,我火速辦了婚禮,結(jié)果婚禮上塌鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己丙猬,他們只是感情好费韭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布抢埋。 她就那樣靜靜地躺著揪垄,像睡著了一般饥努。 火紅的嫁衣襯著肌膚如雪酷愧。 梳的紋絲不亂的頭發(fā)上溶浴,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音拱烁,去河邊找鬼。 笑死邦投,一個胖子當(dāng)著我的面吹牛志衣,可吹牛的內(nèi)容都是我干的念脯。 我是一名探鬼主播绿店,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼转培!你這毒婦竟也來了浸须?” 一聲冷哼從身側(cè)響起删窒,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后测萎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硅瞧,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡或辖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耳鸯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片县爬。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纲缓,靈堂內(nèi)的尸體忽然破棺而出祝高,到底是詐尸還是另有隱情工闺,我是刑警寧澤陆蟆,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站林束,受9級特大地震影響壶冒,放射性物質(zhì)發(fā)生泄漏胖腾。R本人自食惡果不足惜咸作,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一墅诡、第九天 我趴在偏房一處隱蔽的房頂上張望书斜。 院中可真熱鬧荐吉,春花似錦、人聲如沸痪欲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雇锡。三九已至,卻和暖如春立肘,著一層夾襖步出監(jiān)牢的瞬間赛不,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淋纲,地道東北人洽瞬。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓样漆,卻偏偏與公主長得像放祟,于是被迫代替她去往敵國和親鞋喇。 傳聞我的和親對象是個殘疾皇子执桌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容