文章目錄
Spark簡介
Spark的歷史
Spark在2012開源,距今長達6年時間,hadoop已經有12年的歷史了。Spark使用Scala語言進行實現,它是一種面向對象、函數式編程語言,能夠像操作本地集合對象一樣輕鬆地操作分佈式數據集,在Spark官網上介紹,它具有運行速度快、易用性好、通用性強和隨處運行等特點。
spark特點
- 運行速度快
spark在內存中對數據進行迭代計算如果數據由內存讀取是hadoop MapReduce的100倍。Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小.
- 易用性好
支持Scala編程java編程 Python等語言(Scala是一種高效可擴展語言,使用簡潔)
- 一次編譯,隨意執行
spark運行在Hadoop,cloud上,能夠讀取HDFS,HBase Cassandra等數據源
- 通用性強
spark生態圈(BDAS)包括spark Core、spark SQL Spark Streaming等組件,這些組件提供spark Core處理內存計算框架
spark開發者
加州大學伯克利分校的AMP實驗室開發的。
spark比MR快的原因
Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。
總結來說就是:spark是基於內存迭代的,而MR是基於磁盤迭代的。
Spark的四種運行模式
- local
- standalone
- yarn
- mesos
開發Spark的語言
- Java
- Scala
- Python
- R
1,首先Spark計算框架是由Scala來寫,所以Scala作爲Spark的開發語言,兼容性和效率上都是毫無疑問的。
2,Java和Scala都是基於JVM的編程語言,所以Java和Scala在開發Spark上兼容性和效率都是一樣的。
3,Python是解釋性語言,他要在解釋中運行,那麼他要開發Spark應用程序,就要運行在JVM上,也就是解釋器要和JVM之間要進行通信,所以它的效率要比Java和Scala差。
4,R語言,它的應用並不是很多,這裏不做詳細介紹。
RDD(彈性分佈式數據集)
RDD簡介
RDD(Resilient Distributed Dataset)叫做彈性分佈式數據集,是Spark中最基本的數據抽象,它代表一個不可變、可分區、裏面的元素可並行計算的集合。RDD具有數據流模型的特點:自動容錯、位置感知性調度和可伸縮性。RDD允許用戶在執行多個查詢時顯式地將工作集緩存在內存中,後續的查詢能夠重用工作集,這極大地提升了查詢速度。
RDD五大特性
RDD的三種算子
- Transformation類算子
- Action類算子
- 控制類算子
Transformation類算子
- map:一對一
- flatMap:一對多
- filter:一對N(0,1)
- join:inner(內連接)
- leftouter join
- rightouter join
- fullouter join
- sortByKey
- groupByKey
- reduceByKey
- sortBy
- sample
Action類算子
1、 count
2、collect:將task的計算結果拉回到Driver端
3、foreach:不會回收所有task的計算結果,原理:將用戶傳入的函數傳遞到 各個節點上去執行,只能去各個節點找計算結果。
查看結果的方式:
- web UI
- 去各個節點的Worker工作目錄查看 SPARK_WORKER_DIR去各個節點的Worker工作目錄查看 SPARK_WORKER_DIR
4、saveAsTextFile(path) path:本地、HDFS路徑
5、reduce
控制類算子
- cache
- persist
MEMORY_ONLY
DISK_ONLY
MEMORY_AND_DISK
注意點:
- 控制類算子後不能立即緊跟action類算子
- 緩存單元是Partition
- 懶執行,需要action類算子觸發執行
如果你的Application中只要一個job,沒有必要使用控制類算子
RDD的大體流程
如圖即是wordCount小案例的大體流程,相比較於MR應用程序簡單了許多,並且執行效率上也更快。
Spark集羣搭建
請參考下一篇博客Spark集羣的搭建。