[Spark] 01 - What is Spark

大數據


雲計算概念

1、課程資源

廈大課程:Spark編程基礎(Python版)html

優秀博文:Spark源碼分析系列(目錄)node

 

2、大數據特色

大數據4V特性

Volumn, Variety, Velocity, Value。sql

 

思惟方式

經過數據發現問題,再解決問題。數據庫

全樣分析,精確度的要求下降。編程

 

3、分佈式方案

分佈式存儲

    • 分佈式文件系統:GFS/HDFS
    • 分佈式數據庫:BigTable/HBase
    • NoSql

 

分佈式處理

    • map/reduce【面向批處理】
    • Spark【面向批處理】
    • Flink

 

4、大數據計算模式

(1) 批處理計算網頁爬蟲

(2) 流計算架構

S4, Flume, Storm 框架

(3) 圖計算分佈式

GIS系統,Google Pregel, 有專門圖計算的工具。ide

(4) 查詢分析計算

Google Dremel, Hive, Cassandra, Impala等。

 

5、大數據服務

SaaS, PaaS, IaaS

 

6、大數據分析環境 

流程:ETL (Spark) --> Dataware house (HDFS, Cassandra, HBase) --> Data analysis (Spark) --> Reporting & visualization

Lambda 架構:同時處理「實時」和「離線」的部分。

 

   

生態系統

1、Hadoop 生態系統

Tez 構建有向無環圖。
Hive 數據倉庫,用於企業決策,表面上寫得是sql,實際轉換爲了mapReduce語句。
Pig 相似sql語句的腳本語言,能夠嵌套在其餘語言中。(提供輕量級sql接口)
Oozie 先完成什麼,再完成什麼。
Zookeeper 集羣管理,哪臺機器是什麼角色。
Hbase 面向列的存儲,隨機讀寫;HDFS是順序讀寫。
Flume 日誌收集。
Sqoop 關係型數據庫導入Hadoop平臺。主要用於在Hadoop(Hive)與傳統的數據庫間進行數據的傳遞
Ambari 部署和管理一整套的各個套件。

 

2、Spark 生態系統

 

3、Flink

Java派別的Spark競爭對手。

基於「流處理」模型,實時性比較好。

Goto: 第一次有人把Apache Flink說的這麼明白!

 

4、Beam

翻譯成Flink or Spark的形式,相似於 Keras,試圖統一接口。

Goto: Apache Beam -- 簡介

 

 

引入 Spark

1、年輕

 

2、代碼簡潔

// word count.
rdd = sc.textFile("input.csv") wordCounts = rdd.map(lambda line: line.split(","))  \ .map(lambda word: (word, 1))  \ .reduceByKey(lambda x, y: x+y).collect()

 

 

 

 

Spark的設計與運行原理


原理分析

1、基本概念

(1) RDD 數據抽象

RDD: 彈性分佈式數據集(內存中),存儲資料的基本形式

分區數量能夠 動態變化

 

(2) DAG 有向無環圖

 

(3) 運行在Executor上的工做單元 - Task

「進程」派生出不少「線程」,而後完成每個任務。

Executor進程,駐留在每個work node上的。

 

(4) 做業 - Job

一個做業包含多個RDD。

一個做業分解爲多組任務,每一組的集合就是 Stage。

 

(5) Applicaiton

用戶編寫的spark程序。

 

2、鳥瞰圖

基本運行框架。其中,Cluster Manager: spark自帶的、Yarn等等。

 

3、申請資源過程

  1. 主節點 Spark Driver (指揮所, 建立sc即指揮官) Cluster Manager (Yarn) 申請資源。
  2. 啓動 Executor進程,而且向它發送 code 和 files。
  3. 應用程序在 Executor進程 上派發出線程去執行任務。
  4. 最後把結果返回給 主節點 Spark Driver,寫入HDFS or etc.

 

4、運行基本流程

SparkContext解析代碼後,生成DAG圖。

 

 

 

DAG Scheduler

1、 Resilient Distributed Dataset (RDD)

(1) 高度受限 - 只讀

本質是:一個 "只讀的" 分區記錄集合。

Transformation 過程當中,RDD --> RDD,期間容許「修改」。

 

(2) 兩種「粒度」操做

* Action類型。(觸發計算獲得結果)
* Transformation類型。(只是作了個意向記錄)

"細粒度" 怎麼辦?例如:網頁爬蟲,細粒度更新。

由於提供了更多的操做,這些 「操做的組合」 也能夠作「相同的事情「。

 

(3) 更多的"操做"

好比:map, filter, groupBy, join

之因此」高效「,是由於管道化機制。因此不須要保存磁盤,輸入直接對接上一次輸出便可。

 

(4) 自然容錯機制

數據複製,記錄日誌(關係數據庫),但,這樣開銷太大了。

Spark是自然容錯性:DAG,能夠根據先後節點反推出錯誤的節點內容。

 

2、RDD優化

根據 「寬依賴」 劃分 「階段」 的過程。

「寬依賴」 是啥

一個父親對多個兒子。

例如:groupByKey, join操做。

要點:如果寬依賴,則可劃分爲多個」階段「。

 

「階段」 如何劃分

由於這樣符合優化原理。

 

爲什麼要劃分 「階段」

(a) 窄依賴:不要」落地「,比如不用」寫磁盤「,造成管道化的操做。

本來的 "窄依賴" 操做流程。

優化後的操做流程。

 

(b) 寬依賴:就會遇到shuffle操做,意味着「寫磁盤」的一次操做。

 

劃分階段實戰

「窄依賴」:多個父親對應一個兒子,不會阻礙效率。

 

 

 

 

內存有限的狀況下 Spark 如何處理 T 級別的數據?


Ref: https://www.zhihu.com/question/23079001

 

 

/* implement */

 

 

End.

相關文章
相關標籤/搜索