溫馨提示×

溫馨提示×

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

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

Spark的基本概念是什么

發(fā)布時(shí)間:2021-10-20 09:49:14 來源:億速云 閱讀:196 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)Spark的基本概念是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Spark簡介

Spark的基本概念是什么

Apache Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎。目前已經(jīng)形成一個(gè)高速發(fā)展應(yīng)用廣泛
的生態(tài)系統(tǒng)。

Apache Spark特性:
1,快速
        大多數(shù)操作均在內(nèi)存中迭代,只有少部分函數(shù)需要落地到磁盤。
2,易用性
        支持scala、Java、Python、R等語言;提供超過80個(gè)算子,API使用及其方便。
3,通用性
        Spark提供了針對數(shù)據(jù)處理的一站式解決方案,計(jì)算時(shí)用Spark Core算子(替代Hadoop Map/Reduce)
        ,批處理時(shí)用Spark SQL(替代HiveSQL),實(shí)時(shí)計(jì)算用Spark Streaming(替代Stom),機(jī)器學(xué)習(xí)用
        Spark MLlib(替代Mahout);另外,通過Spark GraphX進(jìn)行圖計(jì)算。
4,跨平臺
        Spark可以使用Local模式,Standalone模式,Cluster模式運(yùn)行。
        Local模式:在本地運(yùn)行調(diào)試,支持?jǐn)帱c(diǎn),可以指定并行線程數(shù)。
        Standalone模式:Spark管理資源,有Master和Worker,相當(dāng)于ResourceManager和NodeManager。
        Cluster模式:分布式模式,用于生產(chǎn)環(huán)境。資源管理器使用Yarn或者M(jìn)esos。
 

Spark的適用場景
目前大數(shù)據(jù)處理場景有以下幾個(gè)類型:
復(fù)雜的批量處理(Batch Data Processing),偏重點(diǎn)在于處理海量數(shù)據(jù)的能力,至于處理速度可忍受,通常的時(shí)間可能是在數(shù)十分鐘到數(shù)小時(shí);
基于歷史數(shù)據(jù)的交互式查詢(Interactive Query),通常的時(shí)間在數(shù)十秒到數(shù)十分鐘之間
基于實(shí)時(shí)數(shù)據(jù)流的數(shù)據(jù)處理(Streaming Data Processing),通常在數(shù)百毫秒到數(shù)秒之間

Spark成功案例 
目前大數(shù)據(jù)在互聯(lián)網(wǎng)公司主要應(yīng)用在金融、廣告、報(bào)表、推薦系統(tǒng)等業(yè)務(wù)上。在廣告業(yè)務(wù)方面需要大數(shù)據(jù)做應(yīng)用分析、效果分析、定向優(yōu)化等,在推薦系統(tǒng)方面則需要大數(shù)據(jù)優(yōu)化相關(guān)排名、個(gè)性化推薦以及熱點(diǎn)點(diǎn)擊分析等。這些應(yīng)用場景的普遍特點(diǎn)是計(jì)算量大、效率要求高。 騰訊 / 小米 / 淘寶 / 優(yōu)酷土豆

Hadoop Map/Reduce與Spark

Spark的基本概念是什么

Spark的基本概念是什么

Spark的發(fā)展歷史

Spark的基本概念是什么

Spark的版本發(fā)展

Spark的基本概念是什么

Spark的基本概念是什么

Spark的基本概念是什么

Scala與函數(shù)式編程

Scala介紹
        Scala 是一門多范式(multi-paradigm)的編程語言,設(shè)計(jì)初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。Scala 運(yùn)行在Java虛擬機(jī)上,并兼容現(xiàn)有的Java程序。

特性
1,面向?qū)ο?br/>         Scala是一種純面向?qū)ο蟮恼Z言,每個(gè)值都是對象。對象的數(shù)據(jù)類型以及行為由類和特質(zhì)(trait)描述。
2,函數(shù)式編程
        Scala也是一種函數(shù)式語言,其函數(shù)也能當(dāng)成值來使用。Scala提供了輕量級的語法用以定義匿名函數(shù),支持高階函數(shù),允許嵌套多層函 數(shù),并支持柯里化。Scala的case class及其內(nèi)置的模式匹配相當(dāng)于函數(shù)式編程語言中常用的代數(shù)類型。
