spark任务shell运行_《Spark快速大数据分析》- 根据简单例子理解RDD
1. RDD簡介
RDD,彈性分布式數據集(Resiliennt Distributed Datasets),是Spark中最重要的核心概念,是Spark應用中存儲數據的數據結構。
RDD 其實就是分布式的只讀元素集合。一個Spark應用,本質上就是對RDD進行轉化(Transformation)和行動(Action)操作,Spark會自動將RDD中的數據分發到集群上,并將操作并行化執行,計算得到最終的結果。
我對RDD理解的知識點框架如圖所示,網上有很多資料都有很詳細的解釋,Spark RDD是什么?中就對下面的知識點有比較詳細的解釋,可以參考一下,本文不再贅述。
下一部分通過一個簡單的實際例子,可以對上圖中提到的很多知識點以及Spark的運行原理有更直觀的理解。
2. RDD使用例子
本節介紹一個RDD使用例子,將數據文件讀入為RDD,并作相應的轉化、行動操作,在過程中展示RDD的知識點,例子來自于《Spark快速大數據分析》第八章。
2. 在spark-shell中編寫代碼如下,得到counts,表示每種提示類型的出現次數
// 讀取輸入文件 scala> val input = sc.textFile("input.txt") // 切分為單詞并且刪掉空行 scala> val tokenized = input.map(line => line.split(" ")).filter(words => words.size > 0) // 提取出每行的第一個單詞(日志等級)并進行計數 scala> val counts = tokenized.map(words => (words(0), 1)).reduceByKey{ (a,b) => a + b }3. 使用toDebugString獲取RDD的血緣關系,如查看input的血緣關系,可以看到創建出了一個HadoopRDD 對象,然后對該RDD執行映射操作,最終得到了返回的RDD
4. 同樣的,我們可以查看counts的血緣關系如下,可以看到血緣關系中記錄了從input經過若干轉化操作得到counts,其中reduceByKey需要進行數據混洗
5. 在上圖中我們還可以看到,血緣關系中具有不同的縮進等級,這里同一縮進等級的操作為一個Stage,同一個Stage里的操作可以流水線并行——
- 前面的操作map、filter等不需要數據混洗,為窄依賴,劃分為一個Stage
- reduceByKey需要數據混洗,為寬依賴,劃分為一個Stage
6. 在監控界面上查看任務的劃分與執行情況,默認地址為http://localhost:4040,打開如下,可以看到盡管我們做了數據的讀入、轉化操作,但由于惰性求值的特性,還沒有任務執行
7. 使用collect操作,獲取counts的內容,由于該操作是行動操作,Spark會開始運行任務,在監控界面查看如下,一個Job,兩個Stage,與上面的血緣關系一致
8. 點擊該任務可以查看任務詳情如下,可以看到具體的Stage劃分可視化
9. 使用cache將counts緩存,重新調用collect函數,Spark會根據緩存自動截斷血緣,加快計算,此時在監控界面再次查看任務如下,可以看到只剩下一個Stage,前面的Stage由于緩存跳過計算
// 緩存RDD scala> counts.cache() // 求值 scala> counts.collect()以上就是這個例子的全部內容,通過這個例子來直觀理解RDD的各個特性。如有錯漏,請指正。
Reference
總結
以上是生活随笔為你收集整理的spark任务shell运行_《Spark快速大数据分析》- 根据简单例子理解RDD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 区块链技术的特点是什么
- 下一篇: layui table行点击tr_Lay