优点 spark_spark(一)
Spark簡介:
Apache Spark是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎,Spark擁有Hadoop MapReduce所具有的的所有優(yōu)點(diǎn),但不同于MapReduce得是job中間輸出結(jié)果可以保存在內(nèi)存中,從而不需要去讀取HDFS,因此Spark能更好的適用于數(shù)據(jù)挖掘于機(jī)器學(xué)習(xí)等需要的迭代的MapReduce的算法,Spark是Scala編寫,方便快速編程
spark生態(tài)圖:
Spark和MapReduce的區(qū)別
Spark基于內(nèi)存,MapReduce基于hdfs.Spark處理數(shù)據(jù)的能力一般是MapReduce的十倍以上,Spark中除了基于內(nèi)存計算外,還有DAG有向無環(huán)圖來切分任務(wù)的執(zhí)行先后順序
Spark常用運(yùn)行模式:
Local --本地運(yùn)行模式
Standalone --是Spark自帶的一個資源調(diào)度框架,支持完全分布式
Yarn --Hadoop生態(tài)圈的一個資源調(diào)度框架,Spark也可以基于其來進(jìn)行計算
核心庫 --SparkCore
RDD
概念:
RDD(Resilient Distributed Dateset),彈性分布式數(shù)據(jù)集
RDD五大特性:
1.RDD是由一系列的partition組成的
2.函數(shù)是作用在每一個partition(split)上的
3.RDD之間有一系列的依賴關(guān)系
4.分區(qū)器是作用在K,V格式的RDD上的
5.RDD提供一系列最佳的計算位置
RDD圖解:
要點(diǎn):
textFile方法底層封裝的是讀取MR讀取文件的方式,讀取文件之前先split,默認(rèn)split大小是一個block塊大小
RDD實(shí)際上不存儲數(shù)據(jù),這里為了方便理解,暫時理解為存儲數(shù)據(jù)
如果RDD里面存儲的數(shù)據(jù)都是二元組對象,那么這個RDD我們就叫做K,V格式的RDD
體現(xiàn)RDD的彈性(容錯)
--partition數(shù)量,大小沒有限制
--RDD之間的依賴關(guān)系,可以基于上一個RDD重新算出RDD
體現(xiàn)RDD的分布式:
--RDD由partition組成,partition分布在不同的節(jié)點(diǎn)上
RDD提供最佳的計算位置,體現(xiàn)了數(shù)據(jù)本地化,大數(shù)據(jù)中"計算以東部移動數(shù)據(jù)"的概念
Spark任務(wù)執(zhí)行原理
以上圖中,Driver和Worker式啟動在節(jié)點(diǎn)上的進(jìn)程,運(yùn)行在jvm中的進(jìn)程
Driver與集群節(jié)點(diǎn)之間有頻繁的通信
Driver負(fù)責(zé)任務(wù)(tasks)的分發(fā)和結(jié)果的回收,任務(wù)的調(diào)度
Worker和Master是Standalone資源調(diào)度框架里面資源管理的從節(jié)點(diǎn),也是jvm進(jìn)程
Transformations轉(zhuǎn)換算子
Transformations算子是延遲執(zhí)行,也叫懶加載執(zhí)行
filter:過濾符合條件的記錄數(shù),true保留,false過濾
map:將一個RDD中的每一個數(shù)據(jù)項(xiàng),通過map中的映射函數(shù)變?yōu)橐粋€新的元素特點(diǎn):輸入一條,輸出一條
flatMap:先map后flat,與map類似,每個輸入項(xiàng)可以映射為0-多個輸出項(xiàng)
sample:隨機(jī)抽樣算子,根據(jù)傳進(jìn)去小數(shù)按比例進(jìn)行又放回或者無放回的抽樣
reduceByKey:將相同的key根據(jù)相應(yīng)的邏輯進(jìn)行處理
sortByKey/sortBy:作用在K,V格式的RDD上,對key進(jìn)行升降序排序
Action行動算子
Action類算子是觸發(fā)執(zhí)行,一個application應(yīng)用程序中有幾個Action類算子執(zhí)行,就有幾個job運(yùn)行
count:返回數(shù)據(jù)集中的元素數(shù),會在結(jié)果計算完成會受到Driver端
take(n):返回一個包含數(shù)據(jù)及前n個元素的集合
first:返回數(shù)據(jù)集中的第一個元素
foreach:循環(huán)遍歷數(shù)據(jù)集,運(yùn)行相應(yīng)的邏輯
collect:將計算結(jié)果會收到Driver端
控制算子
控制算子有三種,cache,persist,checkpoint,以上算子都可以將RDD持久化,持久化單位為partition,cache和persist是懶執(zhí)行的,必須有一個action類算子觸發(fā)執(zhí)行,checkpoint算子不僅僅能將RDD持久化,還能切斷RDD之間的依賴關(guān)系
cache
默認(rèn)將RDD的數(shù)據(jù)持久化到內(nèi)存中,
persist
可以指定持久化的級別,最常用的是MEMORYONLY和MEMORY_AND_DISK
_2表示副本數(shù)持久化級別如下:
cache和persist注意事項(xiàng);
1.cache和persist都是懶執(zhí)行,必須要有一個action類算子來觸發(fā)執(zhí)行
2.cache和persist算子的返回值可以賦值給一個變量,在其他job中直接使用這個變量就是使用持久化的數(shù)據(jù)了,持久化單位是partition
3.cache和persist算子后不能立即緊跟action類算子
checkpoint
checkpoint將RDD持久化到磁盤中,還可以切斷RDD之間的依賴關(guān)系
checkpoint的執(zhí)行原理:
1.當(dāng)RDD的job執(zhí)行完畢之后,會從finalRDD從后往前回溯
2.當(dāng)回溯到摸一個RDD調(diào)用了checkpoint方法,會對當(dāng)前的RDD做一個標(biāo)記
3.Spark框架會自動啟動一個新的job,重新計算這個RDD的數(shù)據(jù),將數(shù)據(jù)持久化到HDFS中
優(yōu)化:對RDD執(zhí)行checkpoint方法之前,最好對這個RDD先執(zhí)行cache,這樣新啟動的job只需將內(nèi)存中的數(shù)據(jù)拷貝到HDFS上就可以了,省去了重新計算的這一步
總結(jié)
以上是生活随笔為你收集整理的优点 spark_spark(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc获取n卡编号_电脑入门知识:通过显卡
- 下一篇: 3a算法 isp_Isp图像算法工程师