【Spark深刻學習-11】Spark基本概念和運行模式

----本節內容-------java

1.大數據基礎node

 1.1大數據平臺基本框架python

 1.2學習大數據的基礎mysql

 1.3學習Spark的Hadoop基礎linux

2.Hadoop生態基本介紹git

  2.1Hadoop生態組件介紹面試

  2.2Hadoop計算框架介紹算法

3.Spark概述sql

  3.1 Spark出現的技術背景shell

  3.2 Spark核心概念介紹

4.Spark運行模式

   4.1.Spark程序組成

   4.2.Spark運行模式

5.參考資料

---------------------

 

 

1.大數據基礎

1.1 大數據平臺基本框架

 從全局瞭解一下大數據技術的基本框架,在宏觀上有個認識,不至於盲人摸象。董先生貼出來的這個圖,能夠說是很是通用且廣泛的一張圖, 無論你是哪一個行業,框架用這個套,準沒錯。通用就是大而全的東西,不會考慮細節了。在實際生產中,每個細節都不是省油的燈。固然 全局的總體把握,對spark理解很是重要,它在整個體系中扮演什麼角色,這個很基礎 。

 

總體架構分爲6個層面

1) 數據收集

數據採集,是匯聚的一個過程,如淘寶,商家,用戶,用戶行爲,買其餘公司數據,數據集市等,要收集數據過來,使用的技術組件有Flume、kafka、Ftp、Sqoop、DataX等等。一些本身走的坑,主要有:a.穩定和安全,生產中首要是確保生產,不能把對端系統給搞癱了,不少時候,對端系統已經弱不由風了,達到了各類瓶頸,如網絡帶寬,內存和CPU硬件限制等,匯聚數據稍加馬力,就要出事(曾經sqoop抽oralce生產庫,不知道對端oralce那麼脆弱,上來就猛一抽,完蛋);b.網絡複雜,跨網段的數據匯聚,很頭疼,作過幾回匯聚,網絡有N多種,公安網、視頻專網、政務網、互聯網,通過各類跳起色和網閘等等,各類網絡限制,極可能別人鼓吹的神器,由於網絡問題,都是浮雲,c.數據質量垃圾,不敢恭維,數據能拿過來了,可是數據質量真的都不敢恭維,ETL工做作起來,殺人的心都有,d.跨部門溝通和協調問題,人的問題永遠比技術問題還要難解決,是你主動過去取,仍是讓人家送過來,是你去協調別人,仍是別人來找你要作數據匯聚,這是一個問題;溝通是一門藝術,coding則是一門技術。

2)存儲數據

傳統關係型數據庫,很難存海量數據,採用分佈式的架構,其實分佈式存儲數據並非傳統數據庫不能解決的問題,oralce也能作到集羣,mysql也沒問題,關鍵的關鍵仍是如何將存起來的數據用起來,除非你真的只想作個網盤。

3)資源管理

通常公司都不只僅是作網盤,還有挖掘,分析,產生價值,管理cpu,內存等資源,資源管理系統來管理,上百臺,千臺,分佈式集羣的資源管理很講究。

4)計算層

分佈式程序做分析和挖掘, 分三類:批處理,交互式分析,流處理。

批處理:10T的數據如何處理,分佈式的程序進行處理,講究高吞吐率,對時間要求不嚴格,分鐘或者消失級別

交互式分析:不少數據,經過語言表達查詢意圖,立刻反饋結果,支持sql,速度足夠快, 2~3秒,交互的,時間長就不是交互了,秒級;

流式處理:對時間要求很高,毫秒級處理完數據,不想批處理那樣,數據來了就處理

spark能夠解決這三類問題。

5)數據分析層

偏向平臺,比較通用,銀行,電商,均可以用這些引擎來分析問題,改爲和應用相關

6)數據可視化

很重要,不少創業公司在作這個,而且根據行業細分,作的都很是不錯。

spark在第四層,不作收集,資源管理,數據存儲,可視化,僅僅是一個計算框架,能夠解決不少實際問題,不是大數據的所有,是數據分析技術

問題1:爲何不採用oralce技術來實現大數據?