3,靜態(tài)類型
        Scala具備類型系統(tǒng),通過編譯時(shí)檢查,保證代碼的安全性和一致性。
4,并發(fā)性
       Scala使用Actor作為其并發(fā)模型,Actor是類似線程的實(shí)體,通過郵箱發(fā)收消息。Actor可以復(fù)用線程,因此可以在程序中可以使用數(shù)百萬個(gè)Actor,而線程只能創(chuàng)建數(shù)千個(gè)。在2.10之后的版本中,使用Akka作為其默認(rèn)Actor實(shí)現(xiàn)。

函數(shù)式編程
        函數(shù)式編程是種編程方式,它將電腦運(yùn)算視為函數(shù)的計(jì)算。函數(shù)編程語言最重要的基礎(chǔ)是λ演算(lambda calculus),而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(參數(shù))和輸出(返回值)。
特性
1,函數(shù)是第一等公民
        函數(shù)編程支持函數(shù)作為第一類對象,有時(shí)稱為閉包或者仿函數(shù)(functor)對象。
2,惰性計(jì)算
        在惰性計(jì)算中,表達(dá)式不是在綁定到變量時(shí)立即計(jì)算,而是在求值程序需要產(chǎn)生表達(dá)式的值時(shí)進(jìn)行計(jì)算。延遲的計(jì)算使您可以編寫可能潛在地生成無窮輸出的函數(shù)。
3,支用表達(dá)式不用語句
       "表達(dá)式"(expression)是一個(gè)單純的運(yùn)算過程,總是有返回值;"語句"(statement)是執(zhí)行某種操作,沒有返回值。函數(shù)式編程要求,只使用表達(dá)式,不使用語句。也就是說,每一步都是單純的運(yùn)算,而且都有返回值。
sc.thriftParquetFile(fileStr, classOf[SomeClass], force = true).filter(infor => infor.classId == CLASSID_REPAY).persist(StorageLevel.DISK_ONLY)
4,沒有"副作用"
       所謂"副作用"(side effect),指的是函數(shù)內(nèi)部與外部互動(最典型的情況,就是修改全局變量的值),產(chǎn)生運(yùn)算以外的其他結(jié)果。
函數(shù)式編程強(qiáng)調(diào)沒有"副作用",意味著函數(shù)要保持獨(dú)立,所有功能就是返回一個(gè)新的值,沒有其他行為,尤其是不得修改外部變量的值。

Spark RDD特性

RDD(Resilient Distributed Datasets),彈性分布式數(shù)據(jù)集,它是對分布式數(shù)據(jù)集的一種內(nèi)存抽象,通過受限的共享內(nèi)存方式來提供容錯(cuò)性,同時(shí)這種內(nèi)存模型使得計(jì)算比傳統(tǒng)的數(shù)據(jù)流模型要高效。RDD具有5個(gè)重要的特性,如下圖所示:

1.一組分區(qū),數(shù)據(jù)集的基本組成單位。
2.計(jì)算每一個(gè)數(shù)據(jù)分區(qū)的函數(shù)。
3.對parent RDD的依賴,這個(gè)依賴描述了RDD之間的lineage(血統(tǒng))。
4.可選,對于鍵值對RDD,有一個(gè)Partitioner(通常是HashPartitioner,RangePartitioner)。
5.可選,一組Preferred location信息(例如,HDFS文件的Block所在location信息)。

Spark的基本概念是什么

Spark算子

Spark對數(shù)據(jù)的處理過程包括輸入、運(yùn)行轉(zhuǎn)換、輸出等過程,而這些過程在Spark中以算子的形式定義。 算子是RDD中定義的函數(shù),可以對RDD中的數(shù)據(jù)進(jìn)行轉(zhuǎn)換和操作。

Spark的基本概念是什么

