想玩轉(zhuǎn)工業(yè)界機(jī)器學(xué)習(xí)匿辩?先學(xué)Spark吧

0阳准、為什么機(jī)器學(xué)習(xí)者需要學(xué)習(xí)spark芳悲?

關(guān)于大數(shù)據(jù)立肘,有這樣段話:

“Big data is like teenage sex,everyone talks about it,nobody really knows how to do it,everyone thinks everyone else is doing it,so everyone claims they are doing it.”

作為一名學(xué)生边坤,如何還沒聽說過Spark這套計算框架名扛,那么我覺得還是留在學(xué)術(shù)界的機(jī)器學(xué)習(xí)混吧,工業(yè)界現(xiàn)在也許還不適合你茧痒。

在學(xué)術(shù)界肮韧,數(shù)據(jù)一般都是別人處理好的公開數(shù)據(jù)集,而我們只是在上面實(shí)踐學(xué)術(shù)界的算法,在工業(yè)界可沒人給你把業(yè)務(wù)數(shù)據(jù)都給你準(zhǔn)備好...

眾所周知弄企,機(jī)器學(xué)習(xí)和統(tǒng)計學(xué)技術(shù)是把大數(shù)據(jù)轉(zhuǎn)化為行為知識的關(guān)鍵技術(shù)超燃,此外,機(jī)器學(xué)習(xí)者常言道:你能掌控的數(shù)據(jù)量決定了你模型最終所能達(dá)到效果上限拘领,不斷優(yōu)化的模型只是為了不斷的接近這個上限而已意乓。

數(shù)據(jù)和算法之間的關(guān)聯(lián),一個是血液约素,一個是心臟届良。

信息時代,大部分頂層的互聯(lián)網(wǎng)公司都積累了海量的數(shù)據(jù)圣猎,能掌控的數(shù)據(jù)量是你模型最終能接近最好效果的很重要的一個要素之一士葫,對于工業(yè)界的業(yè)機(jī)器學(xué)習(xí)算法工程師,除了明白學(xué)術(shù)界的機(jī)器學(xué)習(xí)原理送悔、優(yōu)化理論以及實(shí)現(xiàn)各種單機(jī)版小demo外…..要想真正的能解決實(shí)際的業(yè)務(wù)問題慢显,那就必須具備處理、利用海量業(yè)務(wù)數(shù)據(jù)的能力欠啤,而Spark正是賦予我們掌控大數(shù)據(jù)能力的利器荚藻。

擁有的數(shù)據(jù)量,不等于你能掌控的數(shù)據(jù)量洁段,學(xué)習(xí)Spark鞋喇,賦予你掌控大數(shù)據(jù)的能力!

數(shù)據(jù)和算法之間的關(guān)聯(lián)眉撵,一個是血液侦香,一個是心臟。

看看相關(guān)職位的需求…..


工業(yè)界需要Spark

我曾經(jīng)接觸的兩個公司的推薦部門都是基于scala(python)+spark+hadoop平臺工作的纽疟,由此可見罐韩,Spark在機(jī)器學(xué)習(xí)的工業(yè)領(lǐng)域是非常重要的技能之一!

總之污朽,想將來從事機(jī)器學(xué)習(xí)相關(guān)工作的朋友們散吵,開始學(xué)Spark吧!

1蟆肆、什么是Spark矾睦?

Spark與大數(shù)據(jù)

Spark是繼Hadoop之后的下一代分布式內(nèi)存計算引擎,于2009年誕生于加州大學(xué)伯克利分校AMPLab實(shí)驗(yàn)室炎功,現(xiàn)在主要由Databricks公司進(jìn)行維護(hù)枚冗。是當(dāng)今大數(shù)據(jù)領(lǐng)域最活躍、最熱門蛇损、最高效的大數(shù)據(jù)通用計算平臺赁温。

官方定義:spark是一個通用的大數(shù)據(jù)處理引擎坛怪,可以簡單的理解為一個大數(shù)據(jù)分布式處理框架。

相比于傳統(tǒng)的以hadoop為基礎(chǔ)的第一代大數(shù)據(jù)技術(shù)生態(tài)體系來說股囊,Spark性能更好(快速)袜匿、可擴(kuò)展性更高(技術(shù)棧)。


Spark的特點(diǎn)

2稚疹、前輩hadoop:

2006年項(xiàng)目成立的一開始居灯,“Hadoop”這個單詞只代表了兩個組件——HDFS和MapReduce。到現(xiàn)在的10個年頭内狗,這個單詞代表的是“核心”(即Core Hadoop項(xiàng)目)以及與之相關(guān)的一個不斷成長的生態(tài)系統(tǒng)穆壕。這個和Linux非常類似,都是由一個核心和一個生態(tài)系統(tǒng)組成其屏。


