• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于簡(jiǎn)化分布式模型與數(shù)據(jù)結(jié)構(gòu)理論的SPARK教學(xué)方法研究

      2018-06-27 07:52:58胡建華
      計(jì)算機(jī)教育 2018年6期
      關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu)編程分布式

      胡建華

      (浙江農(nóng)林大學(xué)暨陽(yáng)學(xué)院 工程技術(shù)系, 浙江 諸暨 311800)

      1 研究背景

      云計(jì)算或大數(shù)據(jù)課程中,SPARK編程章節(jié)是學(xué)生反映較難掌握的內(nèi)容之一。SPARK是scala語(yǔ)言編寫的,而scala語(yǔ)言同時(shí)支持面向?qū)ο笈c函數(shù)式編程的特性[1],特別是函數(shù)式編程特性,使得scala程序代碼非常精煉,編程效率非常高,然而,這恰恰成為困擾學(xué)生的問(wèn)題。大多數(shù)學(xué)生的先修課程是Java或者C++語(yǔ)言,這些語(yǔ)言都是面向?qū)ο蟮?因此學(xué)生對(duì)函數(shù)式編程很不適應(yīng),覺得代碼不好理解。筆者閱讀過(guò)很多SPARK編程教材,發(fā)現(xiàn)很少有教材從理論的高度對(duì)SPARK函數(shù)式編程進(jìn)行清晰的闡述,絕大部分教材是直接介紹scala的基礎(chǔ)語(yǔ)法,然后馬上學(xué)習(xí)SPARK的rdd編程,沒有解釋清楚函數(shù)式編程與面向?qū)ο缶幊叹烤褂泻尾煌?、SPARK的rdd與Java集合是否有類比性等。由于缺乏與先期知識(shí)的類比性,學(xué)生覺得一下進(jìn)入了一個(gè)完全陌生的世界,造成學(xué)習(xí)上的困難與迷惑。在教學(xué)實(shí)踐中,筆者發(fā)現(xiàn)從數(shù)據(jù)結(jié)構(gòu)理論的角度介紹SPARK函數(shù)式編程特點(diǎn),以簡(jiǎn)化分布式模型描述SPARK框架組成,能幫助學(xué)生輕松掌握SPARK編程,取得較好的教學(xué)效果。

      2 從數(shù)據(jù)結(jié)構(gòu)理論理解SPARK函數(shù)式編程

      SPARK是scala語(yǔ)言編寫的,而scala語(yǔ)言函數(shù)式編程的特性讓初學(xué)者感到很迷惑,學(xué)生經(jīng)常會(huì)有諸如以下問(wèn)題:函數(shù)既然是代碼,為何可以作為另一個(gè)函數(shù)的參數(shù)或者返回值;SPARK的rdd與Java集合有何不同;map與filter函數(shù)有何不同等。那么怎樣讓學(xué)生理解map、filter等高階函數(shù),以及它們是如何作用于rdd的?可以從數(shù)據(jù)結(jié)構(gòu)理論的角度闡述。第一步,回顧數(shù)據(jù)結(jié)構(gòu)課程的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)是一門研究非數(shù)值計(jì)算問(wèn)題中,數(shù)據(jù)的組織、存儲(chǔ)及操作的學(xué)科。非數(shù)值計(jì)算問(wèn)題是指不是一個(gè)公式就能解決的問(wèn)題,如排序問(wèn)題等。然后,講解數(shù)據(jù)的組織、存儲(chǔ)及操作的意思,見表1。

      表1 數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容

      接著,最重要的是要讓學(xué)生理解:程序可以看做數(shù)據(jù)狀態(tài)轉(zhuǎn)換器,也可以理解為一個(gè)廣義函數(shù)。例如,要實(shí)現(xiàn)對(duì)全班成績(jī)按從高分到低分排序的任務(wù),可先輸入全班成績(jī),得到一個(gè)集合A,通過(guò)排序程序,就得到排好序的集合B,如圖1所示。

      圖1 數(shù)據(jù)狀態(tài)轉(zhuǎn)換器示意圖

      如果用數(shù)學(xué)形式表示,則可表示為B=f(A),排序程序其實(shí)就是實(shí)現(xiàn)函數(shù)關(guān)系f?,F(xiàn)在可以理解SPARK的相關(guān)概念:rdd就是一個(gè)集合,不過(guò)它是分布式的,分布在集群的不同機(jī)器上。map函數(shù)只是一個(gè)顯式的映射關(guān)系名,表示要把一個(gè)集合中的元素映射到另一個(gè)集合,而映射規(guī)則是編寫函數(shù)實(shí)現(xiàn)的,因此SPARK程序的業(yè)務(wù)邏輯就是編寫函數(shù)并將其作為map等高階函數(shù)的參數(shù)來(lái)運(yùn)行的。

      在函數(shù)式語(yǔ)言中,由于引入匿名函數(shù)及Lamda表達(dá)式,因此可以寫出非常精煉的代碼。例如,要把集合A中所有元素加3,放到集合B中,一行代碼就可實(shí)現(xiàn):

      map函數(shù)相當(dāng)于數(shù)學(xué)上的f,一個(gè)形式上的映射名,表示集合A要進(jìn)行一個(gè)映射,具體怎么映射,是由作為map函數(shù)的參數(shù)(也是一個(gè)函數(shù))實(shí)現(xiàn)的。從這個(gè)意義上理解,SPARK所謂的高階函數(shù),都是一個(gè)形式上的映射名而已。

      既然都是形式上的映射名,那么map函數(shù)與filter函數(shù)有何不同呢?filter函數(shù)表示過(guò)濾映射,它的參數(shù)函數(shù)返回值必須是boolean型。例如,要把集合A中所有小于0的元素放到集合B中,可以這樣寫:

      從數(shù)據(jù)結(jié)構(gòu)理論的角度,spark的rdd與Java集合是一個(gè)概念,都是一批數(shù)據(jù)構(gòu)成的集合。

      3 從簡(jiǎn)化分布式模型理解rdd及SPARK工作原理

      rdd(彈性分布式數(shù)據(jù)集)是SPARK編程的核心概念[2],在數(shù)據(jù)結(jié)構(gòu)理論上就是一個(gè)數(shù)據(jù)集合,不過(guò)是分布在多臺(tái)計(jì)算機(jī)上,每臺(tái)計(jì)算機(jī)可以并行操作本機(jī)上的數(shù)據(jù)集,這是一個(gè)典型的分布式系統(tǒng)。SPARK是怎樣管理分布在不同計(jì)算機(jī)上的數(shù)據(jù),以及怎樣通過(guò)程序處理這些數(shù)據(jù)呢?一個(gè)簡(jiǎn)化分布式模型框圖[3]如圖2所示。

      圖2 spark工作原理

      每個(gè)SPARK應(yīng)用程序都由一個(gè)任務(wù)控制節(jié)點(diǎn)(Driver Program)來(lái)控制,每個(gè)程序都要生成一個(gè)程序環(huán)境(SparkContext)。集群資源管理器(Cluster Manager)管理整個(gè)集群的資源,當(dāng)執(zhí)行程序前,Driver Program會(huì)向Cluster Manager要求分配計(jì)算機(jī)資源,稱為Worker Node,即運(yùn)行作業(yè)任務(wù)的工作節(jié)點(diǎn)。每個(gè)SPARK應(yīng)用程序稱為一個(gè)作業(yè)(Job),每個(gè)作業(yè)被分為一個(gè)個(gè)的任務(wù)(Task)。Driver Program得到工作節(jié)點(diǎn)后,就可以把任務(wù)分配給工作節(jié)點(diǎn)。每個(gè)工作節(jié)點(diǎn)上都有一個(gè)執(zhí)行器(Executor),負(fù)責(zé)執(zhí)行任務(wù)(即程序),執(zhí)行完成后,會(huì)報(bào)告給Driver Program。這樣所有的工作節(jié)點(diǎn)都可以并行執(zhí)行,并且由Driver Program統(tǒng)一管理。

      rdd由SparkContext創(chuàng)建,分布在每個(gè)工作節(jié)點(diǎn)上。一般來(lái)說(shuō),rdd都是由hdfs文件產(chǎn)生,而hdfs文件是分布在工作節(jié)點(diǎn)上的[4],因此rdd基本上從本機(jī)數(shù)據(jù)文件生成,這樣可以避免大量數(shù)據(jù)在網(wǎng)絡(luò)上傳播,極大節(jié)約時(shí)間及網(wǎng)絡(luò)帶寬。對(duì)分布式編程中經(jīng)典的例程--統(tǒng)計(jì)文件中每個(gè)單詞出現(xiàn)的次數(shù),進(jìn)行分析。

      4 結(jié) 語(yǔ)

      通過(guò)數(shù)據(jù)結(jié)構(gòu)理論理解函數(shù)式編程思想,用簡(jiǎn)化內(nèi)存模型分析SPARK系統(tǒng)框架,然后通過(guò)程序?qū)嵗馕鯯PARK代碼,這樣能幫助學(xué)生輕松掌握SPARK編程,顯著提高教學(xué)效果。我系2014級(jí)學(xué)生按此方法教學(xué),該門課程平均成績(jī)達(dá)到80分,而前一屆學(xué)生未采用這種講課方法,同樣試卷考試,該門課程平均成績(jī)只有65分。由此可見,人們對(duì)知識(shí)的理解是有類比性的,通過(guò)已有的知識(shí)類比理解新的知識(shí),接受新知識(shí)就很快。本文的教學(xué)方法,其實(shí)就是通過(guò)學(xué)生已掌握的數(shù)據(jù)結(jié)構(gòu)知識(shí)、數(shù)學(xué)函數(shù)知識(shí)以及分布式模型知識(shí),類比SPARK函數(shù)式編程,從而讓學(xué)生輕松理解新知識(shí)并記憶深刻。

      [1]黎文陽(yáng). 大數(shù)據(jù)處理模型Apache Spark研究[J]. 現(xiàn)代計(jì)算機(jī)(專業(yè)版), 2015(8): 55-60.

      [2]胡俊, 胡賢德, 程家興. 基于Spark的大數(shù)據(jù)混合計(jì)算模型[J].計(jì)算機(jī)系統(tǒng)應(yīng)用, 2015(4): 214-218.

      [3]陳虹君. 基于Hadoop平臺(tái)的Spark框架研究[J]. 電腦知識(shí)與技術(shù), 2014(35): 8407-8408.

      [4]夏靖波, 韋澤鯤, 付凱, 等. 云計(jì)算中Hadoop技術(shù)研究與應(yīng)用綜述[J]. 計(jì)算機(jī)科學(xué), 2016(11): 6-10.

      猜你喜歡
      數(shù)據(jù)結(jié)構(gòu)編程分布式
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      我家有只編程貓
      分布式光伏熱錢洶涌
      能源(2017年10期)2017-12-20 05:54:07
      分布式光伏:爆發(fā)還是徘徊
      能源(2017年5期)2017-07-06 09:25:54
      “翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
      高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
      基于DDS的分布式三維協(xié)同仿真研究
      西門子 分布式I/O Simatic ET 200AL
      沐川县| 察隅县| 漳浦县| 驻马店市| 买车| 镇安县| 稷山县| 榆树市| 余干县| 漳平市| 乐昌市| 徐汇区| 都匀市| 纳雍县| 长沙市| 三河市| 辽源市| 永昌县| 拉萨市| 确山县| 道孚县| 平原县| 宁武县| 印江| 邵阳市| 巴楚县| 舟山市| 兴和县| 灵宝市| 平遥县| 建宁县| 克什克腾旗| 通山县| 津市市| 兴海县| 阳江市| 定边县| 邯郸县| 灵石县| 安远县| 大方县|