日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

spark发行版笔记9

發(fā)布時(shí)間:2024/10/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spark发行版笔记9 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

感謝DT大數(shù)據(jù)夢(mèng)工廠支持提供技術(shù)支持,DT大數(shù)據(jù)夢(mèng)工廠專注于Spark發(fā)行版定制。

本期概覽:

1 Receiver生命全周期

首先,我們找到數(shù)據(jù)來源的入口,入口如下


Receiver的設(shè)計(jì)是極其巧妙的。它的設(shè)計(jì)非常的出色,很多的地方都值得我們認(rèn)真的學(xué)習(xí)。

在深入認(rèn)識(shí)Receiver之前,我們有必要思考一下,假如沒有spark,我們可以嘗試思考一下,Receiver不斷的接受輸入進(jìn)來的數(shù)據(jù),如果是我們來做,我們?cè)撛趺醋?#xff1f;該怎么啟動(dòng)Receiver呢?

我們嘗試從以下幾個(gè)方向來假設(shè)思考。

方式如下所示

Receiver是應(yīng)用程序啟動(dòng)的一部分,我們啟動(dòng)Receiver的時(shí)候,Receiver與InputStream是一一對(duì)應(yīng)的。假如我們啟動(dòng)多個(gè)Receiver,一個(gè)partition有多條一條數(shù)據(jù)是沒有關(guān)系的。但是這里有一個(gè)問題,從資源調(diào)度的角度看,有可能從一臺(tái)機(jī)器上啟動(dòng)多個(gè)Receiver,從而導(dǎo)致負(fù)載不均衡,同時(shí)也有可能導(dǎo)致Receiver啟動(dòng)失敗。因?yàn)镽DD不同的分片對(duì)應(yīng)不同的分片。在不同的機(jī)器上有可能Executor失敗,導(dǎo)致任務(wù)失敗。

我們要要求,只要我們的集群在運(yùn)行,我們的Receiver就要正常運(yùn)行。如果Receiver不正常運(yùn)行,就導(dǎo)致整個(gè)集群任務(wù)不能執(zhí)行,這是不可以接受的。

因此,我們的這倆個(gè)假設(shè)都不可行,可行的辦法是,Receiver可以失敗,但是不能影響Job的正常運(yùn)行。Receiver失敗后一定會(huì)容錯(cuò),最終一定會(huì)成功運(yùn)行,那么我們來看spark官方是怎么做這么一個(gè)巧妙的Receiver的容錯(cuò)性能的。

其實(shí)我們可以認(rèn)為InputStreams與Receivers是一一對(duì)應(yīng)的。

?

不過,這樣可能導(dǎo)致負(fù)載不均衡,因?yàn)镽eceiver在不同的機(jī)器上。另外Receiver啟動(dòng)可能失敗。

至今,我們?nèi)匀粵]有看到啟動(dòng)Receiver的代碼,那么啟動(dòng)它的代碼在哪呢?


然后接下來就是啟動(dòng)Receiver的方法了

這個(gè)代碼進(jìn)一步證明了一個(gè)Receiver只有一個(gè)InputStream與之對(duì)應(yīng)。


Driver層面決定在哪個(gè)Executor上執(zhí)行Receiver


終止一個(gè)Receiver,意味著不用重新啟動(dòng)一個(gè)JOB

Receiver start不會(huì)重試

為了啟動(dòng)Receiver,啟動(dòng)了一個(gè)spark作業(yè)


下面一個(gè)問題很重要:

這里要啟動(dòng)一個(gè)作業(yè),這個(gè)作業(yè)是每個(gè)Receiver都啟動(dòng)一個(gè)Job,還是多個(gè)Receiver啟動(dòng)一個(gè)Job.循環(huán)啟動(dòng)每個(gè)Receiver,每個(gè)Receiver啟動(dòng)一個(gè)Job

?

這樣,我們就解決了啟動(dòng)一個(gè)Task來啟動(dòng)Receiver的缺點(diǎn),每個(gè)Receiver對(duì)應(yīng)一個(gè)Job,對(duì)應(yīng)一個(gè)任務(wù)。最大程度的避免負(fù)載不均衡,不會(huì)使得Receiver失敗使得整個(gè)Job不能運(yùn)行。另外對(duì)解決任務(wù)傾斜也有一定好處。

重新啟動(dòng)Receiver的時(shí)候會(huì)將不可用的Executor剪掉

這里設(shè)計(jì)得非常的美妙,能保證Receiver無論如何都能成功的啟動(dòng)

任務(wù)一旦失敗,框架會(huì)裝作若無其事的ReStartReceiver,可以說設(shè)計(jì)得天衣無縫。

線程池的方式并發(fā)啟動(dòng)Receiver,因?yàn)榭赡懿煌腞eceiver接收來的數(shù)據(jù)是沒有耦合的

到現(xiàn)在,我們視乎還有一團(tuán)烏云沒有解開,那就是決定Receiver具體在哪些機(jī)器上,代碼如下

最后研究的一行代碼:保證Executor活著(默認(rèn)50個(gè)線程,20個(gè)并發(fā)度),作為一個(gè)SparkStreaming應(yīng)用程序,超過50個(gè)數(shù)據(jù)來源的可能性不大。

轉(zhuǎn)載于:https://www.cnblogs.com/lilingi/p/5515387.html

總結(jié)

以上是生活随笔為你收集整理的spark发行版笔记9的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。