DT_大數據夢工廠 第18課 RDD持久化、廣播、累加器

今天內容
1.RRD持久化實戰
2.Spark廣播實戰
3.Spark累加器實戰


如果想在命令終端中看到執行結果,就必須collect
凡是Action級別的操作都會觸發sc.runJob

Spark所有的算法 都有persit。

persit原因: Spark在默認情況下,數據放在內存,適合高速迭代,風險當然也高,所以需要將前面的操作進行persit.
persist:
1.某步驟計算特別耗時
2.計算鏈條特別長的情況;
3.checkpoint坐在的RDD也一定要持久化數據;
4.shuffle之後;
5.shuffle之前(框架默認幫助我們把數據持久化到本地磁盤)
前4步手動的,第5是系統自動的


序列化目的 爲節省空間
將內存中的數據序列化,使用數據時需要反序列化

StorageLevel
MEMORY
 MEMORY_AND_DISK , 主要防止OOM

'都是使用內存,如果MEMORY不夠,OOM數據會丟失


sc.textFile("/library/wordcount/input/Data").flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_+_,1).cache.count

val cached = sc.textFile("/library/wordcount/input/Data").flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_+_,1).cache

Cache之後一定不能立即有其它算子!!!


廣播是由Driver發給當前Application分配的所有Executor內存級別的全局只讀變量,Executor中的線程池中的線程共享該全局變量,極大的減少了網絡傳輸(否則的話每個Task都要傳輸一次該變量)並極大的節省了內存,當然也隱形的提高的CPU的有效工作。

任務能享用 唯一的變量 ,減少OOM的可能
大變量: 默認情況下,每個Task一定會COPY份數據副本,函數式編程變量不變. 變量大會導致 OOM


內存佔用大,如果變量比較大,剛極易出現OOM

累加器,全局級別的
Accumulator:對於Executor只能修改但不可讀,只對Driver可讀

附上王老師個人名片信息
王家林  中國Spark第一人
DT大數據夢工廠
新浪微博: http://weibo.com.ilovepains/
微信公共號:DT_Spark
博客:http://bolg.sina.com.cn/ilovepains
手機:18610086859
qq:1740415547
郵箱:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章