現(xiàn)在來學(xué)一學(xué)spark這個內(nèi)存計算引擎胳螟,主要應(yīng)用于大規(guī)模數(shù)據(jù)的計算唆垃。
一胁住、簡介
和MapReduce都是計算引擎趁猴,但兩者還是有很大區(qū)別的,MapReduce計算的中間數(shù)據(jù)都是存儲在硬盤上的彪见,而Spark計算的中間數(shù)據(jù)都是存儲在內(nèi)存里的缨叫,除非有說明說讓Spark把中間數(shù)據(jù)存儲到硬盤上。這樣可想而知基于內(nèi)存诽凌,Spark的運行效率就比MapReduce快了許多了矾瑰。
下圖舉例:把這么一座山當(dāng)成是大規(guī)模的數(shù)據(jù),開發(fā)商要把山上的樹用去做桌子就相當(dāng)于做計算酵镜,于是分配工人p們?nèi)ド缴峡硺涞锏铮鄠€不同的工人們在砍樹就相當(dāng)于是在并行計算,這大概就是云計算的思想:計算向數(shù)據(jù)移動淮韭,即移動的計算而不是數(shù)據(jù)垢粮, 最終目的就是提高計算效率。
二靠粪、Spark架構(gòu)
搭建過hadoop集群架構(gòu)蜡吧,也就熟悉了套路,spark集群架構(gòu)也是采用主從架構(gòu)(master主節(jié)點和worker從節(jié)點)占键,master節(jié)點管理著各個worker節(jié)點昔善,從而也就掌握著整個集群的資源。
三捞慌、Spark下載安裝
直接去官網(wǎng)http://spark.apache.org/ 下載耀鸦,不過下載時注意,spark版本要對應(yīng)還hadoop的版本,我的hadoop版本安裝的是2.6.4所以要勾選好對應(yīng)的spark包袖订,目前我選擇的是spark2.4.3搭配hadoop2.6.4氮帐。
四、Spark集群搭建
- 1洛姑、軟件安裝
需要用到hadoop上沐,java,scala楞艾,spark参咙,直接把下載好的文件從windows上傳到linux服務(wù)器上,再使用tar -zxvf -C 文件名
命令解壓文件硫眯,hadoop和java的安裝我就不提了蕴侧,自行百度。接下來是scala的安裝配置两入,同樣是下載好上傳到linux服務(wù)器然后解壓净宵,之后輸入命令vi /etc/profile
修改這個文件把scala的安裝目錄給加進去PATH屬性中,:wq
命令保存退出裹纳,再輸入source /etc/profile
命令使環(huán)境變量生效择葡,最后輸入命令scala -version
查看是否安裝scala成功。 - 2剃氧、spark環(huán)境配置
先cd /usr/local/spark/conf
到此目錄下敏储,找到spark-env.sh.templete
文件改個名為spark-env.sh
,再加入以下代碼朋鞍,對應(yīng)注釋在里面已添。注意:以下路徑只是我個人電腦路徑,大家自行修改為各自的軟件安裝路徑滥酥。
JAVA_HOME=/usr/java/default #java安裝路徑
SCALA_HOME=/usr/local/scala #scala安裝路徑
HADOOP_HOME=/usr/local/hadoop #hadoop安裝路徑
SPARK_MASTER_PORT=7077 #資源申請端口
SPARK_MASTER_WEBUI_PORT=8888 #對外訪問web界面端口
SPARK_MASTER_IP=10.14.28.100 #spark集群的master節(jié)點的IP地址
SPARK_MASTER_OPTS="-Dspark.worker.timeout=100" #從節(jié)點發(fā)送心跳給主節(jié)點的超時時間酝碳,使得主節(jié)點才知道從節(jié)點的生存狀態(tài)
SPARK_WORKER_MEMORY=3G #每個worker節(jié)點最大能分配給executors的內(nèi)存大小
SPARK_WORKER_CORES=2 #每個worker節(jié)點所占有的CPU核數(shù)目
SPARK_WORKER_INSTANCES=1 #每臺機器上開啟的worker節(jié)點的數(shù)目
SPARK_LOCAL_DIRS=/var/spark #集群運行本地目錄
SPARK_WORKER_DIR="/var/spark/work" #存放任務(wù)在計算中產(chǎn)生的中間數(shù)據(jù)
SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=259200" #開啟自動清空worker工作目錄區(qū)的功能,后面是數(shù)據(jù)有效期
- 3恨狈、配置
spark/conf
目錄下的slaves
文件,這跟我之前搭建hadoop集群時候一樣寫上管理著的各個slave機器就好呛讲,然后cd /usr/local
到目錄下禾怠,使用命令scp -r spark slave1:/usr/local
把spark安裝拷貝到slave1機器的同個路徑下,后面同理slave2贝搁、slave3機器吗氏。附:關(guān)于scp拷貝命令的解析 - 4、之后進入sbin目錄下把
start-all.sh
和stop-all.sh
腳本名給修改掉雷逆,因為hadoop集群也有這2個腳本弦讽,怕執(zhí)行命令時沖突了。圖片.png - 5、最后使用命令
vi /etc/profile
修改PATH環(huán)境變量往产,把spark的bin路徑和sbin路徑加進去被碗,這樣就可以在所有命令下執(zhí)行這個腳本命令了,注意:修改完后要source /etc/profile
下仿村,使環(huán)境變量生效锐朴。 -
6、我把集群所有節(jié)點都啟動起來了蔼囊,包括之前搭建的hadoop集群的yarn和hdfs焚志,截圖如下:圖片.png圖片.png
五、談?wù)勚鲝募軜?gòu)的單點故障
- 1畏鼓、
什么是單點故障酱酬?
通常分布式系統(tǒng)采用的是主從架構(gòu),由一個主節(jié)點管理著一堆從節(jié)點云矫,主節(jié)點分發(fā)業(yè)務(wù)膳沽,從節(jié)點處理業(yè)務(wù)。單點故障就是當(dāng)主節(jié)點掛了泼差,整個系統(tǒng)就掛了贵少,這就是由一個主節(jié)點引發(fā)的故障,稱為單點故障堆缘,但如果是一個從節(jié)點掛了對集群對外提供服務(wù)是不會有影響的滔灶。 - 2、
傳統(tǒng)方式解決單點故障
多加一個備用主節(jié)點吼肥。期間過程如下:image.png - 3啤斗、
使用zookeeper注冊服務(wù)解決單點故障
分布式鎖主要有zookeeper實現(xiàn)表箭,主節(jié)點在使用時,備用主節(jié)點會被加鎖而阻塞作為備用主節(jié)點钮莲。解決過程如下圖:
何為分布式鎖免钻?
就是為了控制多個進程訪問同一個資源時,這個資源能被有序訪問崔拥,主要控制進程的加鎖极舔、解鎖、鎖超時链瓦。
分布式協(xié)調(diào)可以解決多個進程的同步控制拆魏,主要核心是實現(xiàn)了分布式鎖,而zookeeper是一個分布式協(xié)調(diào)服務(wù)。
image.png
六渤刃、Spark部署的幾種模式
- 1拥峦、local(本地模式):常用于本地開發(fā)測試,該模式不會提交任務(wù)導(dǎo)集群中溪掀,只在本節(jié)點執(zhí)行事镣,分為local單線程和local-cluster多線程,不需要啟動Master進程和Worker進程揪胃。有
local:只啟動一個executor
璃哟、local[k]:啟動k個executor
、local[*]:啟動跟cpu數(shù)目相同的executor
喊递。 - 2随闪、Standalone(集群模式):分布式部署集群,自帶完整服務(wù)骚勘,資源管理和任務(wù)監(jiān)控都是spark自己搞定铐伴。
- 3、spark on yarn(集群模式):分布式部署集群俏讹,但把資源和任務(wù)監(jiān)控交給yarn管理当宴,spark直連yarn,不需要額外構(gòu)建spark集群泽疆,有yarn-client和yarn-cluster兩種模式户矢,主要區(qū)別在于:Driver程序的運行節(jié)點,即cluster模式的driver運行在集群子節(jié)點殉疼,有容錯功能梯浪,client模式的driver運行在客戶端。