溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spark 初體驗(yàn)

發(fā)布時(shí)間:2020-07-01 09:25:14 來(lái)源:網(wǎng)絡(luò) 閱讀:363 作者:原生zzy 欄目:大數(shù)據(jù)

spark 初體驗(yàn)

一、spark的產(chǎn)生背景

(1)MapReduce的發(fā)展:

  1. MRv1的缺點(diǎn):

  • 早在 Hadoop1.x 版本,當(dāng)時(shí)采用的是 MRv1 版本的 MapReduce 編程模型。MRv1 版本的實(shí)現(xiàn) 都封裝在 org.apache.hadoop.mapred 包中,MRv1 的 Map 和 Reduce 是通過(guò)接口實(shí)現(xiàn)的。
    MRv1 只有三個(gè)部分運(yùn)行時(shí)環(huán)境(JobTracker 和 TaskTracker)、編程模型(MapReduce)、 數(shù)據(jù)處理引擎(MapTask 和 ReduceTask)。

  • 可擴(kuò)展性差:在運(yùn)行時(shí),JobTracker 既負(fù)責(zé)資源管理又負(fù)責(zé)任務(wù)調(diào)度,當(dāng)集群繁忙時(shí), JobTracker 很容易成為瓶頸,最終導(dǎo)致它的可擴(kuò)展性問(wèn)題。

  • 可用性差:采用了單節(jié)點(diǎn)的 Master,沒(méi)有備用 Master 及選舉操作,這導(dǎo)致一旦 Master 出現(xiàn)故障,整個(gè)集群將不可用。(單點(diǎn)故障

  • 資源利用率低:TaskTracker 使用“slot”等量劃分本節(jié)點(diǎn)上的資源量。slot 分為 Map slot 和 Reduce slot 兩種,分別供 MapTaskReduceTask 使用。有時(shí)會(huì)因?yàn)樽鳂I(yè)剛剛啟動(dòng)等原因?qū)е?MapTask 很多,而 Reduce Task 任 務(wù)還沒(méi)有調(diào)度的情況,這時(shí) Reduce slot 也會(huì)被閑置。

  • 不能支持多種MapReduce框架:無(wú)法通過(guò)可插拔方式將自身的 MapReduce 框架替換為其他實(shí)現(xiàn),如 Spark、Storm 等。

      2. MRv2的缺點(diǎn):

  • MRv2中,重用了 MRv1 中的編程模型和數(shù)據(jù)處理引擎。但是運(yùn)行時(shí)環(huán)境被重構(gòu)了。JobTracker 被拆分成了通用的:資源調(diào)度平臺(tái)(ResourceManager,簡(jiǎn)稱 RM)、節(jié)點(diǎn)管理器(NodeManager)、負(fù)責(zé)各個(gè)計(jì)算框架的任務(wù)調(diào)度模型(ApplicationMaster,簡(jiǎn)稱 AM)。但是由于對(duì) HDFS 的頻繁操作(包括計(jì)算結(jié) 果持久化、數(shù)據(jù)備份、資源下載及 Shuffle 等)導(dǎo)致磁盤 I/O 成為系統(tǒng)性能的瓶頸,因此只適用于離線數(shù)據(jù)處理或批處理,而不能支持對(duì)迭代式、交互式、流式數(shù)據(jù)的處理。

 