從大方向來說,Spark算子大致可以分為以下兩類:
1)Transformation 變換/轉(zhuǎn)換算子:這種變換并不觸發(fā)提交作業(yè),完成作業(yè)中間過程處理。
         Transformation 操作是延遲計(jì)算的,也就是說從一個(gè)RDD 轉(zhuǎn)換生成另一個(gè) RDD 的轉(zhuǎn)換操作不是馬上執(zhí)行,
需要等到有 Action 操作的時(shí)候才會真正觸發(fā)運(yùn)算。
        按照處理數(shù)據(jù)的結(jié)構(gòu)類型,Transformation算子又可以分為以下兩類:
    a)Value數(shù)據(jù)類型的Transformation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項(xiàng)是Value型數(shù)據(jù)
    b)Key-Value數(shù)據(jù)類型的Transformation算子,這種變換并不觸發(fā)提交作業(yè),針對處理的數(shù)據(jù)項(xiàng)是
          Key-Value型的數(shù)據(jù)對。

2)Action行動算子:這類算子會觸發(fā)SparkContext提交Job作業(yè)。
        Action 算子會觸發(fā) Spark 提交作業(yè)(Job),并將數(shù)據(jù)輸出 Spark系統(tǒng)。

1)Value型數(shù)據(jù)類型的Transformation算子
        A)輸入分區(qū)與輸出分區(qū)一對一型
	a) map算子
	b) flatMap算子
	c) mapPartitions算子
	d) glom算子
        B)輸入分區(qū)與輸出分區(qū)多對一型
	a) union算子
	b) cartesian算子
        C)輸入分區(qū)與輸出分區(qū)多對多型
	a) groupBy算子
        D)輸出分區(qū)為輸入分區(qū)子集型
 	a) filter算子
	b) distinct算子
	c) subtract算子
	d) sample算子
	e) takeSample算子
        E)Cache型
	a) cache算子
	d) persist算子

2)Key-Value型數(shù)據(jù)類型的Transformation算子
        A)輸入分區(qū)與輸出分區(qū)一對一型
	a) mapValues算子
        B)對單個(gè)RDD聚集
	a) combineByKey算子
	b) reduceByKey算子
	c) partitionBy算子
        C)對兩個(gè)RDD聚集
	a) Cogroup算子
        D)連接
 	a) join算子
	b) leftOutJoin算子
	c) rightOutJoin算子

3)Action算子
        A)無輸出
	a) foreach算子
        B)HDFS
	a) saveAsTextFile算子
	b) saveAsObjectFile算子
        C)集合和數(shù)據(jù)類型
	a) collect算子
	b) collectAsMap算子
	c) reduceByKeyLocally算子
	d) lookup算子
	e) count算子
	f) top算子
	g) reduce算子
	h) fold算子
	i) aggregate算子
	
4)數(shù)據(jù)加載的Transformation算子
        A)文件讀取
	a) textFile算子
        B)內(nèi)存生成
	a) makeRDD算子
	b) parallelize算子

Spark算子-Value型

1)map: 對RDD中的每個(gè)元素都執(zhí)行一個(gè)指定的函數(shù)類(映射)產(chǎn)生一個(gè)新的RDD。任何原RDD中的元素在新RDD中都有且只有一個(gè)元素與之對應(yīng)。當(dāng)然map也可以把Key元素變成Key-Value對。

Spark的基本概念是什么

2)flatMap:將原來 RDD 中的每個(gè)元素通過函數(shù) f 轉(zhuǎn)換為新的元素,并將生成的 RDD 的每個(gè)集合中的元素合并為一個(gè)集合。

Spark的基本概念是什么

3) mapPartiions:map是對rdd中的每一個(gè)元素進(jìn)行操作,而mapPartitions (foreachPartition)則是對rdd中的每個(gè)分區(qū)的迭代器進(jìn)行操作mapPartitions效率比map高的多。mapPartitions函數(shù)獲取到每個(gè)分區(qū)的迭代器,在函數(shù)中通過這個(gè)分區(qū)整體的迭代器對整個(gè)分區(qū)的元素進(jìn)行操 作。

Spark的基本概念是什么

4) glom:將分區(qū)元素轉(zhuǎn)換成數(shù)組。

