99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線(xiàn)電話(huà):13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代為什么 spark 2.0 底層通信不用 Akka 而轉(zhuǎn)用 netty ?
為什么 spark 2.0 底層通信不用 Akka 而轉(zhuǎn)用 netty ?
2023-04-03
收藏

Apache Spark是一個(gè)分布式計(jì)算框架,設(shè)計(jì)初衷是為了處理大規(guī)模數(shù)據(jù)集的計(jì)算。隨著越來(lái)越多的企業(yè)開(kāi)始采用Spark進(jìn)行數(shù)據(jù)處理和分析,其性能和可靠性變得越來(lái)越重要。在這種情況下,底層通信的效率和魯棒性成為了至關(guān)重要的因素。在Spark 2.0中,Spark團(tuán)隊(duì)做出了一個(gè)重大決策:底層通信從Akka轉(zhuǎn)向Netty。這篇文章將探討這個(gè)決定的背景、原因和影響。

背景

在Spark 1.x版本中,Spark使用Akka作為其底層通信框架。Akka是一種基于Scala語(yǔ)言的消息傳遞框架,它可以輕松地實(shí)現(xiàn)分布式系統(tǒng)中的Actor模型,提供了高度并發(fā)的支持。但是,隨著Spark的廣泛應(yīng)用,Akka的一些缺點(diǎn)也逐漸顯露出來(lái)。具體來(lái)說(shuō),Akka存在兩個(gè)主要的問(wèn)題:

  • Akka本身依賴(lài)于Java虛擬機(jī)(JVM)級(jí)別的線(xiàn)程(thread),在大規(guī)模并行化的情況下,線(xiàn)程數(shù)量可能會(huì)非常龐大,導(dǎo)致調(diào)度和管理成本增加,進(jìn)而降低系統(tǒng)的性能。
  • Akka的消息傳遞模型是異步的,這意味著發(fā)送方無(wú)法知道消息何時(shí)被接收和處理。在某些情況下,這可能會(huì)導(dǎo)致消息丟失或延遲,進(jìn)而降低系統(tǒng)的健壯性。

針對(duì)這些問(wèn)題,Spark團(tuán)隊(duì)考慮替換Akka,尋找更高效、更穩(wěn)定的通信框架。

原因

Spark團(tuán)隊(duì)在選擇新的底層通信框架時(shí),考慮了以下因素:

性能

首先,Spark需要一個(gè)高效的通信框架,能夠快速地傳輸大量的數(shù)據(jù)。在大規(guī)模的數(shù)據(jù)集上,通信的開(kāi)銷(xiāo)往往比計(jì)算本身還要高昂,因此通信性能的優(yōu)化對(duì)于Spark的性能至關(guān)重要。

Netty是一個(gè)高性能的網(wǎng)絡(luò)通信框架,專(zhuān)門(mén)設(shè)計(jì)用于構(gòu)建高性能、高可靠的網(wǎng)絡(luò)應(yīng)用程序。與Akka相比,Netty采用更高效的I/O模型和線(xiàn)程管理方式,可以更好地利用現(xiàn)代計(jì)算機(jī)系統(tǒng)的多核心和多線(xiàn)程資源,在高并發(fā)的場(chǎng)景下保持更好的性能表現(xiàn)。

健壯性

其次,Spark需要一個(gè)健壯、可靠的通信框架,能夠保證消息正確性和可靠性。在分布式系統(tǒng)中,由于各種網(wǎng)絡(luò)異常和故障,消息的傳輸過(guò)程中可能會(huì)遇到各種問(wèn)題。因此,通信框架必須具備足夠的健壯性,能夠自適應(yīng)地應(yīng)對(duì)不同的異常情況,并盡可能地保證消息的正確性和可靠性。

Netty提供了諸如心跳檢測(cè)、連接超時(shí)控制、斷線(xiàn)重連等多種機(jī)制,能夠有效地處理各種網(wǎng)絡(luò)異常和故障,保證通信的可靠性和健壯性。

社區(qū)支持

最后,Spark需要一個(gè)活躍的社區(qū)和生態(tài)環(huán)境,能夠?yàn)槠涮峁┝己玫闹С趾头答?。通信框架作為Spark的底層組件之一,必須具備足夠的社區(qū)支持和生

態(tài)環(huán)境,能夠與Spark社區(qū)緊密配合,相互促進(jìn)。在選擇新的通信框架時(shí),必須考慮到其生態(tài)環(huán)境和社區(qū)支持情況,以確保其能夠長(zhǎng)期穩(wěn)定地運(yùn)行,并為Spark提供長(zhǎng)期的支持。

Netty作為一個(gè)成熟的開(kāi)源項(xiàng)目,擁有龐大的用戶(hù)和開(kāi)發(fā)者社區(qū),具備廣泛的應(yīng)用場(chǎng)景和豐富的功能庫(kù)。與Akka相比,Netty的生態(tài)環(huán)境更加成熟、穩(wěn)定,能夠?yàn)镾park提供更好的支持和反饋。

綜上所述,Spark團(tuán)隊(duì)最終決定將底層通信從Akka轉(zhuǎn)向Netty,以滿(mǎn)足Spark日益增長(zhǎng)的性能和可靠性需求。

影響

底層通信框架的改變對(duì)于Spark整體的影響十分深遠(yuǎn),主要體現(xiàn)在以下幾個(gè)方面:

性能提升

由于Netty采用更高效的I/O模型和線(xiàn)程管理方式,通信性能得到了明顯的提升。根據(jù)Spark官方測(cè)試數(shù)據(jù)顯示,使用Netty作為底層通信框架可以使Spark的性能提升10%-30%,特別是在大規(guī)模數(shù)據(jù)處理場(chǎng)景下表現(xiàn)更加優(yōu)秀。

可靠性增強(qiáng)

Netty提供了多種機(jī)制來(lái)保證消息的正確性和可靠性,如心跳檢測(cè)、連接超時(shí)控制、斷線(xiàn)重連等,可以有效地避免消息丟失或延遲等問(wèn)題,提高系統(tǒng)的健壯性和可靠性。

兼容性調(diào)整

由于底層通信框架的改變,Spark 2.0需要進(jìn)行一定的兼容性調(diào)整,以適應(yīng)新的通信框架。具體地,某些Spark API中與Akka相關(guān)的部分需要進(jìn)行修改或替換,以適應(yīng)Netty的API設(shè)計(jì)。

生態(tài)環(huán)境升級(jí)

Netty相對(duì)于Akka而言,具備更加成熟、穩(wěn)定的生態(tài)環(huán)境和社區(qū)支持,這也為Spark提供了更好的支持和發(fā)展空間。同時(shí),一些與Netty相關(guān)的生態(tài)組件也開(kāi)始出現(xiàn),如基于Netty的分布式RPC框架gRPC等,進(jìn)一步提升了Spark生態(tài)環(huán)境的質(zhì)量和穩(wěn)定性。

總體來(lái)說(shuō),底層通信框架的轉(zhuǎn)換為Spark帶來(lái)了明顯的性能和可靠性提升,同時(shí)也需要進(jìn)行一定的兼容性調(diào)整和生態(tài)環(huán)境升級(jí),為Spark未來(lái)的發(fā)展奠定了更加堅(jiān)實(shí)的基礎(chǔ)。

推薦學(xué)習(xí)書(shū)籍
《CDA一級(jí)教材》適合CDA一級(jí)考生備考,也適合業(yè)務(wù)及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線(xiàn)CDA網(wǎng)校,累計(jì)已有10萬(wàn)+在讀~

免費(fèi)加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線(xiàn)
立即咨詢(xún)
客服在線(xiàn)
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }