這是一篇是劃水的。矿酵。氧猬。。隨便看看就好;荡瘛V迅А!倔矾!
Spark特點(diǎn)
以下特點(diǎn)來(lái)源官網(wǎng)主頁(yè)妄均,僅做翻譯
Speed(快)
Apache Spark achieves high performance for both batch and streaming data,
實(shí)現(xiàn)了在批處理 和 流處理 的高速數(shù)據(jù)處理,
using a state-of-the-art DAG scheduler, a query optimizer, and a physical execution engine.
使用了先進(jìn)的 DAG 調(diào)度哪自,查詢優(yōu)化器 和 物理執(zhí)行引擎Ease of Use(易用)
Write applications quickly in Java, Scala, Python, R, and SQL.
可以使用 Java丰包,Scala,Python壤巷,R邑彪,SQL 快速構(gòu)建應(yīng)用
Spark offers over 80 high-level operators that make it easy to build parallel apps.
Spark 提供超過(guò)80個(gè)高級(jí)的操作來(lái)輕松的構(gòu)建分布式應(yīng)用
And you can use it interactively from the Scala, Python, R, and SQL shells.
并且你可以使用 Scala, Python, R, 和 SQL shells 來(lái)進(jìn)行混合編程Generality(通用)
Combine SQL, streaming, and complex analytics.
綜合了 SQL處理,流處理 和 復(fù)雜的數(shù)據(jù)分析
Spark powers a stack of libraries including SQL and DataFrames,
Spark 提供了一些列的庫(kù)胧华,包含:SQL and DataFrames(進(jìn)行sql數(shù)據(jù)分析)
MLlib for machine learning,
MLlib 進(jìn)行機(jī)器學(xué)習(xí)
GraphX,
圖計(jì)算庫(kù)
and Spark Streaming.
和 Spark Streaming進(jìn)行流式計(jì)算寄症,
You can combine these libraries seamlessly in the same application.
你可以在同一個(gè)應(yīng)用中無(wú)縫的組合使用這些庫(kù)Runs Everywhere(運(yùn)行在任何地方)
Spark runs on Hadoop, Apache Mesos, Kubernetes, standalone, or in the cloud.
Spark 可以運(yùn)行在 Hadoop, Apache Mesos, Kubernetes, standalone, 甚至 云端
It can access diverse data sources.
并且其支持訪問(wèn)多種數(shù)據(jù)源
Spark 和 MapReduce
1.Spark可以基于內(nèi)存處理數(shù)據(jù),MR每次要落地磁盤
2.Spark有DAG有向無(wú)環(huán)圖優(yōu)化
3.Spark是粗粒度資源申請(qǐng)矩动,MR是細(xì)粒度資源申請(qǐng)
4.Spark中有各種算子 有巧,MR中只有map 和reduce
5.Spark的shuffle 向?qū)τ贛R來(lái)說(shuō)有自己的優(yōu)化同時(shí)有bypass機(jī)制
Spark運(yùn)行模式
本地模式
開(kāi)發(fā)過(guò)程中常用的模式,
適用于本地測(cè)試調(diào)試悲没,相當(dāng)于一個(gè)單機(jī)程序篮迎。Standalone 模式
Spark 自帶一種資源調(diào)度的集群叫 Standalone,
如果將Spark運(yùn)行在該集群上,我們叫叫做 Standalone 模式甜橱。
在生產(chǎn)環(huán)境中使用不多逊笆,如果需要保證任務(wù)的穩(wěn)定性,
需要單獨(dú)搭建一個(gè)集群岂傲,可以考慮Yarn 模式
在國(guó)內(nèi)應(yīng)該是使用最普遍的模式了吧难裆。
這也是Spark受歡迎的一個(gè)重要原因,
畢竟大部分公司都是以 HDFS 作為儲(chǔ)存系統(tǒng)譬胎,
Yarn作為資源調(diào)度系統(tǒng),
Spark運(yùn)行在yarn就可以完美的銜接在一起了命锄。
Spark核心RDD
什么是 RDD堰乔?
RDD全稱 Resilient Distributed Dataset,即 彈性分布式數(shù)據(jù)集脐恩。
既然叫他數(shù)據(jù)集镐侯,那么其當(dāng)然就是用來(lái)存儲(chǔ)數(shù)據(jù)的,
不過(guò)網(wǎng)上也大部分認(rèn)為它是不存數(shù)據(jù)的驶冒,
不過(guò)不管你怎么認(rèn)為苟翻,在用戶看來(lái),
通過(guò)從 Source數(shù)據(jù) 生成RDD,
那么后續(xù)的所有對(duì) 該RDD 和 該RDD生成的RDD 操作骗污,
都是作用在 Source數(shù)據(jù)上的崇猫。-
RDD 的五大特性
源碼中有以下注釋:- A list of partitions
RDD 是有一個(gè) 分區(qū)列表的,
也就是說(shuō)數(shù)據(jù)在RDD里面不是一個(gè)整體需忿,
而是一個(gè)個(gè)的分區(qū)的诅炉。
- A function for computing each split
這里 function 我更愿意理解成 算子,split 大致等于 分區(qū)屋厘,所以:
一個(gè)算子的計(jì)算是作用在每一個(gè)的 分區(qū)的涕烧,
所以分區(qū)數(shù)越多,那么計(jì)算的并行度就越高汗洒,
結(jié)合第一條议纯,那么提升RDD的并行度,只需要提升其分區(qū)數(shù) - A list of dependencies on other RDDs
這個(gè)話是真不太好翻譯,但是大概意思就是溢谤,RDD 之間是相互依賴的瞻凤,
RDD除了從源數(shù)據(jù)生成,就只剩下從RDD生成RDD這個(gè)方法了世杀。 - Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
可選的鲫构,分區(qū)器是針對(duì) K-V 格式的 RDD的。
在發(fā)送 Shuffle 的時(shí)候玫坛,分區(qū)器決定了每條數(shù)據(jù)的去向结笨。 - Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
可選的,一個(gè)首選的位置的列表,可以提供給每個(gè)分區(qū)的計(jì)算的位置炕吸。
也就是我們常說(shuō)的數(shù)據(jù)本地化伐憾,計(jì)算向數(shù)據(jù)移動(dòng)。
- A list of partitions
-
RDD寬窄依賴
首先明確赫模,依賴是作用于父子RDD之間的树肃。窄依賴:
如果一個(gè)父RDD的數(shù)據(jù)只進(jìn)入到一個(gè)子RDD之中,
那么就是窄依賴瀑罗。
即胸嘴,一個(gè)子RDD是可以接受來(lái)自多個(gè) 父RDD 的數(shù)據(jù)的,
只要這些 父RDD 的數(shù)據(jù)都是進(jìn)入到該 子RDD 就還是窄依賴寬依賴
如果一個(gè)父RDD的數(shù)據(jù)進(jìn)入到多個(gè)子RDD之中斩祭,
那么這就是寬依賴了劣像。
即,如果一個(gè) 父RDD 的數(shù)據(jù)分配到了多個(gè)子RDD 中摧玫,
那這就是寬依賴耳奕。
為什么要分寬窄依賴?
寬窄依賴主要是為了用來(lái)切分 Stage 的诬像,
一個(gè)Stage里面的數(shù)據(jù)是通過(guò)pipeline的計(jì)算模式運(yùn)行的屋群,
這也就是說(shuō),一個(gè)Stage里面的數(shù)據(jù)計(jì)算坏挠,
是不需要落地芍躏,完全基于內(nèi)存的。
而Stage之間是會(huì)發(fā)生 Shuffle降狠,會(huì)涉及到數(shù)據(jù)落地到磁盤纸肉。
利用寬窄依賴就可以很好區(qū)分那部分運(yùn)算可以分到一個(gè)Stage,
減少落地磁盤的數(shù)據(jù)喊熟,加快計(jì)算速度柏肪。
#####################################################################################
感覺(jué)Spark很多東西網(wǎng)上都是有現(xiàn)成的,寫起來(lái)也沒(méi)啥成就感芥牌,
暫時(shí)還是先放放吧~~后續(xù)補(bǔ)充一下各個(gè)知識(shí)點(diǎn)的關(guān)鍵字烦味,
大家網(wǎng)上搜索一下也就完事了,
沒(méi)必要自己整~~~~
Spark資源調(diào)度
Spark任務(wù)調(diào)度
二次排序問(wèn)題
分組取topN問(wèn)題#
廣播變量 累加器
Spark-Shuffle
- hashshuffle
- 優(yōu)化的HashShuffle
- sortshuffle
- 鎢絲計(jì)劃的 unsafeshuffle
- bypass機(jī)制
https://zhuanlan.zhihu.com/p/67061627