Hadoop發(fā)展歷程

現(xiàn)在Hadoop在一月發(fā)布了2.7.2的穩(wěn)定版喇勋, 已經(jīng)從傳統(tǒng)的Hadoop三駕馬車HDFS,MapReduce和HBase社區(qū)發(fā)展為60多個相關(guān)組件組成的龐大生態(tài)偎行,其中包含在各大發(fā)行版中的組件就有25個以上川背,包括數(shù)據(jù)存儲、執(zhí)行引擎蛤袒、編程和數(shù)據(jù)訪問框架等熄云。

Hadoop在2.0將資源管理從MapReduce中獨(dú)立出來變成通用框架后,就從1.0的三層結(jié)構(gòu)演變?yōu)榱爽F(xiàn)在的四層架構(gòu):


Hadoop的框架
  • 底層——存儲層妙真,文件系統(tǒng)HDFS
  • 中間層——資源及數(shù)據(jù)管理層缴允,YARN以及Sentry等
  • 上層——MapReduce、Impala珍德、Spark等計算引擎
  • 頂層——基于MapReduce练般、Spark等計算引擎的高級封裝及工具,如Hive锈候、Pig薄料、Mahout等等

3、有了hadoop為什么還需要spark泵琳?

肯定Spark有比Hadoop的MR計算更好的優(yōu)勢摄职,好在如下方面:
(1)為什么高效?

  1. 相對于Hadoop的MR計算获列,Spark支持DAG谷市,能緩存中間數(shù)據(jù),減少數(shù)據(jù)落盤次數(shù)击孩;
  2. 使用多線程啟動task迫悠,更輕量,任務(wù)啟動快溯壶。計算速度理論上有10-100倍提升及皂。(根據(jù)個人工作驗(yàn)證,計算效率相對Hadoop至少是3倍以上)

3.高度抽象API且改,代碼比MR少2-5倍甚至更多验烧,開發(fā)效率高

(2)為什么多框架整合?

  • 相對于過去使用Hadoop + Hive + Mahout + Storm 解決批處理又跛、SQL查詢和實(shí)時處理和機(jī)器學(xué)習(xí)場景的大數(shù)據(jù)平臺架構(gòu)碍拆,其最大的問題在于不同框架語言不同,整合復(fù)雜慨蓝,同時也需要更多維護(hù)成本感混。

而使用Spark在Spark core的批處理基礎(chǔ)上,建立了Spark Sql礼烈、Spark Streaming弧满,Spark Mllib,Spark GraphX來解決實(shí)時計算此熬,機(jī)器學(xué)習(xí)和圖計算場景庭呜,方便將不同組件功能進(jìn)行整合,同時維護(hù)成本小犀忱。

Spark與Hadoop對比

因?yàn)閭鹘y(tǒng)的hadoop的MapReduce具有高延遲的致命缺點(diǎn)募谎,無法處理高時效性的數(shù)據(jù)。hadoop本身的計算模型就決定了阴汇,hadoop上的所有工作都需要轉(zhuǎn)換為Map数冬、Shuffle、Reduce等核心階段搀庶,由于每次計算都需要從磁盤讀寫數(shù)據(jù)拐纱,同時整個模型都需要網(wǎng)絡(luò)傳輸,這就導(dǎo)致了不可改變的延遲哥倔。而spark的出現(xiàn)戳玫,讓hadoop也沒有時間、也沒有必要再重構(gòu)自己未斑。當(dāng)然hadoop作為一個技術(shù)體系咕宿,spark主要是替代其Map/Reduce的功能,hadoop的HDFS功能還是被與spark結(jié)合起來使用蜡秽。

Spark的特點(diǎn)

spark的成本

Spark 和 Hadoop MapReduce 都是開源的府阀,但是機(jī)器和人工的花費(fèi)仍是不可避免的。

Spark與Hadoop的硬件差異

Spark 集群的內(nèi)存至少要和需要處理的數(shù)據(jù)塊一樣大芽突,因?yàn)橹挥袛?shù)據(jù)塊和內(nèi)存大小合適才能發(fā)揮出其最優(yōu)的性能试浙。所以如果真的需要處理非常大的數(shù)據(jù),Hadoop 是合適之選寞蚌,畢竟硬盤的費(fèi)用要遠(yuǎn)遠(yuǎn)低于內(nèi)存的費(fèi)用田巴。