oralce不能解決全部的問題,l雖然oralce有load加載數據,oralce也能作作存儲,不須要作資源管理,一個節點而已,能作sql作分析,可是數據小能夠,沒問題;數據大了,收集,存儲,都要拿出來作獨立模塊,各類模塊和場景都很複雜,oralce打包一塊兒作不了。

問題2:如何實現大數據平臺?

能夠本身玩,在生產中可使用ambari或者CM這樣的部署工具來搭建大數據平臺,本身搭建和運維;也能夠用別人搞好的服務,,如用阿里雲,付錢,每一個環節都實現了, 也能夠google、亞馬遜,數據放在他們那裏,不安全 。在國內,屬於勞動力密集型的地方,不少企業都願意本身搭建運維,各類坑本身一個個的趟過去;而在國外,如歐洲,人力成本貴的要命,寧願花錢買別人的服務,並且他們相信專業的人幹專業的事情。

 

1.2 基本技能素養

大數據之因此有點學習的門檻,其實不是由於它有多難,而是要有一顆耐的主寂寞的心,有些人看到這幅圖可能就要打退堂鼓了。這些技術棧不見得非要精通,至少得用到知道怎麼百度和google,能迅速上手,基於我本身對大數據技術的理解作以下闡述,

 

linux基礎:linux得入門啊,最基本的命令得會,這個沒有入門的,推薦一下老男孩的linux運維繫列視頻課程

編程語言:java,scala,python

開發工具: (1) intellij開發工具,scala程序推薦該工具,eclipse對scala支持的比較差,高亮,自動提示等都比較若,(2)maven項目構建工具,好好學習一下,如何 打包測試,發佈;(3)代碼管理工具git,使用git來下載和管理代碼

hadoop生態組件:hdfs、yarn、pig、hive和zookeeper等

不求樣樣精通,你不是神,根據職業角色劃分,有所側重。角色劃分個人有限理解,一般有作Hadop平臺運維、大數據ETL開發、數據建模分析、大數據可視化等等,每個工種角色都不同,掌握技能側重點也不同。

1.3 Hadoop生態系統基礎

 Hadoop生態組件是Spark的學習基礎,Spark創建在HDFS之上,是Mapreduce的改良,使用Yarn作資源調度,經過Zookeeper作主節點的HA,因此學習Spark至少也有點Hadoop的基礎。另外對於Spark有幾個言論誤解,主要有:(1)spark會取代hadoop,其實否則,他們不是否是一個量級的東西,是一個生態系統,Spark就是一個小小的組件,只是逐步替代Mapreduce編程;(2)Spark諸如強Hadoop百倍,也不全然,只能說個別場景如此,謠言止於智者。

2.Hadoop生態基本介紹

2.1Hadoop生態組件介紹

2.Hadoop生態基本介紹

2.1Hadoop生態組件介紹

1)HDFS和Hbase

· HDFS

分佈式文件系統,它是一個高度容錯的系統,能檢測和應對硬件故障,用於在低成本的通用硬件上運行。HDFS簡化了文件的一致性模型,經過流式數據訪問,提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序。

必需要有HDFS的基礎,明白HDFS的基本架構,基本的文件管理,如block、文件、目錄等,熟悉基本的HDFS shell操做。1G數據,默認是幾個block,5個節點,這些數據會存在哪幾個節點.來自一篇論文,有13年時間了,GFS,很經典,hdfs是gfs的克隆版,google沒有開源、容錯性好,互聯網公司摳門,經常是購買x86的機器,常常掛掉,因此要容錯好;節點,機器,都是一臺服務器,【同一般配置是24個cpu,128G內存,磁盤12*3T】,2萬左右的RMB,掛掉    數據不會丟,一個文件切分紅多個文件,存放在不一樣的節點上,一個文件多份,爲並行化提供存儲的基礎,切成幾塊,並行都就是多少,【16個並行讀,16個block】

基本原理:將文件且紛成等大的數據塊block,默認是128M,存儲在多臺機器上;將數據切分、容錯、負載均衡等功能透明化;可將HDFS當作是一個容量巨大的、具備高容錯性的磁盤。

應用場景:海量數據的可靠性存儲、數據歸檔

基本架構:主從架構,主節點會作HA,數據存放在datanode。

 

Hbase

