如何高效的學(xué)習(xí)Apache Spark?
網(wǎng)友解答: Spark定義a.是一個(gè)通用的大規(guī)模數(shù)據(jù)快速處理引擎。b.Spark就是一個(gè)大數(shù)據(jù)分布式處理框架。3.Spark在性能和方案的統(tǒng)一性都具有顯著的優(yōu)勢(shì)。Spark使用Spark
Spark定義
a.是一個(gè)通用的大規(guī)模數(shù)據(jù)快速處理引擎。
b.Spark就是一個(gè)大數(shù)據(jù)分布式處理框架。
3.Spark在性能和方案的統(tǒng)一性都具有顯著的優(yōu)勢(shì)。
Spark使用SparkSQL、Spark Streaming、MLlib、Graph幾乎完美地解決了大數(shù)據(jù)中的Batch Processing、Stream Processing、Ad-hocQuery(即席查詢)等三大核心問(wèn)題。如何學(xué)習(xí)Spark配置spark環(huán)境:先安裝linux,java,Scala,spark等軟件,配置環(huán)境變量,搭建集群。建議你先熟悉一下linux系統(tǒng)。學(xué)習(xí)scala語(yǔ)言 ,函數(shù)式編程,這些有點(diǎn)難度。我是學(xué)java過(guò)來(lái)的,感覺(jué)很不適應(yīng),語(yǔ)法感覺(jué)很怪,需要冷靜下來(lái)好好學(xué)習(xí),trait ,object 伴生對(duì)象,柯里化等概念還是需要好好理解的,他也有很多好處,比如apply()方法,很方便的新建一個(gè)對(duì)象那個(gè),用得多了,就覺(jué)得很好用,我現(xiàn)在就覺(jué)得很好用,學(xué)過(guò)java好理解一些,本質(zhì)一樣,表達(dá)方式不同而已。建議您學(xué)習(xí)一下java。spark學(xué)習(xí),最好學(xué)習(xí)spark的方式就是看官方文檔,跟著官方文檔過(guò)一遍手,基本就理解的差不多啦,接下來(lái)用idea集成編程完成的程序,調(diào)試測(cè)試等,基本就可以上手啦!接下深入理解就看源碼,深入Spark內(nèi)核,通過(guò)源碼掌握Spark的任務(wù)提交過(guò)程,掌握Spark集群的任務(wù)調(diào)度,尤其要精通DAGScheduler、TaskScheduler和Worker節(jié)點(diǎn)內(nèi)部的工作的每一步的細(xì)節(jié)。基于Spark上的核心框架的使用,學(xué)習(xí)SparkSQL(關(guān)系型操作)、Spark Streaming(實(shí)時(shí)處理)、MLlib(機(jī)器學(xué)習(xí))、GraphX(圖處理)這些。
我們使用spark一般都使用Yarn框架,所以我覺(jué)得還需要學(xué)些Hadoop學(xué)習(xí)。有hdfs和mr(現(xiàn)在是YARN)組成,有興趣可以看https://www.toutiao.com/i6506428976062267907/這篇文章
場(chǎng)景
Spark是一個(gè)分布式內(nèi)存型計(jì)算框架,吸收MR的優(yōu)點(diǎn),以RDD數(shù)據(jù)來(lái)表示模型,提供多種算子,例如map|filter|flatMap|sample|groupByKey|reduceByKey|union|join等,并將中間數(shù)據(jù)放到內(nèi)存中,使得迭代運(yùn)算效率更高,更適合于實(shí)時(shí)計(jì)算|交互式計(jì)算或者要求計(jì)算量大、效率要求高等場(chǎng)景。與Yarn的結(jié)合,使得Spark可以與MR運(yùn)行與同一個(gè)集群中,共享存儲(chǔ)資源與計(jì)算資源,不斷完善的SparkSQL,可以與Hive兼容,大大增強(qiáng)了Spark的應(yīng)用范圍及優(yōu)越性。
Spark是基于內(nèi)存的迭代計(jì)算框架,適用于需要多次操作特定數(shù)據(jù)集的應(yīng)用場(chǎng)合。需要反復(fù)操作的次數(shù)越多,所需讀取的數(shù)據(jù)量越大,受益越大,數(shù)據(jù)量小但是計(jì)算密集度較大的場(chǎng)合,受益就相對(duì)較小。
總的來(lái)說(shuō)Spark的適用面比較廣泛且比較通用。
Spark的特點(diǎn)a.快速基于內(nèi)存計(jì)算速度是MR的100倍,基于磁盤計(jì)算的速度是MR的10倍
快的原因是:Spark有一個(gè)DAG(有向無(wú)環(huán)圖)執(zhí)行引擎,支持循環(huán)數(shù)據(jù)流和內(nèi)存計(jì)算。
b.易用
提供多語(yǔ)言的API,能快速實(shí)現(xiàn)應(yīng)用,相比MR有簡(jiǎn)潔的代碼,安裝部署簡(jiǎn)單
c.通用
提供一個(gè)強(qiáng)大的技術(shù)棧,包括查詢語(yǔ)言SparkSQL、實(shí)時(shí)流處理工具Spark Streaming、機(jī)器學(xué)習(xí)工具M(jìn)Llib、圖計(jì)算工具GraphX, Spark的目的在于構(gòu)建一個(gè)結(jié)構(gòu)上一體化功能上多元化的高效數(shù)據(jù)流水線技術(shù)棧。
d.集成Hadoop
Spark可以運(yùn)行在YARN上,可以讀取Hadoop的任何數(shù)據(jù)
下面是Spark生態(tài)系統(tǒng)Spark Core:它包含Spark的基本功能(任務(wù)調(diào)度、內(nèi)存管理、故障恢復(fù)以及存儲(chǔ)系統(tǒng)的交互),包含RDD|Stage|DAG|它的核心思想就是將數(shù)據(jù)緩存在內(nèi)存中,并用Lineage機(jī)制容錯(cuò)。
a.RDD:
Resilient Distributed DataSets,是分布式只讀的且已分區(qū)的集合對(duì)象。
這些集合是彈性的,如果數(shù)據(jù)集的一部分丟失,則可以對(duì)它們進(jìn)行重建。
具有自動(dòng)容錯(cuò)|位置感知調(diào)度|可伸縮性的特點(diǎn)。
對(duì)于記錄數(shù)據(jù)的更新,RDD也只支持粗粒度的轉(zhuǎn)換(記錄如何從其他RDD轉(zhuǎn)換而來(lái)即Lineage,以便恢復(fù)丟失的分區(qū))
數(shù)據(jù)集容錯(cuò)的兩種方式:數(shù)據(jù)檢查點(diǎn)(成本高,服務(wù)器之間的傳輸?shù)膯?wèn)題)和記錄數(shù)據(jù)的更新。
Spark大數(shù)據(jù)處理框架1.Spark速度快的原因
a.統(tǒng)一的RDD抽象和操作:Spark基于RDD抽象,使得Spark的框架輕而易舉地使用Spark Core中的所有內(nèi)容, 并且各個(gè)框架可以在內(nèi)存中無(wú)縫地集成和完成系統(tǒng)任務(wù)。
b.Spark是基于統(tǒng)一的技術(shù)堆棧。
2.基于內(nèi)存的迭代式計(jì)算
MR在每次執(zhí)行時(shí)都要從磁盤讀數(shù)據(jù),計(jì)算完畢之后都要把數(shù)據(jù)存放在磁盤上。
Spark是基于內(nèi)存的,每次運(yùn)算都是在內(nèi)存中計(jì)算的。
3.DAG
a.是另外一個(gè)快的重要原因
b.基于RDD,Spark具備了非常精致的作業(yè)調(diào)度系統(tǒng)
c.DAG中的依賴有寬依賴和窄依賴之分,DAG可以根據(jù)依賴對(duì)pipeline等進(jìn)行優(yōu)化操作
d.基于RDD和DAG并行計(jì)算整個(gè)Job.
4.出色的容錯(cuò)機(jī)制
a.基于DAG圖,lineage是輕量級(jí)且高效的
b.操作之間相互具備lineage的關(guān)系,每個(gè)操作只關(guān)系其父操作,各個(gè)分片的數(shù)據(jù)之間互不影響,
出現(xiàn)錯(cuò)誤時(shí)只要恢復(fù)單個(gè)split的特定部分
覺(jué)得spark挺好用的,但是有一些場(chǎng)景還是不適用
歡迎各位大神來(lái)指點(diǎn)