背景
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 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)模式為例介紹任務執行流程。
客戶端運行用戶程序,啟動 Driver。
Driver將作業轉換為DAG圖(類似數據處理的流程圖),根據策略將DAG圖劃分為多個Stage,最終生成一系列最小可執行的Task。
Driver根據Task的需求,向Master申請運行Task所需的資源。
Master為Task調度分配滿足需求的Worker節點,在Worker節點啟動Exeuctor。
Exeuctor啟動後向Driver註冊。
Driver將Task調度到Exeuctor執行。
Executor執行結果寫入文件或返回Driver。
閱讀更多 加米穀大數據 的文章