在大數據中,如何使用spark?


Spark使用SparkSQL、Spark Streaming、MLlib、Graph幾乎完美地解決了大數據中的Batch Processing、Stream Processing、Ad-hocQuery(即席查詢)等三大核心問題。

Spark定義

a.是一個通用的大規模數據快速處理引擎。

b.Spark就是一個大數據分散式處理框架。

3.Spark在性能和方案的統一性都具有顯著的優勢。

如何學習Spark

  • 配置spark環境:先安裝linux,java,Scala,spark等軟體,配置環境變數,搭建集群。建議你先熟悉一下linux系統。
  • 學習scala語言 ,函數式編程,這些有點難度。我是學java過來的,感覺很不適應,語法感覺很怪,需要冷靜下來好好學習,trait ,object 伴生對象,柯里化等概念還是需要好好理解的,他也有很多好處,比如apply()方法,很方便的新建一個對象那個,用得多了,就覺得很好用,我現在就覺得很好用,學過java好理解一些,本質一樣,表達方式不同而已。建議您學習一下java。
  • spark學習,最好學習spark的方式就是看官方文檔,跟著官方文檔過一遍手,基本就理解的差不多啦,接下來用idea集成編程完成的程序,調試測試等,基本就可以上手啦!
  • 接下深入理解就看源碼,深入Spark內核,通過源碼掌握Spark的任務提交過程,掌握Spark集群的任務調度,尤其要精通DAGScheduler、TaskScheduler和Worker節點內部的工作的每一步的細節。
  • 基於Spark上的核心框架的使用,學習SparkSQL(關係型操作)、Spark Streaming(實時處理)、MLlib(機器學習)、GraphX(圖處理)這些。

  • 我們使用spark一般都使用Yarn框架,所以我覺得還需要學些Hadoop學習。有hdfs和mr(現在是YARN)組成,有興趣可以看https://www.toutiao.com/i6506428976062267907/這篇文章

場景

  • Spark是一個分散式內存型計算框架,吸收MR的優點,以RDD數據來表示模型,提供多種運算元,例如map|filter|flatMap|sample|groupByKey|reduceByKey|union|join等,並將中間數據放到內存中,使得迭代運算效率更高,更適合於實時計算|互動式計算或者要求計算量大、效率要求高等場景。與Yarn的結合,使得Spark可以與MR運行與同一個集群中,共享存儲資源與計算資源,不斷完善的SparkSQL,可以與Hive兼容,大大增強了Spark的應用範圍及優越性。

  • Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反覆操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小。

總的來說Spark的適用面比較廣泛且比較通用。

Spark的特點

a.快速基於內存計算速度是MR的100倍,基於磁碟計算的速度是MR的10倍

快的原因是:Spark有一個DAG(有向無環圖)執行引擎,支持循環數據流和內存計算。

b.易用

提供多語言的API,能快速實現應用,相比MR有簡潔的代碼,安裝部署簡單

c.通用

提供一個強大的技術棧,包括查詢語言SparkSQL、實時流處理工具Spark Streaming、機器學習工具MLlib、圖計算工具GraphX, Spark的目的在於構建一個結構上一體化功能上多元化的高效數據流水線技術棧。

d.集成Hadoop

Spark可以運行在YARN上,可以讀取Hadoop的任何數據

下面是Spark生態系統Spark Core:它包含Spark的基本功能(任務調度、內存管理、故障恢復以及存儲系統的交互),包含RDD|Stage|DAG|它的核心思想就是將數據緩存在內存中,並用Lineage機制容錯。

a.RDD:

  • Resilient Distributed DataSets,是分散式只讀的且已分區的集合對象。

  • 這些集合是彈性的,如果數據集的一部分丟失,則可以對它們進行重建。

  • 具有自動容錯|位置感知調度|可伸縮性的特點。

  • 對於記錄數據的更新,RDD也只支持粗粒度的轉換(記錄如何從其他RDD轉換而來即Lineage,以便恢復丟失的分區)

  • 數據集容錯的兩種方式:數據檢查點(成本高,伺服器之間的傳輸的問題)和記錄數據的更新。