HBase是一個針對結構化數據的可伸縮、高可靠、高性能、分佈式和麪向列的動態模式數據庫。和傳統關係數據庫不一樣,HBase採用了BigTable的數據模型:加強的稀疏排序映射表(Key/Value),其中,鍵由行關鍵字、列關鍵字和時間戳構成。HBase提供了對大規模數據的隨機、實時讀寫訪問,同時,HBase中保存的數據可使用MapReduce來處理,它將數據存儲和並行計算完美地結合在一塊兒。數據模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value

2)YARN

    羣的資管管理和調度,在yarn上跑各類程序,spark不必定泡在yarn上,也能夠mesos,甚至裸集羣上,有不少分佈式特色,擴展,容錯,並行

是什麼? Hadoop2.0新增的資源管理系統,負責集羣的資源管理和調度,使得多個計算框架能夠運行在一個集羣上。

啥特色? 良好的擴展性、高可用性,對多種類型的應用程序進行統一管理和調度,自帶多種用戶調度器,適合共享集羣環境。

    要熟悉YARN的基本架構,各個角色的功能和交互流程,資源管理的基本方法等。

 

執行流程:

a.nodemanager管理資源,將資源,有cpu,內存等彙報給resourceManager,統一管理

b.客戶client要執行任務

client查找rm->rm找nodemanager->rm找到nodemanager資源後,將資源分給client->client就直接去找nodemanager->nodemanager執行任務

3)MapReduce和Spark

Mapreduce

   源自goole開源的mapreduce論文,發表於2004年12月,是google Mapreduce的克隆版MapReduce是一種計算模型,用以進行大數據量的計算。其中Map對數據集上的獨立元素進行指定的操做,生成鍵-值對形式中間結果。Reduce則對中間結果中相同「鍵」的全部「值」進行規約,以獲得最終結果。要掌握MapReeduce的基本編程模型,WordCount的執行流程。Spark常常和mr對比,經典的最好是瞭解,不要一無所知,只能說你太虛僞了。

特色:良好的擴展性、高容錯性、適合PB級以上海量數據的離線處理;分佈式錯誤是一個正常現象,常態。轉爲2個階段,map和reduce,就是計算機裏面的彙編語言,難用

 

Spark:UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具備的優勢,支持整個目錄讀取支持通配符讀取支持壓縮文件讀取,基於gz的壓縮不帶分片參數,會將每一個block建立一個分片,每一個分片上運行一個task支持讀取目錄中的小文件, 支持整個目錄讀取支持通配符讀取支持壓縮文件讀取,基於gz的壓縮不帶分片參數,會將每一個block建立一個分片,每一個分片上運行一個task支持讀取目錄中的小文件

4)Hive和Pig

Hive:由facebook開源,最初用於解決海量結構化的日誌數據統計問題。Hive定義了一種相似SQL的查詢語言(HQL),將SQL轉化爲MapReduce任務在Hadoop上執行。

一般用於離線分析。

Pig:由yahoo!開源,設計動機是提供一種基於MapReduce的ad-hoc(計算在query時發生)數據分析工具定義了一種數據流語言—Pig Latin,將腳本轉換爲MapReduce任務在Hadoop上執行。

一般用於進行離線分析。

5)Oozie和Zookeeper

Zookeeper:源自Google的Chubby論文,發表於2006年11月,Zookeeper是Chubby克隆版解決分佈式環境下的數據管理問題:統一命名,狀態同步,集羣管理,配置同步等。

6)Flume和sqoop

Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop以前傳輸數據。數據的導入和導出本質上是Mapreduce程序,充分利用了MR的並行化和容錯性。

Flume:Cloudera開源的日誌收集系統,具備分佈式、高可靠、高容錯、易於定製和擴展的特色。

它將數據從產生、傳輸、處理並最終寫入目標的路徑的過程抽象爲數據流,在具體的數據流中,數據源支持在Flume中定製數據發送方,從而支持收集各類不一樣協議數據。同時,Flume數據流提供對日誌數據進行簡單處理的能力,如過濾、格式轉換等。此外,Flume還具備可以將日誌寫往各類數據目標(可定製)的能力。總的來講,Flume是一個可擴展、適合複雜環境的海量日誌收集系統。

7)Ambari