考慮到 Spark 的性能標(biāo)準(zhǔn)钠糊,在執(zhí)行相同的任務(wù)的時候,需要的硬件更少而運(yùn)行速度卻更快壹哺,因此應(yīng)該是更合算的抄伍,尤其是在云端的時候,此時只需要即用即付管宵。

4. Spark之于Hadoop

更準(zhǔn)確地說截珍,Spark是一個計算框架,而Hadoop中包含計算框架MapReduce和分布式文件系統(tǒng)HDFS箩朴,Hadoop更廣泛地說還包括在其生態(tài)系統(tǒng)上的其他系統(tǒng)岗喉,如Hbase、Hive等炸庞。Spark是MapReduce的替代方案钱床,而且兼容HDFS疲牵、Hive等分布式存儲層懈万,可融入Hadoop的生態(tài)系統(tǒng),以彌補(bǔ)缺失MapReduce的不足迹栓。

Spark與Hadoop在數(shù)據(jù)中間數(shù)據(jù)處理區(qū)別:

Spark架構(gòu)采用了分布式計算中的Master-Slave模型拐格。Master是對應(yīng)集群中的含有Master進(jìn)程的節(jié)點(diǎn)僧免,Slave是集群中含有Worker進(jìn)程的節(jié)點(diǎn)。Master作為整個集群的控制器捏浊,負(fù)責(zé)整個集群的正常運(yùn)行懂衩;Worker相當(dāng)于是計算節(jié)點(diǎn),接收主節(jié)點(diǎn)命令與進(jìn)行狀態(tài)匯報金踪;Executor負(fù)責(zé)任務(wù)的執(zhí)行浊洞;Client作為用戶的客戶端負(fù)責(zé)提交應(yīng)用,Driver負(fù)責(zé)控制一個應(yīng)用的執(zhí)行胡岔。

Spark調(diào)度模塊

Spark集群部署后法希,需要在主節(jié)點(diǎn)和從節(jié)點(diǎn)分別啟動Master進(jìn)程和Worker進(jìn)程,對整個集群進(jìn)行控制靶瘸。在一個Spark應(yīng)用的執(zhí)行過程中苫亦,Driver和Worker是兩個重要角色。Driver程序是應(yīng)用邏輯執(zhí)行的起點(diǎn)怨咪,負(fù)責(zé)作業(yè)的調(diào)度屋剑,即Task任務(wù)的分發(fā),而多個Worker用來管理計算節(jié)點(diǎn)和創(chuàng)建Executor并行處理任務(wù)诗眨。在執(zhí)行階段唉匾,Driver會將Task和Task所依賴的file和jar序列化后傳遞給對應(yīng)的Worker機(jī)器,同時Executor對相應(yīng)數(shù)據(jù)分區(qū)的任務(wù)進(jìn)行處理匠楚。

下面詳細(xì)介紹Spark的架構(gòu)中的基本組件巍膘。

  1. ClusterManager:在Standalone模式中即為Master(主節(jié)點(diǎn))厂财,控制整個集群,監(jiān)控Worker峡懈。在YARN模式中為資源管理器璃饱。
  2. Worker:從節(jié)點(diǎn),負(fù)責(zé)控制計算節(jié)點(diǎn)逮诲,啟動Executor或Driver帜平。在YARN模式中為NodeManager幽告,負(fù)責(zé)計算節(jié)點(diǎn)的控制梅鹦。
  3. Driver:運(yùn)行Application的main()函數(shù)并創(chuàng)建SparkContext。
  4. Executor:執(zhí)行器冗锁,在worker node上執(zhí)行任務(wù)的組件齐唆、用于啟動線程池運(yùn)行任務(wù)。每個Application擁有獨(dú)立的一組Executors冻河。
  5. SparkContext:整個應(yīng)用的上下文箍邮,控制應(yīng)用的生命周期。
  6. RDD:Spark的基本計算單元叨叙,一組RDD可形成執(zhí)行的有向無環(huán)圖RDD Graph锭弊。
  7. DAG Scheduler:根據(jù)作業(yè)(Job)構(gòu)建基于Stage的DAG,并提交Stage給TaskScheduler擂错。
  8. TaskScheduler:將任務(wù)(Task)分發(fā)給Executor執(zhí)行味滞。
  9. SparkEnv:線程級別的上下文,存儲運(yùn)行時的重要組件的引用钮呀。SparkEnv內(nèi)創(chuàng)建并包含如下一些重要組件的引用剑鞍。
  10. MapOutPutTracker:負(fù)責(zé)Shuffle元信息的存儲。
  11. BroadcastManager:負(fù)責(zé)廣播變量的控制與元信息的存儲爽醋。
  12. BlockManager:負(fù)責(zé)存儲管理蚁署、創(chuàng)建和查找塊。
  13. MetricsSystem:監(jiān)控運(yùn)行時性能指標(biāo)信息蚂四。
  14. SparkConf:負(fù)責(zé)存儲配置信息光戈。

