spark簡介

學習教程:

https://www.cnblogs.com/qingyunzong/category/1202252.html

https://www.cnblogs.com/wonglu/p/5901356.html

http://spark.apache.org/docs/latest/quick-start.html

1、什麼是spark

目前按照大數據處理類型來分大致可以分爲:批量數據處理、交互式數據查詢、實時數據流處理,這三種數據處理方式對應的業務場景也都不一樣;

  Hadoop適用於Map、Reduce存在的任何場景,具體場景比如:WordCount、排序、PageRank、用戶行爲分析、數據統計等,而這些場景都算是批量數據處理,而Hadoop並不適用於交互式數據查詢、實時數據流處理;

這時候就出現了各種數據處理模型下的專用框架如:Storm、Impala、GraphLab等;

1、Storm:針對實時數據流處理的分佈式框架;

2、Impala:適用於交互式大數據查詢的分佈式框架;

3、GraphLab:基於圖模型的機器學習框架;

這時候如果一個團隊或一個公司中同時都有設計到大數據批量處理、交互式查詢、實時數據流處理這三個場景;這時候就會有一些問題:
  
1. 學習成本很高,每個框架都是不同的實現語言、不同的團隊開發的;
1. 各個場景組合起來代價必然會很大;
1. 各個框架中共享的中間數據共享與移動成本高;

  • Spark提供了全面、統一適用於不同場景的大數據處理需求(批量數據處理、交互式數據查詢、實時數據流處理、機器學習);

  • spark擴展了廣泛使用的MapReduce計算模型。高效的支撐更多計算模式,包括交互式查詢和流處理。

  • spark的一個主要特點是能夠在內存中進行計算,及時依賴磁盤進行復雜的運算,Spark依然比MapReduce更加高效。

2、spark的組成

image
- SparkCore:將分佈式數據抽象爲彈性分佈式數據集(RDD),實現了應用任務調度、RPC、序列化和壓縮,併爲運行在其上的上層組件提供API。

  • SparkSQL:Spark Sql 是Spark來操作結構化數據的程序包,可以讓我使用SQL語句的方式來查詢數據,Spark支持 多種數據源,包含Hive表,parquest以及JSON等內容。

  • SparkStreaming: 是Spark提供的實時數據進行流式計算的組件。

  • MLlib:提供常用機器學習算法的實現庫。

  • GraphX:提供一個分佈式圖計算框架,能高效進行圖計算。

  • BlinkDB:用於在海量數據上進行交互式SQL的近似查詢引擎。

  • Tachyon:以內存爲中心高容錯的的分佈式文件系統。

3、彈性分佈式數據集RDD

教程:https://blog.csdn.net/lbyyy/article/details/53334019

RDD支持兩種操作:

  • 轉換(transformation operation)轉換操作將一個RDD經過操作後返回一個全新的RDD,轉換操是lazy(惰性)的這期間不會產生任何數據的計算;

轉換函數有:distinct、filter、map、flatMap、union、groupByKey等;
- 行動(action operation)每一個行動操作都會觸發Spark Job進行計算並返回最終的結果,

行動操作有這麼幾類:返回標量,count返回元素的個數;返回Scala集合,task(n)返回0到n-1組成的集合;寫入外部存儲,saveAsHadoopFile(path)存儲到HDFS;

行動函數有:count、top、task、saveAsHadoopFile等;

RDD爲不可變的數據集,可以使用轉換操作“修改”一個RDD,但這操作過後返回的是一個全新的RDD 原本RDD並沒有改變;

image

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