Spark運行原理和RDD解析(DT大資料夢工廠)

來源:互聯網
上載者:User

標籤:spark運行原理和rdd解析

Spark一般基於記憶體,一些情況下也會基於磁碟

Spark優先會把資料放到記憶體中,如果記憶體實在放不下,也會放到磁碟裡面的

不單能計算記憶體放的下的資料,也能計算記憶體放不下的資料

實際如果資料大於記憶體,則要考慮資料放置策略和最佳化演算法,因為Spark初衷是一寨式處理

小到5~10台的分布式大到8000台的規模,Spark都能運行

大資料計算問題:互動式查詢(基於shell、sparkSQL)、批處理、機器學習和計算等等

底層基於RDD,分布式彈性資料級,支援各種各樣的比如流處理、SQL、SparkR等等範式

==========Spark特點============

要理解Spark,從以下方面理解

1、分布式多台機器運行

     不同節點會處理其中一部分資料,各個節點資料處理互不干擾,分布式做並行化

     Cluster Manager負責分配資源到各個節點中,各節點算完之後,再匯總到Cluster Manager再統一輸出

     

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

2、記憶體式+磁碟計算

     例如:300萬條資料,分配到3台機器,比如每台機器100萬(也可能不是平均),一台機器100萬條記憶體放的下放記憶體,放不下就記憶體

3、迭代式計算是Spark真正的精髓

     將計算分成N個過程,一個過程結束再下一個 

     shuffle是一個節點到另外一個節點

==========開發============

我們寫好程式通過Driver到各個機器

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

為什麼大部分大部分用JAVA寫程式

因為JAVA的人比較多,Scala的人比較少

JAVA和J2EE融合比較方便

後續維護比較方便

缺點:JAVA開發Spark太繁瑣了

後面的例子同時使用Scala和JAVA實現

開發是單獨的機器,提交機器是在另外的機器上

可以處理的資料來源:SparkWorker可以從各種資料,除了HDFS、HBase,還可以從Hive,oracle,mysql

                                 註:Hive資料倉儲,資料引擎,SparkSQL可以實現這個,但是不能完全取代Hive

處理資料輸出:HDFS、HBase、Hive、oracle、s3或者直接返回到用戶端等等

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

==========運行============

一切基於RDD(彈性分布式資料集),

彈性之一:

進行資料分區,預設放在記憶體中的,如果記憶體放不下,一部分會放在磁碟上進行儲存,對使用者來說完全不需要關心它資料是在哪裡的,RDD會自動進行記憶體和磁碟的切換

彈性之二:

基於Lineage的高效容錯,假設一個作業步驟有1000個步驟,假設在901步驟的時候出錯,它會自動從900個步驟進行錯誤修正回複重新計算

彈性之三:

Task如果失敗,會自動進行特定次數的重試,假設一個Task有1000個步驟,假設901步驟出錯,如果從900個步驟開始重試,會有一定次數的重試,還是失敗就真失敗

彈性之四:

Stage如果失敗,會自動特定次數的重試,而且只會計算失敗的分區

註:Stage,其實就是階段

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

==========做緩衝時機 ============

1、特別耗時

2、計算鏈條很長

3、Shuffle之後,如果這之後失敗做過緩衝,就不用再做shuffle了

4、checkpoint之前,前面的步驟都緩衝過了之後,如果checkpoint斷了,之前的就儲存了

==========RDD例子 ============

除了hadoop、spark的start-all

hadoop應該啟動./start-df.sh

spark應該啟動./start-

http://master:18080  看曾經啟動並執行作業的資訊

spark的bin下面./spark-shell --master spark://Master:7077

val data = sc.textFile("/library/wordcount/input/Data")或者sc.textFile("hdfs//Master:9000/library/wordcount/input/Data")

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

Spark自己會建立RDD

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

data.roDebugString看資料依賴關係

可以看出是MapPartitionnsRDD是分區方式,分布在不同機器上的

data.count看資料

http://Master:4040看job

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

資料不動,代碼動,資料都分布在各個機器上的。

一個Block Size一般是128M,實際Partition和Block Size可能會有出入

val flatted = data.flatMap(_.spilit(" "))

又產生的了新的MapPartitionnsRDD

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

val mapped = flatted.map(word=>(word,1))//每個單詞計數為1

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

val reduced = mapped.reduceByKey(_+_)

key相同的相加,產生shuffle

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

reduced .saveAsTextFIle("/library/wordcount/input/Data/output/onclick4")

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

另外:

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

Data2222不存在,開始載入是lazy的,所以不會報錯,只有data.count就會報錯

下一講:eclipse開發JAVA和scala角度開發測試和運行程式

作業:寫一篇部落格,寫你理解的Spark的基本理解

王家林老師名片:

中國Spark第一人

新浪微博:http://weibo.com/ilovepains

公眾號:DT_Spark

部落格:http://blog.sina.com.cn/ilovepains

手機:18610086859

QQ:1740415547

郵箱:[email protected]


本文出自 “一枝花傲寒” 部落格,謝絕轉載!

Spark運行原理和RDD解析(DT大資料夢工廠)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.