Spark大數據處理框架

1.Spark速度快的原因

a.統一的RDD抽象和操作:Spark基於RDD抽象,使得Spark的框架輕而易舉地使用Spark Core中的所有內容, 並且各個框架可以在內存中無縫地集成和完成系統任務。

b.Spark是基於統一的技術堆棧。

2.基於內存的迭代式計算

  • MR在每次執行時都要從磁碟讀數據,計算完畢之後都要把數據存放在磁碟上。

  • Spark是基於內存的,每次運算都是在內存中計算的。

3.DAG

a.是另外一個快的重要原因

b.基於RDD,Spark具備了非常精緻的作業調度系統

c.DAG中的依賴有寬依賴和窄依賴之分,DAG可以根據依賴對pipeline等進行優化操作

d.基於RDD和DAG並行計算整個Job.

4.出色的容錯機制

a.基於DAG圖,lineage是輕量級且高效的

b.操作之間相互具備lineage的關係,每個操作只關係其父操作,各個分片的數據之間互不影響,

出現錯誤時只要恢復單個split的特定部分

覺得spark挺好用的,但是有一些場景還是不適用

歡迎各位大神來指點


Spark與Hadoop的功能性質都是一樣的,就是提供為大規模數據處理而設計的快速通用的計算引擎---開源集群計算環境。簡單通俗點講,就是Spark集群能夠容納足夠大規模(就是未知而且規模不停增長的)數據,在這個集群運行環境中,還能夠不停的反覆操作數據,還要速度非常快,還有穩定性等等,在此基礎上,通過開發的分析軟體,快速的以不同形式的比如圖表,表格等形式提供分析結果。

Spark與Hadoop相似,但總體來說比Hadoop有優勢,主要表現在某些工作負載方面比Hadoop更加優越,比如內存計算下Spark比Hadoop快很多倍,提供了80多個高級運算符很易用,提供了大量的庫包括SQL、DataFrames、MLlib、GraphX、Spark Streaming等可以在同一個應用程序中無縫組合使用這些庫。

典型的應用場景比如大數據在廣告、分析報表、推薦系統等方面的應用,比如大數據做應用分析、效果分析、定向優化、優化排名、個性化推薦、熱點點擊分析等等。Spark主要使用SCALA(面向對象、函數式編程語言)來實現,當然也支持Java、Python等語言。

目前用得比較成功的比如:①騰訊社交廣告(原名廣點通)。藉助Spark快速迭代的優勢,實現了實時採集、分析、預測,在廣告投放系統上,可以達到支持每天上百億的請求數據量。而其日誌數據即時查詢也是達到了非常快速。②淘寶。搜索和廣告業務使用Spark,用於推薦相關演算法上,解決了許多問題。③優酷土豆。開始使用的是Hadoop,出現了很多問題,包括商業智能反應速度慢,效率不高等。後使用Spark,性能提升很多,交互響應很快。


Spark是大數據領域中最為火爆的一個分散式計算框架。

我們把Spark部署在幾個或幾百甚至幾千伺服器上後形成一個系統,然後往這個系統提交Spark作業,作業在這些伺服器上分散式並行高效執行,執行結果由Spark返回給我們。

Spark及其之上的子框架(如Spark Streaming、Spark MLlib、Spark SQL等)支持多種作業類型,應用範圍很廣場景很豐富。典型的應用場景有:數據統計分析(如傳統Oracle、MySQL做的),尤其是海量數據在大規模Spark系統中非常高效,還有海量數據挖掘方面啊,推薦系統啊,風控系統啊,只要跟數據相關的,基本上都是Spark能做的。


推薦閱讀:

TAG:大數據 | Spark | 科技 |