《深入理解Spark:核心思想與原始碼分析》(第2章)
《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》
本文主要展示本書的第2章內容:
Spark設計理念與基本架構
“若夫乘天地之正,而御六氣之辯,以遊無窮者,彼且惡乎待哉?”
——《莊子·逍遙遊》
n本章導讀:
上一章,介紹了Spark環境的搭建,為方便讀者學習Spark做好準備。本章首先從Spark產生的背景開始,介紹Spark的主要特點、基本概念、版本變遷。然後簡要說明Spark的主要模組和程式設計模型。最後從Spark的設計理念和基本架構入手,使讀者能夠對Spark有巨集觀的認識,為之後的內容做一些準備工作。
Spark是一個通用的平行計算框架,由加州伯克利大學(
2.1 初識Spark
2.1.1 Hadoop MRv1的侷限
早在Hadoop1.0版本,當時採用的是MRv1版本的MapReduce程式設計模型。MRv1版本的實現都封裝在org.apache.hadoop.mapred包中,MRv1的Map和Reduce是通過介面實現的。MRv1
q執行時環境(JobTracker和TaskTracker);
q程式設計模型(MapReduce);
q資料處理引擎(Map任務和Reduce任務)。
MRv1存在以下不足:
q可擴充套件性差:在執行時,JobTracker既負責資源管理又負責任務排程,當叢集繁忙時,JobTracker很容易成為瓶頸,最終導致它的可擴充套件性問題。
q可用性差:採用了單節點的Master,沒有備用Master及選舉操作,這導致一旦Master出現故障,整個叢集將不可用。
q資源利用率低:TaskTracker 使用“slot”等量劃分本節點上的資源量。“slot”代表計算資源(
q不能支援多種MapReduce框架:無法通過可插拔方式將自身的MapReduce框架替換為其他實現,如Spark、Storm等。
MRv1的示意如圖2-1。
圖2-1 MRv1示意圖[1]
Apache為了解決以上問題,對Hadoop升級改造,MRv2最終誕生了。MRv2中,重用了MRv1中的程式設計模型和資料處理引擎。但是執行時環境被重構了。JobTracker被拆分成了通用的資源排程平臺(ResourceManager,簡稱RM)和負責各個計算框架的任務排程模型(ApplicationMaste,簡稱AM)。MRv2中MapReduce的核心不再是MapReduce框架,而是YARN。在以YARN為核心的MRv2中,MapReduce框架是可插拔的,完全可以替換為其他MapReduce實現,比如Spark、Storm等。MRv2的示意如圖2-2所示。
圖2-2 MRv2示意圖
Hadoop MRv2雖然解決了MRv1中的一些問題,但是由於對HDFS的頻繁操作(包括計算結果持久化、資料備份及shuffle等)導致磁碟I/O成為系統性能的瓶頸,因此只適用於離線資料處理,而不能提供實時資料處理能力。
2.1.2 Spark使用場景
Hadoop常用於解決高吞吐、批量處理的業務場景,例如離線計算結果用於瀏覽量統計。如果需要實時檢視瀏覽量統計資訊,Hadoop顯然不符合這樣的要求。Spark通過記憶體計算能力極大地提高了大資料處理速度,滿足了以上場景的需要。此外,Spark還支援SQL查詢,流式計算,圖計算,機器學習等。通過對Java、Python、Scala、R等語言的支援,極大地方便了使用者的使用。
2.1.3 Spark的特點
Spark看到MRv1的問題,對MapReduce做了大量優化,總結如下:
q快速處理能力。隨著實時大資料應用越來越多,Hadoop作為離線的高吞吐、低響應框架已不能滿足這類需求。Hadoop MapReduce的Job將中間輸出和結果儲存在HDFS中,讀寫HDFS造成磁碟IO成為瓶頸。Spark允許將中間輸出和結果儲存在記憶體中,節省了大量的磁碟IO。同時Spark自身的DAG執行引擎也支援資料在記憶體中的計算。Spark官網聲稱效能比Hadoop快100倍,如圖2-3所示。即便是記憶體不足需要磁碟IO,其速度也是Hadoop的10倍以上。
圖2-3 Hadoop與Spark執行邏輯迴歸時間比較
q易於使用。Spark現在支援Java、Scala、Python和R等語言編寫應用程式,大大降低了使用者的門檻。自帶了80多個高等級操作符,允許在Scala,Python,R的shell中進行互動式查詢。
q支援查詢。Spark支援SQL及Hive SQL對資料查詢。
q支援流式計算。與MapReduce只能處理離線資料相比,Spark還支援實時的流計算。Spark依賴Spark Streaming對資料進行實時的處理,其流式處理能力還要強於Storm。
q可用性高。Spark自身實現了Standalone部署模式,此模式下的Master可以有多個,解決了單點故障問題。此模式完全可以使用其他叢集管理器替換,比如YARN、Mesos、EC2等。
q豐富的資料來源支援。Spark除了可以訪問作業系統自身的檔案系統和HDFS,還可以訪問Cassandra, HBase, Hive, Tachyon以及任何Hadoop的資料來源。這極大地方便了已經使用HDFS、Hbase的使用者順利遷移到Spark。
2.2 Spark基礎知識
1.版本變遷
經過4年多的發展,Spark目前的版本是1.4.1。我們簡單看看它的版本發展過程。
1)Spark誕生於UCBerkeley的AMP實驗室(2009)。
2)Spark正式對外開源(2010)。
3)Spark 0.6.0版本釋出(2012-10-15),大範圍的效能改進,增加了一些新特性,並對Standalone部署模式進行了簡化。
4)Spark 0.6.2版本釋出(2013-02-07),解決了一些bug,並增強了系統的可用性。
5)Spark 0.7.0版本釋出(2013-02-27),增加了更多關鍵特性,例如:Python API、Spark Streaming的alpha版本等。
6)Spark 0.7.2版本釋出(2013-06-02),效能改進並解決了一些bug,新的API使用的例子。
7)Spark接受進入Apache孵化器(2013-06-21)。
8)Spark 0.7.3版本釋出(2013-07-16),一些bug的解決,更新Spark Streaming API等。
9)Spark 0.8.0版本釋出(2013-09-25),一些新功能及可用性改進。
10)Spark 0.8.1版本釋出(2013-12-19),支援Scala 2.9,YARN 2.2,Standalone部署模式下排程的高可用性,shuffle的優化等。
11)Spark 0.9.0版本釋出(2014-02-02),增加了GraphX,機器學習新特性,流式計算新特性,核心引擎優化(外部聚合、加強對YARN的支援)等。
12)Spark 0.9.1版本釋出(2014-04-09),增加使用YARN的穩定性,改進Scala和Python API的奇偶性。
相關推薦
《深入理解Spark:核心思想與原始碼分析》(第2章)
《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 本文主要展示本書的第2章內容: Spark設計理念與基本架構 “若夫乘天地之正,而御六氣之辯,以遊無窮者,彼且惡乎待哉?” ——《莊子·逍遙遊》 n本章導讀: 上一章,介紹了Spark環境的搭建,為方便讀
《深入理解SPARK:核心思想與原始碼分析》一書正式出版上市
自己犧牲了7個月的週末和下班空閒時間,通過研究Spark原始碼和原理,總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究原始碼時的Spark版本是1.2.0,經過7個多月的研
《深入理解Spark:核心思想與原始碼分析》(前言及第1章)
自己犧牲了7個月的週末和下班空閒時間,通過研究Spark原始碼和原理,總結整理的《深入理解Spark:核心思想與原始碼分析》一書現在已經正式出版上市,目前亞馬遜、京東、噹噹、天貓等網站均有銷售,歡迎感興趣的同學購買。我開始研究原始碼時的Spark版本是1.2.0,經過7個多月的研究和出版社近4個月的流
《深入理解SPARK:核心思想與原始碼分析》——SparkContext的初始化(仲篇)——SparkUI、環境變數及排程
《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 《深入理解Spark:核心思想與原始碼分析》一書第二章的內容請看連結《第2章 SPARK設計理念與基本架構》 由於本書的第3章內容較多,所以打算分別開闢四篇隨筆分別展現。 本文展現第3章第二部分的內容:
《深入理解Spark:核心思想與原始碼分析》——SparkContext的初始化(伯篇)——執行環境與元資料清理器
《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 《深入理解Spark:核心思想與原始碼分析》一書第二章的內容請看連結《第2章 SPARK設計理念與基本架構》 由於本書的第3章內容較多,所以打算分別開闢四篇隨筆分別展現。本文展現第3章第一部分的內容: 第3章
《深入理解Spark-核心思想與原始碼分析》讀書筆記(1)
前兩章 第一章主要是講如何安裝和配置spark,以及如何匯入spark原始碼除錯執行;第二章主要講的是上次那本書《Spark快速大資料分析》的內容,科普一下spark的知識。 第三章 SparkContext的初始化 1. 概述 這章的主要內容就
閱讀《大型網站技術架構:核心原理與案例分析》第五、六、七章,結合《河北省重大技術需求征集系統》,列舉實例分析采用的可用性和可修改性戰術
定時 並不會 表現 做出 span class 硬件 進行 情況 網站的可用性描述網站可有效訪問的特性,網站的頁面能完整呈現在用戶面前,需要經過很多個環節,任何一個環節出了問題,都可能導致網站頁面不可訪問。可用性指標是網站架構設計的重要指標,對外是服務承諾,對內是考核指
學習Javascript數據結構與算法(第2版)筆記(1)
布爾值 efi prim ray 叠代器 undefined ply 內部 HA 第 1 章 JavaScript簡介 使用 Node.js 搭建 Web 服務器 npm install http-server -g http-server JavaScript 的類型有
學習Javascript數據結構與算法(第2版)筆記(3)
清空 tac math bcd lse += 基本類型 In 所有 第 3 章 1. 棧數據結構 棧是一種遵從後進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,稱作棧頂,另一端就叫棧底。在棧裏,新元素都靠近棧頂,舊元素都接近棧底。 1.1 棧的操
Beginng_Rust(譯):定義通用函式和結構(第十章)(完+1)
在本章中,您將學習: •如何編寫單個函式定義,其呼叫可以有效地處理不同的資料型別 •如何使用型別推斷來避免指定使用的型別 通用功能 •如何編寫單個struct,tuple-struct或enum型別,其例項可以包含有效的不同資料型別 •如何使用兩個重要的標準通用
《TensorFlow:實戰Google深度學習框架(第2版)》高清中文版PDF下載
《TensorFlow:實戰Google深度學習框架(第2版)》高清中文版PDF下載 領域旗艦重磅升級 新老谷歌專家聯袂 首度全面支援1.4.x程式碼 大量增補新版獨有核心功能 下載地址:https://pan.baidu.com/s/1uijUhufBV6nXNgz-VxZUGQ備用地址:https:/
【無私分享:ASP.NET CORE 專案實戰(第九章)】建立區域Areas,新增TagHelper
目錄索引 簡介 在Asp.net Core VS2015中,我們發現還有很多不太簡便的地方,比如右擊新增檢視,轉到試圖頁等功能圖不見了,雖然我們可以通過工具欄的自定義命令,把這兩個右擊選單新增上,但是貌似是灰色的不能用。 其實,這樣也好,通過手動建立,更讓我們深刻的理解M
【無私分享:ASP.NET CORE 專案實戰(第十章)】釋出專案到 Linux 上執行 Core 專案
目錄索引 簡介 ASP.Net Core 給我們帶來的最大的亮點就是跨平臺,我在我電腦(win7)上用虛擬機器建了個 CentOS7 ,來演示下,我們windows上的專案如何釋出專案到Linux上執行。我這裡有個在windows上搭建過的程式,我們主要演示如何在linux上執
【無私分享:ASP.NET CORE 專案實戰(第六章)】讀取配置檔案(一) appsettings.json
目錄索引 簡介 在我們之前的Asp.net mvc 開發中,一提到配置檔案,我們不由的想到 web.config 和 app.config,在 core 中,我們看到了很多的變化,新的配置系統顯得更加輕量級,具有更好的擴充套件性,並且支援多樣化的資料來源。 部落格園對於這個的
【無私分享:ASP.NET CORE 專案實戰(第八章)】讀取配置檔案(二) 讀取自定義配置檔案
目錄索引 簡介 但隨之產生了問題:我們使用的是在 Startup.cs 中(如下圖)來實現配置讀取,有兩個問題 ① 我們如果定義N種配置,是否要再這裡新增N條這樣的配置 ; ② 如果我們的配置不想寫在appsettings.json中呢 解決問題
【無私分享:ASP.NET CORE 專案實戰(第十三章)】Asp.net Core 使用MyCat分散式資料庫,實現讀寫分離
目錄索引 簡介 MyCat2.0版本很快就釋出了,關於MyCat的動態和一些問題,大家可以加一下MyCat的官方QQ群:106088787。我們今天主要介紹一下,在我們的Asp.net Core中如何使用Mycat,這源於一個大神(Amamiya Yuuko)的分享,但是,這中
【無私分享:ASP.NET CORE 專案實戰(第四章)】Code First 建立資料庫和資料表
目錄索引 簡介 本章我們來介紹下Asp.net Core 使用 CodeFirst 建立資料庫和表,通過 控制檯 和 dotnet ef 兩種方式 修改EF上下文物件,新增測試類 我修改了一下名字,Domains 改為了 wkmvc.Data 我們新建一個
【無私分享:ASP.NET CORE 專案實戰(第七章)】檔案操作 FileHelper
目錄索引 簡介 在程式設計中,我們很多情況下,會用到對檔案的操作,在 上一個系列 中,我們有很多檔案基本操作的示例,在Core中有一些改變,主要是我們常用的Server.MapPath()不存在了,不知道後續的版本會不會有,在這裡,我們只能自己封裝方法去實現。今天,我們就對一些基本
【無私分享:ASP.NET CORE 專案實戰(第五章)】Repository倉儲 UnitofWork
1 public abstract class Repository<T> : IRepository<T> where T : class 2 { 3 #region 資料上下文 4 5 /// <s
【無私分享:ASP.NET CORE 專案實戰(第三章)】EntityFramework下領域驅動設計的應用
這好像就是比我的多了一個“中轉層”,把我們的介面作為了一箇中轉,領域層繼承了倉儲實現業務和資料操作,這有什麼實際意義嗎?希望大家指正一下: 我不理解的是,如果是按照這樣,那麼我如果要修改註冊方法,比如我要在上面方法中傳遞 eamil,name,password 的基礎上還需要傳遞手機號碼,那麼我需要修改