廈大課程:Spark編程基礎(Python版)html
優秀博文:Spark源碼分析系列(目錄)node
Volumn, Variety, Velocity, Value。sql
經過數據發現問題,再解決問題。數據庫
全樣分析,精確度的要求下降。編程
(1) 批處理計算網頁爬蟲
(2) 流計算架構
S4, Flume, Storm 框架
(3) 圖計算分佈式
GIS系統,Google Pregel, 有專門圖計算的工具。ide
(4) 查詢分析計算
Google Dremel, Hive, Cassandra, Impala等。
SaaS, PaaS, IaaS
流程:ETL (Spark) --> Dataware house (HDFS, Cassandra, HBase) --> Data analysis (Spark) --> Reporting & visualization
Lambda 架構:同時處理「實時」和「離線」的部分。
Tez | 構建有向無環圖。 |
Hive | 數據倉庫,用於企業決策,表面上寫得是sql,實際轉換爲了mapReduce語句。 |
Pig | 相似sql語句的腳本語言,能夠嵌套在其餘語言中。(提供輕量級sql接口) |
Oozie | 先完成什麼,再完成什麼。 |
Zookeeper | 集羣管理,哪臺機器是什麼角色。 |
Hbase | 面向列的存儲,隨機讀寫;HDFS是順序讀寫。 |
Flume | 日誌收集。 |
Sqoop | 關係型數據庫導入Hadoop平臺。主要用於在Hadoop(Hive)與傳統的數據庫間進行數據的傳遞 |
Ambari | 部署和管理一整套的各個套件。 |
Java派別的Spark競爭對手。
基於「流處理」模型,實時性比較好。
Goto: 第一次有人把Apache Flink說的這麼明白!
翻譯成Flink or Spark的形式,相似於 Keras,試圖統一接口。
Goto: Apache Beam -- 簡介
// 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()
(1) RDD 數據抽象
RDD: 彈性分佈式數據集(內存中),存儲資料的基本形式。
分區數量能夠 動態變化。
(2) DAG 有向無環圖
(3) 運行在Executor上的工做單元 - Task
「進程」派生出不少「線程」,而後完成每個任務。
Executor進程,駐留在每個work node上的。
(4) 做業 - Job
一個做業包含多個RDD。
一個做業分解爲多組任務,每一組的集合就是 Stage。
(5) Applicaiton
用戶編寫的spark程序。
基本運行框架。其中,Cluster Manager: spark自帶的、Yarn等等。
SparkContext解析代碼後,生成DAG圖。
(1) 高度受限 - 只讀
本質是:一個 "只讀的" 分區記錄集合。
Transformation 過程當中,RDD --> RDD,期間容許「修改」。
(2) 兩種「粗粒度」操做
* Action類型。(觸發計算獲得結果)
* Transformation類型。(只是作了個意向記錄)
"細粒度" 怎麼辦?例如:網頁爬蟲,細粒度更新。
由於提供了更多的操做,這些 「操做的組合」 也能夠作「相同的事情「。
(3) 更多的"操做"
好比:map, filter, groupBy, join
之因此」高效「,是由於管道化機制。因此不須要保存磁盤,輸入直接對接上一次輸出便可。
數據複製,記錄日誌(關係數據庫),但,這樣開銷太大了。
Spark是自然容錯性:DAG,能夠根據先後節點反推出錯誤的節點內容。
根據 「寬依賴」 劃分 「階段」 的過程。
一個父親對多個兒子。
例如:groupByKey, join操做。
要點:如果寬依賴,則可劃分爲多個」階段「。
由於這樣符合優化原理。
(a) 窄依賴:不要」落地「,比如不用」寫磁盤「,造成管道化的操做。
本來的 "窄依賴" 操做流程。
優化後的操做流程。
(b) 寬依賴:就會遇到shuffle操做,意味着「寫磁盤」的一次操做。
「窄依賴」:多個父親對應一個兒子,不會阻礙效率。
Ref: https://www.zhihu.com/question/23079001
/* implement */
End.