前言
SPARK是一種安全的、經正式定義的編程語言。
Spark圍繞的核心概念,是彈性分佈式數據集(RDD),一個有容錯機制,可以被並行操作的集合。目前有兩種類型的RDD: 並行集合(Parrallelized Collections),接收一個已經存在的Scala集合,在它上面運行各種併發計算; Hadoop數據集(Hadoop DataSets),在一個文件的每條記錄上,運行各種函數。只要文件系統是Hdfs,或者hadoop支持的任意存儲系統。這兩種RDD都可以通過相同的方式進行操作。
Spark特性
Spark通過在數據處理過程中成本更低的洗牌(Shuffle)方式,將MapReduce提升到一個更高的層次。利用內存數據存儲和接近實時的處理能力,Spark比其他的大數據處理技術的性能要快很多倍。
Spark還支持大數據查詢的延遲計算,這可以幫助優化大數據處理流程中的處理步驟。Spark還提供高級的API以提升開發者的生產力,除此之外還為大數據解決方案提供一致的體系架構模型。
Spark將中間結果保存在內存中而不是將其寫入磁盤,當需要多次處理同一數據集時,這一點特別實用。Spark的設計初衷就是既可以在內存中又可以在磁盤上工作的執行引擎。當內存中的數據不適用時,Spark操作符就會執行外部操作。Spark可以用於處理大於集群內存容量總和的數據集。
Spark會嘗試在內存中存儲儘可能多的數據然後將其寫入磁盤。它可以將某個數據集的一部分存入內存而剩餘部分存入磁盤。開發者需要根據數據和用例評估對內存的需求。Spark的性能優勢得益於這種內存中的數據存儲。
Spark的其他特性包括:
- 支持比Map和Reduce更多的函數。
- 優化任意操作算子圖(operator graphs)。
- 可以幫助優化整體數據處理流程的大數據查詢的延遲計算。
- 提供簡明、一致的Scala,Java和Python API。
- 提供交互式Scala和Python Shell。目前暫不支持Java。
Spark是用Scala程序設計語言編寫而成,運行於Java虛擬機(JVM)環境之上。目前支持如下程序設計語言編寫Spark應用:
- Scala
- Java
- Python
- Clojure
- R
Spark生態系統
除了Spark核心API之外,Spark生態系統中還包括其他附加庫,可以在大數據分析和機器學習領域提供更多的能力。
這些庫包括:
- Spark Streaming:Spark Streaming基於微批量方式的計算和處理,可以用於處理實時的流數據。它使用DStream,簡單來說就是一個彈性分佈式數據集(RDD)系列,處理實時數據。
- Spark SQL:Spark SQL可以通過JDBC API將Spark數據集暴露出去,而且還可以用傳統的BI和可視化工具在Spark數據上執行類似SQL的查詢。用戶還可以用Spark SQL對不同格式的數據(如JSON,Parquet以及數據庫等)執行ETL,將其轉化,然後暴露給特定的查詢。
- Spark MLlib:MLlib是一個可擴展的Spark機器學習庫,由通用的學習算法和工具組成,包括二元分類、線性迴歸、聚類、協同過濾、梯度下降以及底層優化原語。
- Spark GraphX:GraphX是用於圖計算和並行圖計算的新的(alpha)Spark API。通過引入彈性分佈式屬性圖(Resilient Distributed Property Graph),一種頂點和邊都帶有屬性的有向多重圖,擴展了Spark RDD。為了支持圖計算,GraphX暴露了一個基礎操作符集合(如subgraph,joinVertices和aggregateMessages)和一個經過優化的Pregel API變體。此外,GraphX還包括一個持續增長的用於簡化圖分析任務的圖算法和構建器集合。
除了這些庫以外,還有一些其他的庫,如BlinkDB和Tachyon。
BlinkDB是一個近似查詢引擎,用於在海量數據上執行交互式SQL查詢。BlinkDB可以通過犧牲數據精度來提升查詢響應時間。通過在數據樣本上執行查詢並展示包含有意義的錯誤線註解的結果,操作大數據集合。
Tachyon是一個以內存為中心的分佈式文件系統,能夠提供內存級別速度的跨集群框架(如Spark和MapReduce)的可信文件共享。它將工作集文件緩存在內存中,從而避免到磁盤中加載需要經常讀取的數據集。通過這一機制,不同的作業/查詢和框架可以以內存級的速度訪問緩存的文件。此外,還有一些用於與其他產品集成的適配器,如Cassandra(Spark Cassandra 連接器)和R(SparkR)。Cassandra Connector可用於訪問存儲在Cassandra數據庫中的數據並在這些數據上執行數據分析。
下圖展示了在Spark生態系統中,這些不同的庫之間的相互關聯。
Spark的體系架構
Spark體系架構包括如下三個主要組件:
- 數據存儲
- API
- 管理框架
接下來讓我們詳細瞭解一下這些組件。
數據存儲:
Spark用HDFS文件系統存儲數據。它可用於存儲任何兼容於Hadoop的數據源,包括HDFS,HBase,Cassandra等。
API:
利用API,應用開發者可以用標準的API接口創建基於Spark的應用。Spark提供Scala,Java和Python三種程序設計語言的API。
Spark學習路線
spark-core、複習hadoop生態、梳理術語、hadoopRDD 源碼分析
spark-core、wordcount案例源碼分析、圖解
spark-core、集合操作API、pvuv分析、RDD源碼分析
spark-core、聚合計算API、combineByKey、分區調優
spark-core、二次排序、分組取TopN、算子綜合應用
spark-core、集群框架圖解、角色功能介紹、官網學習 、搭建
spark-core、history服務、standaloneHA、資源調度參數
spark-core、基於yarn的集群搭建、配置、資源調度參數、優化jars
spark-core-源碼、RpcEnv、standaloneMaster啟動分析
spark-core-源碼、Worker啟動、sparksubmit提交、Driver啟動
spark-core-源碼、Application註冊、Executor資源申請
spark-core-源碼、sparkContext、DAGScheduler、stage劃分
spark-core-源碼、TaskScheduler、Executor運行Task、SparkEnv
spark-core-源碼、MemoryManager、BlockManager
spark-core-源碼、Dependency、SortShuffleManager
spark-core-源碼、SortShuffleWriter、內存緩衝區buffer
spark-core-源碼、SortShuffleWriter、內存緩衝區buffer
spark-core-源碼、UnsafeShuffleWriter、Tungsten、Unsafe、堆外
spark-core-源碼、ShuffleReader、Tracker、Scheduler完整調度
spark-core-源碼、RDD持久化、檢查點、廣播變量、累加器
spark-core-源碼、RDD持久化、檢查點、廣播變量、累加器
spark-sql、大數據中的SQL組成原理
spark-sql、datafram到dataset開發
spark-sql、整合hive的metastore搭建企業級數倉1
spark-sql、整合hive的metastore搭建企業級數倉2
spark-sql、複雜sql、函數、自定義函數、開窗over函數、OLAP
spark-sql-源碼、sql解析、dataset到rdd的執行計劃
spark-sql-源碼、antlr4的sql解析、AST語法樹的邏輯到物理轉換
spark-sql-源碼、邏輯計劃、優化器、物理計劃、轉換RDD
spark-streaming、流式計算之微批計算原理及standalone
spark-streaming、api、ha、檢查點、窗口等機制
spark-streaming、整合MQ-kafka開發
spark-streaming、源碼分析、流式微批任務的調度原理
spark思維導圖
Spark2.2G學習視頻
另外還有SparkPDF技術文檔贈送
需要Spark學習路線、2.2G學習視頻和PDF技術文檔的小夥伴,就可以轉發此文讓更多的人受益,並且關注一下小編因為還會持續分享,最後私信小編“文檔”來進行獲取吧!
閱讀更多 java程序員工程師 的文章