由hortworks開源,是一種基於Web的工具,支持Apache Hadoop集羣的供應、管理和監控。Ambari目前已支持大多數Hadoop組件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeper、Sqoop和Hcatalog等。1000個機器,如何部署,拷貝數據都考死人,自動化安裝工具ambari,點擊鼠標自動安裝,修改配置,啓動服務。

目前來講,只有可視化功能,hadoop生態系統沒有提供,

2.2 Hadoop計算框架介紹

一般來講,計算引擎的分類,

1)批處理:對時間沒有嚴格要求,離線分析,不關係時間,關注吞吐率

2)交互式:支持sql,對數據進行快速分析,人機交互,時間要求高

3)流式處理:流水同樣流入系統,實時分析,來一條處理一條。對每一條數據時間要求高,吞吐率要求不高

4) 迭代式與DAG計算:機器學習算法,離線分析

固然有些公司也有本身的劃分方法,好比hortworks(已經上市了的大數據公司),劃分方式:

用時間來劃分0~5秒實時分析,和其餘公司劃分就不同,好比在線查詢有些公司要求毫秒,做爲參考而已

 

hortworks將計算框架也劃分了幾類

簡單批處理:MapReduce和hive

DAG與迭代式: tez逐步替代hive,Spark替代shark,簡單批處理和DAG迭代式都是離線分析

交互式框架:Impala,Presto

流/實時計算:Stoam,Samz,Spark Streaming

 

涵蓋三類應用場景,若是spark能解決的就用spark把,Spark架構以下

 

1)計算框架

分佈式,基於內存,彈性

2)數據存儲

在hadoop生態系統,如hdfs,hbase,分佈式存儲引擎

3)資源管理

由yarn管理,或者mesos等,有一個內核,spark core,在這之上,構建了不少計算引擎,方便用戶編寫

4)spark sql

寫sql,將sql轉爲spark程序

5)spark streaming

6)graphx:圖計算

7)MLLib:機器學習,通用的機器學習算法,聚類,分類,避免重複造輪子

8)Spark R:用r語言寫spark程序

Spark不是一門孤立的技術,社區很活躍,支持linux和windows;微軟怕被淘汰,給大數據社區貢獻了一些windows運行的patch,但依然不多有人用,spark不斷在發展過程當中,版本的升級都是內核變更,api層不多變更,通常不會該使用和優化爲主,

 

 

3.Spark概述

3.1 Spark出現的技術背景

1)Mapreduce的侷限性

mapreduce框架的侷限性主要表如今

· 僅僅支持map和reduce兩種操做

· 處理效率低(中間結果寫磁盤,多個mr之間經過hdfs交換數據;任務調度和啓動開銷大;沒法充分利用內存,無論什麼操做map和reduce都要排序),爲何寫磁盤,由於當時磁盤便宜,內存貴,如今內存很便宜。

· 不適合作複雜的計算,如迭代計算,如機器學習圖計算、交互處理和流計算。

· 編程不靈活,基本就是分佈式編程界的彙編語言。

2)各類計算框架多樣化

spark以前,不少,各類框架部署和管理都比較亂,spark能夠同時解決這三種場景,學習一類解決三類問題,寫程序和管理都很簡單。 現有的各類計算框架各自爲戰,批處理mapreduce、Hive、Tez,流式計算storm,交互式計算Impala,Spark同時處理批處理、流計算、交互式計算等。

3)Spark特色

·  高效:快10~100倍,取決於邏輯和具體的計算,內存計算引擎,提供駕馭內存的機制,靈活利用內存,DAG的計算楊引擎,減小開銷,使用多線程,減小啓動開銷,shuffle減小沒必要要的開銷和磁盤IO。

· 易用,很是豐富的API,支持JAVA,scala,pyhon,R四種語言,spark以前,scala很小衆

spark帶動scala的銷量,scala代碼少2~5倍,更短,出錯更少,

·與hadoop集成的很好,和yarn很好的集成

給人更多的選擇,你不喜歡可使用mr,我比mr更快,你本身看着辦,以下面的sql語句,   mapreduce程序啓動就會有4個mr,而且讀寫hdfs很是頻繁,效率很低;而使用Spark,DAG模式大大節省磁盤IO。

在一個統一的框架下,進行批處理、流計算、交互式計算

 

3.2 Spark核心概念介紹

