一、spark特點
1.離線批處理(利用核心)
2.互動式查詢
3.實時計算
4.演算法建模
二、spark核心資料結構-rdd(彈性分布式資料集)
初學時,你可以把rdd看做是一種特殊的集合型別,比如array或list 但是rdd這種集合型別比較特殊:
①rdd有分割槽機制
②rdd有容錯機制,即rdd資料丟失可以恢復
分割槽:
分割槽機制的目的是可以分布式(並行)的處理乙個集合的資料,所以可以極大提高處理效率
三、建立rdd的兩種途徑:
(1)可以將乙個普通的集合(array或list)轉變為rdd
val rdd1=sc. parallelize(a1, 2)(sc是spark的入口類)
檢視分割槽數:scala> rdd1.partitions.size
檢視每個分割槽情況:scala> rdd1.glom.collect
返回整個rdd資料:scala> rdd1.collect
如何操作rdd ?對於scala集合的方法都可以用於rdd,比如map, filter 等
(2)可以通過讀取外部的儲存系統(hdfs,s3,本地磁碟檔案…) 的檔案, 把檔案資料轉變為rdd
例如,先在/home下建立1.txt,可以寫入幾條ip資料
scala> val r1=sc.textfile(「file:///home/1.txt」,2)
scala> val r2=sc.textfile(「hdfs://hadoop01:9000/1.txt」,2)
四、寬依賴與窄依賴
1.窄依賴
特點:父分割槽和子分割槽是一對一關係
會產生窄依賴的典型懶方法:
map 2. flatmap 3. filter 等
窄依賴可以認為僅是簡單將父分割槽資料根據轉換規則進行轉換,並不涉及其他複雜 的分割槽操作。
窄依賴不會產生shuffle,沒有磁碟1/0。所以執行效率很高。此外,如果dag存在多個連續的窄依賴,spark底層會執行優化,將多個連續的窄依賴放到一起執行,從而進一步提高執行效率。這種優化方式稱為流水線優化。
2.寬依賴
特點:父分割槽和子分割槽是一對多關係
會產生寬依賴的典型懶方法:
groupby 2. groupbykey 3. reducebykey
記憶技巧:凡是產生分組型別的懶操作,產生的依賴一定是寬依賴
寬依賴會產生shuffle過程,即按照某種分組條件或聚合規則,將資料傳送到正確的分割槽。因為在此過程中,資料量很大,並且會分散到很多伺服器上,如果完全基於記憶體來處理肯定不夠,所以會發生多次的磁碟溢寫過程,即會發生磁碟1/0(因為要生成中間的臨時結果檔案)。
此外,如果不將結果存在臨時檔案,一旦分割槽資料丟失,恢復代價可能很大(最糟糕情況可能要重算所有父分割槽資料)
綜上,spark框架是有shuffle過程的,但是spark已經盡量避免產生shuffle (窄依賴沒有shuffle)從而提高執行效率。
spark學習心得
spark學習,官網閱讀完之後,練習官方給出的例子之後,就是閱讀原始碼了,學習spark,了解spark應用後,就是閱讀原始碼了,閱讀原始碼並不難,編譯器開啟就能知道,而要知道原始碼設計思路,為什麼這麼設計,就是乙個比較困難的地方了 閱讀spark原始碼,其核心要素就是圍繞著rdd進行深入 和spa...
學習心得 python學習心得
自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...
學習心得 我的學習心得
我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...