(2)Spark的優(yōu)勢(shì):

  • 減少了磁盤的I/O:Spark 允許將 map 端的中間輸出和結(jié)果存儲(chǔ)在內(nèi)存中,reduce 端在拉取中間結(jié)果時(shí)避免了大量的磁盤 I/O。Spark 將應(yīng)用程序上傳的資源文件緩沖到 Driver 本地文件服務(wù)的內(nèi)存中,當(dāng) Executor 執(zhí)行任務(wù)時(shí)直接從 Driver 的內(nèi)存 中讀取,也節(jié)省了大量的磁盤 I/O。

  • 增加并行度:park 把不同的環(huán)節(jié)抽象為 Stage,允許多個(gè) Stage 既可以串行執(zhí)行,又可以并行執(zhí)行。

  • 避免重復(fù)計(jì)算:當(dāng) Stage 中某個(gè)分區(qū)的 Task 執(zhí)行失敗后,會(huì)重新對(duì)此 Stage 調(diào)度,但在重新 調(diào)度的時(shí)候會(huì)過(guò)濾已經(jīng)執(zhí)行成功的分區(qū)任務(wù),所以不會(huì)造成重復(fù)計(jì)算和資源浪費(fèi)。

  • 可選擇的shuffle:Spark 可以根據(jù)不同場(chǎng)景選擇在 map 端排序或者 reduce 端排序。

  • 靈活的內(nèi)存管理策略:Spark 將內(nèi)存分為堆上的存儲(chǔ)內(nèi)存、堆外的存儲(chǔ)內(nèi)存、堆上的執(zhí)行內(nèi)存、堆外的執(zhí)行內(nèi)存 4 個(gè)部分。Spark 既提供了執(zhí)行內(nèi)存和存儲(chǔ)內(nèi)存之間是固定邊界的實(shí)現(xiàn),又提供了執(zhí)行內(nèi)存和存儲(chǔ)內(nèi)存之間是“軟”邊界的實(shí)現(xiàn)。Spark 默認(rèn)使用“軟”邊界的實(shí)現(xiàn),執(zhí)行內(nèi)存或存儲(chǔ)內(nèi)存中的任意一方在資源不足時(shí)都可以借用另一方的內(nèi)存,最大限度的提高 資源的利用率,減少對(duì)資源的浪費(fèi)。。Spark 由于對(duì)內(nèi)存使用的偏好,內(nèi)存資源的多寡和使用 率就顯得尤為重要,為此 Spark 的內(nèi)存管理器提供的 Tungsten 實(shí)現(xiàn)了一種與操作系統(tǒng)的內(nèi)存 Page 非常相似的數(shù)據(jù)結(jié)構(gòu),用于直接操作操作系統(tǒng)內(nèi)存,節(jié)省了創(chuàng)建的 Java 對(duì)象在堆中占 用的內(nèi)存,使得 Spark 對(duì)內(nèi)存的使用效率更加接近硬件。Spark 會(huì)給每個(gè) Task 分配一個(gè)配套 的任務(wù)內(nèi)存管理器,對(duì) Task 粒度的內(nèi)存進(jìn)行管理。Task 的內(nèi)存可以被多個(gè)內(nèi)部的消費(fèi)者消費(fèi),任務(wù)內(nèi)存管理器對(duì)每個(gè)消費(fèi)者進(jìn)行 Task 內(nèi)存的分配與管理,因此 Spark 對(duì)內(nèi)存有著更細(xì)粒度的管理

(3)spark生態(tài):

spark 初體驗(yàn)

Spark 生態(tài)圈以 SparkCore 為核心,從 HDFS、Amazon S3 或者 HBase 等持久層讀取數(shù)據(jù),以 MESOS、YARN 和自身攜帶的 Standalone 為資源管理器調(diào)度 Job 完成 Spark 應(yīng)用程序的計(jì)算。

  • SparkShell/SparkSubmit 的批處理

  • SparkStreaming 的實(shí)時(shí)處理應(yīng)用

  • SparkSQL 的結(jié)構(gòu)化數(shù)據(jù)處理/即席查詢

  • BlinkDB 的權(quán)衡查詢

  • MLlib/MLbase的機(jī)器學(xué)習(xí)、GraphX的圖處理和PySpark的數(shù)學(xué)/科學(xué)計(jì)算和SparkR的數(shù)據(jù)分析。

 

