1-Spark編程模型和構建Spark分佈式集羣

    Spark是當今大數據領域最活躍、最熱門、最高效的大數據通用計算平臺。node

第1章 Spark編程模型

    在任何規模的數據計算中,Spark在性能和擴展性上都更具優點,Spark正在加速成爲一體化、多元化的大數據處理中心的首選和惟一的計算平臺。編程

1.1 Spark:一體化、多元化的高速大數據通用計算平臺和庫

    RDD(Resilient Distributed Datasets)  ,彈性分佈式數據集, 是分佈式內存的一個抽象概念,RDD提供了一種高度受限的共享內存模型,即RDD是隻讀的記錄分區的集合,只能經過在其餘RDD執行肯定的轉換操做(如map、join和group by)而建立,然而這些限制使得實現容錯的開銷很低。對開發者而言,RDD能夠看做是Spark的一個對象,它自己運行於內存中,如讀文件是一個RDD,對文件計算是一個RDD,結果集也是一個RDD ,不一樣的分片、 數據之間的依賴 、key-value類型的map數據均可以看作RDD。網絡

    基於RDD,Spark的四大子系統Spark SQL、Spark Streaming、MLlib、GraphX四大子框架和庫之間能夠共享數據和操做。多線程

1.1.1 爲何須要使用Spark

一、Hadoop衰落,Spark稱霸

    Hadoop的MapReduce具備高延遲的致命特色,致使Hadoop無力處理不少對時間有要求的場景。即Hadoop自己的計算模型決定了Hadoop上全部的工做都要轉化成Map、Shuffle和Reduce等核心階段,因爲每次計算都須要從磁盤讀或寫數據,同事整個計算模型須要網絡傳輸,就致使了延遲性。並且任務運行是串行的,致使了無力支持交互式應用。併發

二、爲何須要Spark

    快速:Spark有一個Directed Acyclic Graph(DAG 有向無環圖)執行引擎,支持循環數據流和內存計算。框架

    易用:提供多語言(包括Scala、Java、Python) API,可以快速實現應用。機器學習

    通用:提供了一個強大的技術棧,包括查詢語言 Spark SQL、機器學習工具 MLlib、圖計算工具 GraphX、實時流處理工具 Spark Streaming,在同一個應用程序中能夠無縫地鏈接使用這些框架。分佈式

    集成Hadoop:能夠運行在第二代Hadoop集羣管理Yarn上。函數

三、Spark術語

表1-1 Spark的集中運行模式工具

local 本地模式 經常使用於本地開發測試,本地還分爲local和local-cluster,local-cluster實際上是多線程,可以在單機上處理必定的併發
standalone 集羣模式 典型的Master/Slave模式,不過Master是有單點故障的;Spark支持ZooKeeper來實現HA
on yarn 集羣模式 運行在Yarn資源管理器框架之上,由Yarn負責資源管理,Spark負責任務調度和計算
on mesos 集羣模式 運行在mesos資源管理器框架之上,由Mesos負責資源管理,Spark負責任務調度和計算
on cloud 集羣模式 好比AWS的EC2,使用這個模式能很方便地訪問Amazon的S3 Spark支持多種分佈式存儲系統:HDFS和S3.

    每一個Spark程序都包含一個驅動程序,而這個驅動程序的任務就是直行用戶的main函數,而且將各類算子分不到整個Spark集羣中並行運行。

表1-2 常見術語

Application Spark的應用程序,包含一個Driver program和若干個Executor
Driver Program 運行Application的main()函數,而且建立SparkContext
SparkContext Spark應用程序的入口,負責調度每一個運算資源,協調各個Worker Node上的Executor
Executor

是Application運行在Worker node上的一個進程,該進程負責運行Task,而且負責將數據存在內存或磁盤上。每一個Application都會申請各自的Executors來處理任務。

Worker Node 集羣中任何能夠運行Applicaiton代碼的節點,運行一個或多個Executor進程。
Cluster Manager 在集羣上獲取資源的外部服務(例如:Standalone、Mesos、Yarn)
Task 運行在Executor上的工做單元
Job SparkContext提交的具體Action操做,常和Action對應。
Stage 每一個Job會被拆分稱不少組任務(task),每組任務被稱爲Stage,也稱TaskSet
RDD resilient distributed datasets 彈性分佈式數據集,是Spark最核心的模塊和類
DAGScheduler 根據Job構建基於Stage的DAG,並提交Stage給TaskScheduler
TaskScheduler 將Stage(TaskSet)提交給Worker Node集羣運行,並返回結果
Transformations/Action

Transformations的返回值仍是一個RDD。

Action的返回值是一個Scala集合,不是一個RDD。

全部的Transformation都是採用的懶策略,只將Transformation提交併不會執行計算,只有Action被提交時纔會直行計算。

1.1.2 Spark技術生態系統簡介

相關文章
相關標籤/搜索