Spark基礎
Spark的特點
Spark是快速且通用的計算平臺.
- 快速性(基於記憶體計算,擴充了流行的MapReduce計算模型)
- 通用性(容納了其他分散式系統擁有的功能,批處理,迭代式計算,互動查詢和流處理等)
- 高度開放(提供了Python,Java,Scala,SQL的API和豐富的內建庫,和其他大資料工具整合得很好)
Spark的元件
Spark包括多個緊密整合的元件
Spark Core
- 包含Spark的基本功能,包含任務排程,記憶體管理,容錯機制等
- 內部定義了RDDs(彈性分散式資料集)
- 提供了很多APIs來建立和操作這些RDDs
- 應用場景:為其他元件提供了底層的服務
Spark SQL
- 是Spark處理結構化資料的庫,就像Hive SQL,MySql一樣
- 應用場景:企業中用來做報表統計
Spark Streaming
- 是實時資料流處理元件,類似Storm
- Spark Streaming提供了API來操作實時流資料
- 應用場景:企業中用來從Kafka接收資料做實時統計
Mlib
- 一個包含通用機器學習功能的包,Machine Learning lib.
- 包含分類,聚類,迴歸等,還包括模型評估,和資料匯入
- MLib提供的這些方法,都支援叢集上的橫向擴充套件
- 應用場景:機器學習
Graphx
- 是處理圖的庫(例如社交網路圖),並進行圖的平行計算
- 像Spark Streaming, Spark SQL一樣,它也繼承了RDD API
- 它提供了各種圖的操作,和常用的圖演算法,例如PangeRank演算法
- 應用場景:圖計算
Cluster Managers
- 叢集管理,Spark自帶一個叢集管理是單獨排程器
- 常見的叢集管理包括Hadoop YARN, Apache Mesos
Spark v.s. Hadoop
Hadoop應用場景
- 離線處理
- 對時效性要求不高(處理資料時,中間資料會落到硬碟上)
Spark應用場景
- 時效性要求較高的場景(基於記憶體計算)
- 機器學習場景
- 不具有HDFS的儲存能努力,需要藉助HDFS來持久化資料
RDDs介紹
Definition
- Resilient distributed datasets(彈性分散式資料集,簡寫RDDs)
- RDDs並行分佈在整個叢集中
- RDDs是Spark分發資料和計算的基礎抽象類
- 一個RDD是一個不可改變的分散式集合物件
- Spark中,所有的計算都是通過RDDs的建立,轉換,操作完成的
- 一個RDD內部由許多partitions(分片)組成,分片是Spark並行處理的單元,Spark順序的,並行的處理分片
Driver program
包含程式的main()方法,RDDs的定義和操作.它管理很多節點,稱作executors
SparkContext
- Driver programs通過SparkContext物件訪問Spark.
- SparkContext物件代表和一個叢集的連線(類似於Adapter和Controller)
- 在Shell中SparkContext自動建立好了,就是sc
RDDs基本操作
Transformation
從之前的RDD構建一個新的RDD,例如map()和filter().
- map():逐元素Transformation
- filter():接收函式,返回只包含滿足filter()函式的元素的新RDD
- flatMap():對於每個輸入元素,輸出多個輸出元素,然後再放到一個RDD中
- 集合運算:例如distinct(), union(), innter()等運算
Action
在RDD上計算出來一個結果,把結果返回給driver program或儲存在檔案系統,例如count(),save()等
- reduce():接收一個函式,作用在RDD兩個型別相同的元素上,返回新元素.可以實現RDD中元素的累加,計數和其他型別的聚集操作
- collect():遍歷整個RDD,向driver program返回RDD的內容,需要單機記憶體可以容納下的(因為資料要拷貝給driver,測試使用).大資料的時候,使用saveAsTextFile() action等.
- take(n):返回RDD的n個元素(同時嘗試訪問最少的partition,無序,一般測試使用)
- top():排序(根據RDD中資料的比較器)
- foreach():計算RDD中的每個元素,不返回到本地(一般與println使用,測試用)
RDDs的特性
RDDs的血統關係圖
- Spark維護著RDDs之間的依賴關係和建立關係,叫做血統關係圖
- Spark使用血統關係圖來計算每個RDD的需求和恢復丟失的資料
延遲計算(Lazy Evaluation)
- Spark對RDDs的計算是他們第一次使用action操作的時候
- 可以減少資料的傳輸
- Spark內部記錄metadata表名transformations操作已經被響應了
- 載入資料也是延遲計算,必要的時候才會被載入進去
永續性
- 預設每次在RDDs上面進行action操作時,Spark都需要重新計算RDDs
- 如果想重複利用一個RDD,可以使用RDD.persist()
- uppersist()方法從快取中移除
KeyValue對RDDs
- 使用map()函式,返回key/value對
- 常用操作:
combineByKey()
- 最常用的基於key的聚合函式,返回的型別可以與輸入型別不一樣,許多基於key的聚合函式都用到了它,像groupByKey()
- combinerByKey(): (createCombiner, mergeValue, mergeCombiners, partitioner)
相關文章
- scala基礎語法-----Spark基礎Spark
- Spark學習(二)——RDD基礎Spark
- 【大資料】Spark RDD基礎大資料Spark
- scala_準備_spark_基礎Spark
- spark 基礎開發 Tips總結Spark
- hadoop基礎學習三十一(spark-streaming)HadoopSpark
- Spark Core基礎面試題總結(上)Spark面試題
- Spark基礎學習精髓——第一篇Spark
- 大資料基礎學習-9.Spark2.1.1大資料Spark
- 一文帶你過完Spark RDD的基礎概念Spark
- Spark-stream基礎---sparkStreaming和Kafka整合wordCount單詞計數SparkKafka
- Databricks 第9篇:Spark SQL 基礎(資料型別、NULL語義)SparkSQL資料型別Null
- 《Spark程式設計基礎》(Scala版)第七章簡答題答案(自制)Spark程式設計
- PySpark和SparkSQL基礎:如何利用Python程式設計執行Spark(附程式碼)SparkSQLPython程式設計
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 《Spark程式設計基礎》(Scala版)第三章簡答題答案(自制)Spark程式設計
- 《Spark程式設計基礎》(Scala版)第四章簡答題答案(自制)Spark程式設計
- 《Spark程式設計基礎》(Scala版)第八章簡答題答案(自制)Spark程式設計
- 【FPGA基礎】Latch基礎FPGA
- Spark3學習【基於Java】3. Spark-Sql常用APISparkJavaSQLAPI
- python基礎中的基礎Python
- 前端基礎之jQuery基礎前端jQuery
- Java基礎-語法基礎Java
- Pandas 基礎 (2) - Dataframe 基礎
- [今日白學]元件的基礎的基礎的基礎元件
- 基於 Spark 的資料分析實踐Spark
- 基於 ZooKeeper 搭建 Spark 高可用叢集Spark
- Spark UI (基於Yarn) 分析與定製SparkUIYarn
- Python基礎篇-Python基礎01Python
- 【web前端基礎 | JS基礎】物件Web前端JS物件
- Python基礎:語法基礎(3)Python
- Java基礎-物件導向基礎Java物件
- 基礎
- JavaScript 基礎卷(一):基礎語法JavaScript
- 前端基礎入門四(JavaScript基礎)前端JavaScript
- 測試基礎(四)Jmeter基礎使用JMeter
- c#基礎-基礎-16.stringC#
- Linux基礎學習——檔案基礎Linux