(4)spark特點(diǎn):

    spark 初體驗(yàn)

  • Seed快速高效:Spark 允許將中間輸出和結(jié)果存儲(chǔ)在內(nèi)存中,節(jié)省了大量的磁盤 IO。Apache Spark 使用最先進(jìn)的 DAG 調(diào)度程序,查詢優(yōu)化程序和物理執(zhí)行引擎,實(shí)現(xiàn)批量和流式數(shù)據(jù)的高性能。同時(shí) Spark 自身的 DAG 執(zhí)行引擎也支持?jǐn)?shù)據(jù)在內(nèi)存中的計(jì)算。Spark 官網(wǎng)聲稱性能比 Hadoop 快 100 倍。即便是內(nèi)存不足需要磁盤 IO,其速度也是 Hadoop 的 10 倍以上

  spark 初體驗(yàn)


    • Generality:全棧式數(shù)據(jù)處理:支持批處理、支持交互式查詢、支持交互式查詢、支持機(jī)器學(xué)習(xí)、支持圖計(jì)算。

    • Ease of Use 簡(jiǎn)潔易用:Spark 現(xiàn)在支持 Java、Scala、Python 和 R 等編程語(yǔ)言編寫應(yīng)用程序,大大降低了使用者的門檻。自帶了 80 多個(gè)高等級(jí)操作符(算子),允許在 Scala,Python,R 的 shell 中進(jìn)行交互式查詢,可 以非常方便的在這些 Shell 中使用 Spark 集群來(lái)驗(yàn)證解決問(wèn)題的方法。

    spark 初體驗(yàn)


      • 可用性高:Spark 也可以不依賴于第三方的資源管理和調(diào)度器,它實(shí)現(xiàn)了 Standalone 作為其 內(nèi)置的資源管理和調(diào)度框架,這樣進(jìn)一步降低了 Spark 的使用門檻,使得所有人都可以非常 容易地部署和使用 Spark,此模式下的 Master 可以有多個(gè),解決了單點(diǎn)故障問(wèn)題。當(dāng)然,此模式也完全可以使用其他集群管理器替換,比如 YARN、Mesos、Kubernetes、EC2 等。

      • 豐富的數(shù)據(jù)源支持:Spark 除了可以訪問(wèn)操作系統(tǒng)自身的本地文件系統(tǒng)和 HDFS 之外,還可 以訪問(wèn) Cassandra、HBase、Hive、Tachyon(基于內(nèi)存存儲(chǔ)) 以及任何 Hadoop 的數(shù)據(jù)源。這極大地方便了已經(jīng) 使用 HDFS、HBase 的用戶順利遷移到 Spark。

              (5)spark的應(yīng)用場(chǎng)景:

    ① Yahoo 將 Spark 用在 Audience Expansion 中的應(yīng)用,進(jìn)行點(diǎn)擊預(yù)測(cè)和即席查詢

    ② 淘寶技術(shù)團(tuán)隊(duì)使用了 Spark 來(lái)解決多次迭代的機(jī)器學(xué)習(xí)算法高計(jì)算復(fù)雜度的算法等。 應(yīng)用于內(nèi)容推薦、社區(qū)發(fā)現(xiàn)

    ③ 騰訊大數(shù)據(jù)精準(zhǔn)推薦借助 Spark 快速迭代的優(yōu)勢(shì),實(shí)現(xiàn)了在“數(shù)據(jù)實(shí)時(shí)采集、算法實(shí)時(shí)訓(xùn)練、系統(tǒng)實(shí)時(shí)預(yù)測(cè)”的全流程實(shí)時(shí)并行高維算法,最終成功應(yīng)用于廣點(diǎn)通 PCTR 投放 系統(tǒng)上。

    優(yōu)酷土豆將 Spark 應(yīng)用于視頻推薦(圖計(jì)算)、廣告業(yè)務(wù),主要實(shí)現(xiàn)機(jī)器學(xué)習(xí)、圖計(jì)算等 迭代計(jì)算。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI