spark
spark是一種計算框架荔茬,比MapReduce快一些
開源計算框架筒主。運行和編寫都很快
可以在很多環(huán)境運行
hadoop尽狠,apache mesos kubernetes钞翔,standalone or in the cloud
基于內(nèi)存,快
可以用java,scala梢什,Python(功能不完善奠蹬,缺少包)和r和sql
Spark與MapReduce的區(qū)別
?都是分布式計算框架,Spark基于內(nèi)存嗡午,MR基于HDFS囤躁。Spark處理數(shù)據(jù)的能力一般是MR的十倍以上,Spark中除了基于內(nèi)存計算外翼馆,還有DAG有向無環(huán)圖來切分任務的執(zhí)行先后順序割以。
########注意:安裝時路徑不要帶空格或者中文
2.spark核心概念RDD
1.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提供一系列最佳的計算位置跟伏。利于數(shù)據(jù)處理的本地化丢胚。“計算向數(shù)據(jù)移動”
問題引入
1spark讀取hdfs中數(shù)據(jù)的方法 textfile底層是調(diào)用的MR讀取HDFS的方法受扳,首先會split携龟,每個split對應一個block。每個split對應生成RDD的每個partition
2.什么是K,V格式的RDD?
RDD中的數(shù)據(jù)是一個個的tuple2數(shù)據(jù)勘高,那么這個RDD就是KV格式的RDD
3.哪里體現(xiàn)了RDD的彈性(容錯)
1)RDD之間有依賴關(guān)系
2)RDD的partion可多可少
4.哪里體現(xiàn)RDD的分布式
RDD的paartion是分布在多個節(jié)點上的
5.Spark運行模式
- Local
多用于本地測試峡蟋,如在eclipse,idea中寫程序測試等华望。 - Standalone
Standalone是Spark自帶的一個資源調(diào)度框架蕊蝗,它支持完全分布式。 - Yarn
Hadoop生態(tài)圈里面的一個資源調(diào)度框架赖舟,Spark也是可以基于Yarn來計算的蓬戚。 - Mesos
資源調(diào)度框架。
要基于Yarn來進行資源調(diào)度宾抓,必須實現(xiàn)AppalicationMaster接口子漩,Spark實現(xiàn)了這個接口,所以可以基于Yarn石洗。
以上圖中有四個機器節(jié)點幢泼,Driver和Worker是啟動在節(jié)點上的進程,運行在JVM中的進程劲腿。
- Driver與集群節(jié)點之間有頻繁的通信旭绒。
- Driver負責任務(tasks)的分發(fā)和結(jié)果的回收。任務的調(diào)度。如果task的計算結(jié)果非常大就不要回收了挥吵。會造成oom重父。
- Worker是Standalone資源調(diào)度框架里面資源管理的從節(jié)點。也是JVM進程忽匈。
- Master是Standalone資源調(diào)度框架里面資源管理的主節(jié)點房午。也是JVM進程。
3.Spark代碼流程
1.創(chuàng)建SparkConf對象
?可以設(shè)置Application name丹允。
?可以設(shè)置運行模式及資源需求郭厌。
2.創(chuàng)建SparkContext對象
3.基于Spark的上下文創(chuàng)建一個RDD,對RDD進行處理雕蔽。
4.應用程序中要有Action類算子來觸發(fā)Transformation類算子執(zhí)行折柠。
5.關(guān)閉Spark上下文對象SparkContext。
4.Transformations轉(zhuǎn)換算子
概念:
Transformations類算子是一類算子(函數(shù))叫做轉(zhuǎn)換算子批狐,如map,flatMap,reduceByKey等扇售。Transformations算子是延遲執(zhí)行,也叫懶加載執(zhí)行嚣艇。
Action觸發(fā)執(zhí)行
Action也是一類算子(函數(shù))
?Transformation類算子:
?filter
過濾符合條件的記錄數(shù)承冰,true保留,false過濾掉食零。
?map
將一個RDD中的每個數(shù)據(jù)項困乒,通過map中的函數(shù)映射變?yōu)橐粋€新的元素。
特點:輸入一條贰谣,輸出一條數(shù)據(jù)娜搂。
?flatMap
先map后flat。與map類似冈爹,每個輸入項可以映射為0到多個輸出項涌攻。
?sample
隨機抽樣算子,根據(jù)傳進去的小數(shù)按比例進行又放回或者無放回的抽樣频伤。
?reduceByKey
將相同的Key根據(jù)相應的邏輯進行處理恳谎。
?sortByKey/sortBy
作用在K,V格式的RDD上,對key進行升序或者降序排序憋肖。
5.Action行動算子
?概念:
Action類算子也是一類算子(函數(shù))叫做行動算子因痛,如foreach,collect,count等岸更。Transformations類算子是延遲執(zhí)行鸵膏,Action類算子是觸發(fā)執(zhí)行。一個application應用程序中有幾個Action類算子執(zhí)行怎炊,就有幾個job運行谭企。
?Action類算子
count
返回數(shù)據(jù)集中的元素數(shù)廓译。會在結(jié)果計算完成后回收到Driver端。
?take(n)
返回一個包含數(shù)據(jù)集前n個元素的集合债查。
?first
first=take(1),返回數(shù)據(jù)集中的第一個元素非区。
?foreach
循環(huán)遍歷數(shù)據(jù)集中的每個元素,運行相應的邏輯盹廷。
?collect
將計算結(jié)果回收到Driver端征绸。
java算子
和Scala類似
總結(jié):
sparkcore
spark:基于內(nèi)存的計算框架
與MR區(qū)別
基于內(nèi)存迭代計算,MR是基于磁盤迭代計算
spark中有DAG有向無環(huán)圖
MR中只有map和reduce俄占,相當于spark中兩個算子(map和reducebykey)spark中有各種算子應對不同場景
spark技術(shù)棧:HDFS MR Yarn ,hive
sparkcore sparksql sparkstreaming
spark運行模式:local 多用于本地測試管怠,一般在eclipse,idea中運行使用local模式
standalone:spark自帶的資源調(diào)度框架缸榄,支持分布式框架
yarn:hadoop生態(tài)圈中資源調(diào)度框架渤弛,spark可以基于yarn運行
mesos:資源調(diào)度框架
spark核心rdd:RDD彈性分布式數(shù)據(jù)集
rdd內(nèi)其實是不存數(shù)據(jù)的,partion也是不存數(shù)據(jù)的
rdd五大特性
1rdd是由partion組成
2算子(函數(shù))作用在partion上的
3rdd之間有依賴關(guān)系
4分區(qū)器是作用在KV格式的RDD上
5partion對外提供最佳計算位置碰凶,利于數(shù)據(jù)處理的本地化
注意textfile底層讀取hdfs文件的方法底層調(diào)用的是mr讀取hdfs文件的方法暮芭,首先split,每個split對應一個block欲低,每個split對應一個partion
什么是KV格式的rdd
RDD中數(shù)據(jù)是一個個的二元組
哪里體現(xiàn)了rdd的彈性(容錯)
rdd的分區(qū)可多可少
rdd之間有依賴關(guān)系
rdd的partion是分布在多個節(jié)點上的
spark代碼流程:
val conf=new SparkConf().setAppName...setMaster
val sc=new SparkContext(conf)
由sc得到rdd
對rdd使用transformation類算子進行轉(zhuǎn)換
對rdd使用adction算子觸發(fā)transformations類算子執(zhí)行
sc.stop()
算子
轉(zhuǎn)換算子transformation 懶執(zhí)行,需要action觸發(fā)執(zhí)行
行動算子action 觸發(fā)transformation類算子執(zhí)行畜晰,一個application中有一個action算子就有一個job
count結(jié)果會拿到driver端
collect將結(jié)果拿回driver端
持久化算子
RDD的持久化
cache默認將數(shù)據(jù)存儲在內(nèi)存中
persist可以手動指定持久化級別
cache()=persist()=persist(StorageLevel.MEORY_ONLY)
盡量少使用DISK_ONLY級別
checkpoint:將數(shù)據(jù)直接持久化到指定的目錄砾莱,當lineage計算非常復雜,可以嘗試使用checkpoint凄鼻,checkpoint還可以切斷rdd的依賴關(guān)系
特殊場景使用checkpoint:對rdd使用checkpoint要謹慎使用
checkpoint要指定目錄腊瑟,可以將數(shù)據(jù)持久化到指定的目錄中,當application執(zhí)行完成后块蚌,這個目錄中的數(shù)據(jù)不會被清除
checkpoint的執(zhí)行流程:1.當spark執(zhí)行完成之后闰非,spark會從后往前回溯,找到checkpointRDD做標記
2.回溯完成之后峭范,spark會重新啟動一個job财松,計算標記的RDD的數(shù)據(jù),放入指定的checkpoint目錄中
3.數(shù)據(jù)計算完成纱控,放入目錄之后辆毡,會切斷RDD的依賴關(guān)系。當spaarkapplication執(zhí)行完成之后甜害,數(shù)據(jù)目錄中的數(shù)據(jù)不會被清除
優(yōu)化:對那個rdd進行checkpoint舶掖,最好先cache下,這樣回溯完成后再計算這個checkpointRDD數(shù)據(jù)的時候可以直接在內(nèi)存中拿到放指定的目錄
cache和persist的注意事項:
1.cache和persistc尔店,heckpoint都是懶執(zhí)行眨攘,必須有一個action類算子觸發(fā)執(zhí)行主慰。最小持久化單位是partion
2.cache和persist算子的返回值可以賦值給一個變量,在其他job中直接使用這個變量就是使用持久化的數(shù)據(jù)了鲫售。持久化的單位是partition河哑。
3.cache和persist算子后不能立即緊跟action算子。
4.cache和persist算子持久化的數(shù)據(jù)當applilcation執(zhí)行完成之后會被清除龟虎。
錯誤:rdd.cache().count() 返回的不是持久化的RDD璃谨,而是一個數(shù)值了。