1.RDD彈性分佈式數據集

· 數據集的抽象,之前學過不少數據集,array,list,map數據集等,抽象成不一樣的數據結構,

分佈式:數據被分解成不少塊放到不一樣節點

彈性:相對於存儲介質而言,能夠放在磁盤,能夠放在內存,這就是彈性的意思

·  分佈在集羣上,只讀

一個RDD被分解成不少塊partition,這些partition分佈在不一樣的機器上。多個partion組成,hdfs的block有什麼關係,2套術語,都叫塊不能夠,2個團隊2個社區的人,命名方式不一樣了。

·   能夠在內存或者磁盤上

·   能夠並行的構造,一個或者2個能夠產生新的

·  失效後,自動重構

 

2.基本操做Transfoation和Action

rdd是數據,有數據,就有計算操做,基本操做分紅2類(爲何分紅2類),

1)transformation:一類算子的簡稱,完成轉換功能,函數和算子一個意思,當作一個大的數組,裏面有元素,被切分放到各個節點上。

2)action:把rdd變換成一個或者一組值,這些是單機的,前面transformation都是分佈式的值,

 

3)Spark提供了大量的函數

transformation:參數也是函數,輸入T類型rdd,輸出U類型也是RDD,

aciton:輸入rdd,輸出不是rdd了,多是基本類型或者數組等,都是單機的類型

 

4)惰性執行

transformation只會記錄RDD的轉化關係,並不會觸發計算

action是觸發程序執行(分佈式)的算子

 

3.緩存cache和persist

spark很是好的能力,能控制內存的使用量,就是經過cache和persist實現,稱爲控制語句

可讓rdd cache到內存或磁盤上。

問題: cache和persist 區別(面試會常常被問到) ,回答如下知識點

(1)cache和persist都是用於將一個RDD進行緩存的,這樣在以後使用的過程當中就不須要從新計算了,能夠大大節省程序運行時間,

(2) cache只有一個默認的緩存級別MEMORY_ONLY ,cache調用了persist,而persist能夠根據狀況設置其它的緩存級別。

(3)executor執行的時候,默認60%作cache,40%作task操做,persist最根本的函數,最底層的函數

storagelever每一個等級有5個參數

·是否是用磁盤

·是否是不內存

·是否是用tacyon

·是否是反序列化

·緩存保存多少份

序列化器,使用序列化節省內存可是消耗cpu,拿出來的時候要進行反序列化,缺省的,用自帶的,可是性能不好,根據本身的需求是否進行序列化,不要用自帶的序列化器

4.Spark運行模式

4.1.Spark程序組成

1)程序執行

  · spark-shell,讀取文件->RDD轉換-> RDD觸發執行->保存結果

 

· spark-submit,不少參數,注意下參數:--master,指定程序運行的模式,能夠本地,yarn,別的集羣上

 

2)Spark程序架構

2個組件組成,application = driver(1個)+ executor(多個)

· driver:main函數,2g內存1個cpu,運行指定將相應的jar包和文件傳給work node

· application:driver+executor,spark應用程序,2個應用程序是沒有任何關聯,若是共享數據只能hdfs或者tacyon. executor運行是指定,能夠同時跑幾個task,一個application轉爲多個task(driver轉化),task扔給exe執行,

4.2.Spark程運行模式

1)本地模式

不必定非要跑在hadoop集羣,能夠在本地,起多個線程的方式來指定。將Spark應用以多線程的方式直接運行在本地,通常都是爲了方便調試,本地模式分三類

·  local:只啓動一個executor

·  local[k]:啓動k個executor

·  local[*]:啓動跟cpu數目相同的 executor

2)獨立模式

搭建一個集羣跑,分佈式環境中執行spark程序,資源管理和任務監控是Spark本身控制。

 

3)集羣模式

 

driver運行在本地,沒有容錯,可是調試方便

driver運行在集羣裏面,yarn從slave裏面選擇一個跑driver,有個好處就是當driver掛掉了,resourceManager能夠從新啓動一個driver,實現容錯,生產環境使用的模式。

 

5.參考資料

1.http://blog.csdn.net/woshiwanxin102213/article/details/19688393 Hadoop生態系統介紹

2.董西成ppt

相關文章
相關標籤/搜索