Spark的整體流程為:Client提交應(yīng)用,Master找到一個Worker啟動Driver遂赠,Driver向Master或者資源管理器申請資源田度,之后將應(yīng)用轉(zhuǎn)化為RDD Graph,再由DAGScheduler將RDD Graph轉(zhuǎn)化為Stage的有向無環(huán)圖提交給TaskScheduler解愤,由TaskScheduler提交任務(wù)給Executor執(zhí)行镇饺。在任務(wù)執(zhí)行的過程中,其他組件協(xié)同工作送讲,確保整個應(yīng)用順利執(zhí)行奸笤。


Spark作業(yè)層次劃分

Application就是用戶submit提交的整體代碼惋啃,代碼中又有很多action操作,action算子把Application劃分為多個job监右,job根據(jù)寬依賴劃分為不同Stage边灭,Stage內(nèi)劃分為許多(數(shù)量由分區(qū)決定,一個分區(qū)的數(shù)據(jù)由一個task計算)功能相同的task健盒,然后這些task提交給Executor進(jìn)行計算執(zhí)行绒瘦,把結(jié)果返回給Driver匯總或存儲。

4.1 統(tǒng)計數(shù)據(jù)集中詞頻的例子

下面看一下使用Spark解決一個HelloWord入門級別的Spark程序代碼扣癣,比寫Hadoop里面的Map/Reduce代碼簡單多了....

# 統(tǒng)計單詞的詞頻
val rdd = sc.textFile("/home/scipio/README.md")
val wordcount = rdd.flatMap(_.split(' ')).map((_,1)).reduceByKey(_+_)
val wcsort = wordcount.map(x => (x._2,x._1)).sortByKey(false).map(x => (x._2,x._1))
wcsort.saveAsTextFile("/home/scipio/sort.txt")

Spark執(zhí)行過程

上圖是一個Spark的wordcount例子惰帽,根據(jù)上述stage劃分原則,這個job劃分為2個stage父虑,有三行该酗,分別是數(shù)據(jù)讀取、計算和存儲過程士嚎。

僅看代碼呜魄,我們根本體會不到數(shù)據(jù)在背后是并行計算。從圖中能看出數(shù)據(jù)分布在不同分區(qū)(集群上不同機(jī)器上)莱衩,數(shù)據(jù)經(jīng)過flapMap爵嗅、map和reduceByKey算子在不同RDD的分區(qū)中流轉(zhuǎn)。(這些算子就是上面所說對RDD進(jìn)行計算的函數(shù))笨蚁,后面有空再介紹一下自己總結(jié)的Spark常用的算子以及Scala函數(shù)睹晒。

推薦Spark官網(wǎng)中文翻譯版入門學(xué)習(xí)資料:http://spark.apachecn.org/docs/cn/2.2.0/sql-programming-guide.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赚窃,隨后出現(xiàn)的幾起案子册招,更是在濱河造成了極大的恐慌,老刑警劉巖勒极,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件是掰,死亡現(xiàn)場離奇詭異,居然都是意外死亡辱匿,警方通過查閱死者的電腦和手機(jī)键痛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾七,“玉大人絮短,你說我怎么就攤上這事∽蛞洌” “怎么了丁频?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我席里,道長叔磷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任奖磁,我火速辦了婚禮改基,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咖为。我一直安慰自己秕狰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布躁染。 她就那樣靜靜地躺著鸣哀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐啡。 梳的紋絲不亂的頭發(fā)上诺舔,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天鳖昌,我揣著相機(jī)與錄音备畦,去河邊找鬼。 笑死许昨,一個胖子當(dāng)著我的面吹牛懂盐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播糕档,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莉恼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了速那?” 一聲冷哼從身側(cè)響起俐银,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎端仰,沒想到半個月后捶惜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荔烧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年吱七,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹤竭。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡踊餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臀稚,到底是詐尸還是另有隱情吝岭,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站窜管,受9級特大地震影響酒觅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜微峰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一舷丹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜓肆,春花似錦颜凯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至早芭,卻和暖如春彼城,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背退个。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工募壕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人语盈。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓舱馅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刀荒。 傳聞我的和親對象是個殘疾皇子代嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容