Spark的基本概念是什么

5) union:相同數(shù)據(jù)類型RDD進(jìn)行合并,并不去重。

Spark的基本概念是什么

6)cartesian:對RDD內(nèi)的所有元素進(jìn)行笛卡爾積操作

Spark的基本概念是什么

7) groupBy:將元素通過函數(shù)生成相應(yīng)的 Key,數(shù)據(jù)就轉(zhuǎn)化為 Key-Value 格式,之后將 Key 相同的元素分為一組。
Spark的基本概念是什么

8)filter:對RDD元素進(jìn)行過濾操作

Spark的基本概念是什么

9)distinct:對RDD中的元素去重操作

Spark的基本概念是什么

10)subtract:RDD間進(jìn)行減操作,去除相同數(shù)據(jù)元素(去掉含有重復(fù)的項(xiàng))

Spark的基本概念是什么

11)sample:對RDD元素進(jìn)行采樣操作,獲取所有元素的子集(按照比例隨機(jī)抽樣)

Spark的基本概念是什么

12)takesample:上面的sample函數(shù)是一個(gè)原理,不同的是不使用相對比例采樣,而是按設(shè)定的采樣個(gè)數(shù)進(jìn)行采樣

Spark的基本概念是什么

Spark算子-Key-Value型

1)mapValues:(對Value值進(jìn)行變換)原RDD中的Key保持不變,與新的Value一起組成新的RDD中的元素。因此,該函數(shù)只適用于元素為KV對的RDD。即針對(Key, Value)型數(shù)據(jù)中的 Value 進(jìn)行 Map 操作,而不對 Key 進(jìn)行處理。
Spark的基本概念是什么

2)combineByKey:(按key聚合)相當(dāng)于將元素為 (Int, Int) 的 RDD轉(zhuǎn)變?yōu)榱?(Int,Seq[Int]) 類型元素的 RDD。

Spark的基本概念是什么

3)reduceByKey:reduceByKey 是比 combineByKey 更簡單的一種情況,只是兩個(gè)值合并成一個(gè)值,即相同的key合并value。

Spark的基本概念是什么

4)partitionBy:按key值對RDD進(jìn)行重新分區(qū)操作。

Spark的基本概念是什么

5)cogroup:按key值聚集操作。

Spark的基本概念是什么

6)join:按key值聯(lián)結(jié)。

Spark的基本概念是什么

Spark算子-Action算子

1)foreach:循環(huán)遍歷每一個(gè)元素。

Spark的基本概念是什么

2)saveAsTextFile:將最終的結(jié)果數(shù)據(jù)以文本格式保存到指定的HDFS目錄中

Spark的基本概念是什么

3)saveAsObjectFile:將最終的結(jié)果數(shù)據(jù)以二進(jìn)制文件格式保存到指定的HDFS目錄中

Spark的基本概念是什么

4)collect:收集元素

Spark的基本概念是什么

5)collectAsMap: 收集key/value型的RDD中的元素

Spark的基本概念是什么

6)reduceByKeyLocally:實(shí)現(xiàn)的是先reduce再collectAsMap的功能,先對RDD的整體進(jìn)行reduce操作,然后再收集所有結(jié)果返回為一個(gè)HashMap

7)lookup:查找元素,對(Key,Value)型的RDD操作,搜索指定Key對應(yīng)的元素

Spark的基本概念是什么

8)count:計(jì)算元素個(gè)數(shù)

Spark的基本概念是什么

9)top:top(n)尋找值最大的前n個(gè)元素

10)reduce:通過函數(shù)func先聚集各分區(qū)的數(shù)據(jù)集,再聚集分區(qū)之間的數(shù)據(jù),func接收兩個(gè)參數(shù),返回一個(gè)新值,新值再做為參數(shù)繼續(xù)傳遞給函數(shù)func,直到最后一個(gè)元素

11)fold:合并

12)aggregateByKey:采用歸并的方式進(jìn)行數(shù)據(jù)聚合操作,這種聚集是并行化的,通過key進(jìn)行聚合。

看完上述內(nèi)容,你們對Spark的基本概念是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

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

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

AI