Spark比hadoop快的原因
1中間結(jié)果基于內(nèi)存
2dag
3以線程為單位,開銷更?。ú淮_定)
Spark?core:
彈性分布式數(shù)據(jù)集(Resilient?Distributed?Dataset,RDD )。RDD就是帶有分區(qū)的集合類型
rdd的五大特性:
1由一系列partition組成
2算子作用在partition上
3rdd之間有依賴關(guān)系
4分區(qū)器作用在k,v格式的rdd上(分區(qū):主要通過compute函數(shù))
5partition提供計算位置,利于數(shù)據(jù)本地化
spark讀取hdfs的數(shù)據(jù)的方法:
textfile,底層調(diào)用的是mr讀取hdfs的方法(split的block對應(yīng)rdd的partition)
彈性分布式數(shù)據(jù)集(RDD),他是一個彈性的,可分區(qū)的,分布式計算的集合。RDD允許用戶在執(zhí)行多個查詢時顯式地將工作集緩存在內(nèi)存中,后續(xù)的查詢能夠重用工作集,這極大地提升了查詢速度。
彈性的體現(xiàn):
存儲彈性:內(nèi)存和硬盤可以互相切換
容錯彈性:通過依賴關(guān)系,計算丟失自動恢復(fù)
計算彈性:partition可多可少
分布式的體現(xiàn):
rdd的partition分布在多個節(jié)點
代碼流程:
1、配置sparkconf??
val conf = new sparkconf
conf.xxx
2、創(chuàng)建sparkcontext對象
val sc = new sparkcontext(conf)
val lines = sc.textfile(path="./xx/xx")
3、創(chuàng)建rdd,對rdd進行處理
4、action觸發(fā)transformation執(zhí)行
val rdd = lines.flatmap(one=>{one.split(" ")}).foreach(println)
5、關(guān)閉sparkcontext
sc.stop()
DAG:
原始RDD的通過一系列轉(zhuǎn)換和執(zhí)行來生成RDD之間的依賴關(guān)系,這個計算鏈就是邏輯上的DAG(有向無環(huán)圖),lineage就是一條依賴關(guān)系,多條lineage可以組成DAG
針對RDD的算子操作,分三種:
一種是Transformation(變換),用來構(gòu)建RDD血緣關(guān)系,屬于懶操作,不會真正觸發(fā)RDD的處理計算,比如map(一對一),flatmap(一對多),filter,groupbykey。
另一種是Actions(執(zhí)行),它才會真正觸發(fā)計算,一個action一個job。比如count,reduce,first,take(n),返回的不是rdd就可能是actions
持久化算子:將計算結(jié)果持久化到內(nèi)存,不需要重復(fù)計算
????cache:默認(rèn)存在內(nèi)存中
????persist:手動指定級別
????checkpoint: 持久化到指定目錄,血緣關(guān)系非常復(fù)雜可以使用,可以切斷依賴關(guān)系
寬依賴:子rdd分區(qū)與父rdd分區(qū)多對多,
窄依賴:子rdd與父rdd分區(qū)一對一
緩存作用:保存血緣關(guān)系
檢查點:血緣關(guān)系太長而設(shè)置,類似于快照
任務(wù)分為app,job,stage,task