大數據基礎之Spark

大數據基礎之Spark

背景

Spark 是 2010 年由 UC Berkeley AMPLab 開源的一款 基於內存的分佈式計算框架,2013 年被Apache 基金會接管,是當前大數據領域最為活躍的開源項目之一(http://spark.apache.org/)。

Spark 在 MapReduce 計算框架的基礎上,支持計算對象數據可以直接緩存到內存中,大大提高了整體計算效率。特別適合於數據挖掘與機器學習等需要反覆迭代計算的場景。

特性

高效:Spark提供 Cache 機制,支持需要反覆迭代的計算或者多次數據共享,基於Spark 的內存計算比 Hadoop MapReduce 快100倍。

易用:Spark提供 20 多種數據集操作類型,並支持使用 Python 和 Scala 腳本開發應用。

先進架構:Spark採用 Scala 語言編寫,基於 DAG 圖的執行引擎,減少多次計算之間中間結果寫到 HDFS 的開銷。

應用場景

大數據基礎之Spark

Spark之上有四種應用工具庫。

Spark Streaming: 用於流式計算。

MLlib:用於機器學習(聚類、協同過濾等)。

Spark SQL:用於處理結構化數據。

GraphX:用於圖和圖並行計算的API。

目前主要應用在廣告精準投放系統志報表即時查詢、以及推薦系統等業務場景。這些應用場景的共同特點是計算量大且效率要求高。

部署模式

Spark有三種部署模式。

Standalone:

使用Spark自帶的集群管理器。

Spark on Mesos:使用 Mesos 管理資源。

Spark on YARN:使用 YARN 管理資源。

任務流程

Spark重要組件包括 Driver Program(Driver) 和 Executor。以 Standalone(Driver 運行在 Client)模式為例介紹任務執行流程。

大數據基礎之Spark

  1. 客戶端運行用戶程序,啟動 Driver。

  2. Driver將作業轉換為DAG圖(類似數據處理的流程圖),根據策略將DAG圖劃分為多個Stage,最終生成一系列最小可執行的Task。

  3. Driver根據Task的需求,向Master申請運行Task所需的資源。

  4. Master為Task調度分配滿足需求的Worker節點,在Worker節點啟動Exeuctor。

  5. Exeuctor啟動後向Driver註冊。

  6. Driver將Task調度到Exeuctor執行。

  7. Executor執行結果寫入文件或返回Driver。


分享到:


相關文章: