Flink編程基礎(chǔ)(Scala版)
定 價:¥69.8
中 教 價:¥55.84 (8.00折)
庫 存 數(shù): 0
叢 書 名:面向新工科專業(yè)建設計算機系列教材
本書以Scala作為開發(fā)Flink應用程序的編程語言,系統(tǒng)地介紹了Flink編程的基礎(chǔ)知識。全書共8章,內(nèi)容包括大數(shù)據(jù)技術(shù)概述、Scala語言基礎(chǔ)、Flink的設計與運行原理、Flink環(huán)境搭建和使用方法、DataStream API、DataSet API、Table API&SQL、FlinkCEP。本書主要章節(jié)都安排了入門級的編程實踐操作,以便讀者更好地學習和掌握Flink編程方法。本書官網(wǎng)免費提供了全套的在線教學資源,包括講義PPT、習題、源代碼、軟件、數(shù)據(jù)集、授課視頻、上機實驗指南等。 本書可作為高等院校大數(shù)據(jù)、計算機、軟件工程等專業(yè)的進階級大數(shù)據(jù)課程教材,用于指導Flink編程實踐,也可供相關(guān)技術(shù)人員參考。
市場需要一款能夠?qū)崿F(xiàn)毫秒級別響應并且支持精確一次一致性的、高吞吐、高性能的流計算框架,而Flink是當前能夠滿足上述要求的產(chǎn)品,它正在成為大數(shù)據(jù)領(lǐng)域流處理的標配組件。本書是一本優(yōu)秀的Flink教材,詳細介紹了Flink的環(huán)境搭建和基礎(chǔ)編程方法。結(jié)構(gòu)清晰,語言流暢,并配有豐富的配套資源,供讀者學習和參考。
大數(shù)據(jù)技術(shù)正處于快速發(fā)展之中,不斷有新的技術(shù)涌現(xiàn),Hadoop和Spark等技術(shù)成為其中的佼佼者。在Spark流行之前,Hadoop儼然已成為大數(shù)據(jù)技術(shù)的事實標準,在企業(yè)中得到了廣泛的應用,但其本身還存在諸多缺陷,主要的缺陷是MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,因而只適用離線批處理的應用場景。Spark在設計上充分吸收和借鑒了MapReduce的精髓并加以改進,同時,采用了先進的DAG執(zhí)行引擎,以支持循環(huán)數(shù)據(jù)流與內(nèi)存計算,因此,在性能上比MapReduce有了大幅度的提升,迅速獲得了學界和業(yè)界的廣泛關(guān)注。作為大數(shù)據(jù)計算平臺的后起之秀,Spark在2014年打破了Hadoop保持的基準排序紀錄,此后逐漸發(fā)展成為大數(shù)據(jù)領(lǐng)域熱門的大數(shù)據(jù)計算平臺之一。但是,Spark的短板在于無法滿足毫秒級別的企業(yè)實時數(shù)據(jù)分析需求。Spark的流計算組件Spark Streaming的核心思路是將流數(shù)據(jù)分解成一系列短小的批處理作業(yè),每個短小的批處理作業(yè)都可以使用Spark Core進行快速處理。但是,Spark Streaming在實現(xiàn)高吞吐和容錯性的同時,卻犧牲了低延遲和實時處理能力,快只能滿足秒級的實時計算需求,無法滿足毫秒級的實時計算需求。由于Spark Streaming組件的延遲較高,快響應時間都要在秒級,無法滿足一些需要更快響應時間的企業(yè)應用的需求,所以,Spark社區(qū)又推出了Structured Streaming。Structured Streaming是一種基于Spark SQL引擎構(gòu)建的、可擴展且容錯的流處理引擎。Structured Streaming包括微批處理和持續(xù)處理兩種處理模型。采用微批處理時,快響應時間需要100ms,無法支持毫秒級別響應。采用持續(xù)處理模型時,可以支持毫秒級別響應,但是,只能做到至少一次一致性,無法做到精確一次一致性。因此,市場需要一款能夠?qū)崿F(xiàn)毫秒級別響應并且支持精確一次一致性的、高吞吐、高性能的流計算框架,而Flink是當前能夠滿足上述要求的產(chǎn)品,它正在成為大數(shù)據(jù)領(lǐng)域流處理的標配組件。筆者帶領(lǐng)的廈門大學計算機科學系數(shù)據(jù)庫實驗室團隊,是國內(nèi)高校較早從事大數(shù)據(jù)教學的團隊之一。在寫本書之前,我們已經(jīng)做了大量前期的相關(guān)工作。從2013年至今,已經(jīng)出版了8本大數(shù)據(jù)教材,內(nèi)容涵蓋導論課、入門課、進階課和實訓課,包括《大數(shù)據(jù)導論(通識課版)》(用于開設全校公共選修課)、《大數(shù)據(jù)導論》(用于開設大數(shù)據(jù)專業(yè)導論課)、《大數(shù)據(jù)技術(shù)原理與應用》(用于開設入門級大數(shù)據(jù)專業(yè)課)、《大數(shù)據(jù)基礎(chǔ)編程、實驗和案例教程》(用于開設入門級大數(shù)據(jù)專業(yè)課)、《Spark編程基礎(chǔ)(Scala版)》(用于開設進階級大數(shù)據(jù)專業(yè)課)、《Spark編程基礎(chǔ)(Python版)》(用于開設進階級大數(shù)據(jù)專業(yè)課)、《大數(shù)據(jù)實訓案例之電影推薦系統(tǒng)(Scala版)》(用于開設大數(shù)據(jù)實訓課程)和《大數(shù)據(jù)實訓案例之電信用戶行為分析(Scala版)》(用于開設大數(shù)據(jù)實訓課程)。這些教材已經(jīng)在國內(nèi)高校得到了廣泛使用,其中,《大數(shù)據(jù)技術(shù)原理與應用》教材的銷量已經(jīng)突破了15萬冊,得到了廣大一線教師的高度認可和好評。學習Flink需要有一定的大數(shù)據(jù)基礎(chǔ)知識,因此,建議讀者在學習本書之前,先學習《大數(shù)據(jù)技術(shù)原理與應用》。為了幫助讀者更好地學習本書,我們?yōu)榻滩呐涮捉ㄔO了高校大數(shù)據(jù)課程公共服務平臺,截至目前,平臺累計訪問量已經(jīng)突破1000萬,在全國高校形成了廣泛的影響力,并榮獲2018年廈門大學教學成果特等獎和2018年福建省教學成果二等獎。為了幫助高校教師更好地教授大數(shù)據(jù)課程,我們每年都舉辦大數(shù)據(jù)師資培訓交流班,目前已經(jīng)累計為全國400多所高校培養(yǎng)了600余位大數(shù)據(jù)教師。上述所有工作,使筆者對于撰寫一本優(yōu)秀的Flink教材有了更深的認識和更強的信心。本書共8章,詳細介紹了Flink的環(huán)境搭建和基礎(chǔ)編程方法。第1章介紹大數(shù)據(jù)技術(shù),幫助讀者形成對大數(shù)據(jù)技術(shù)的總體性認識以及Flink在其中所扮演的角色;第2章介紹Scala語言基礎(chǔ)知識,為學習基于Scala語言的Flink編程奠定基礎(chǔ);第3章介紹Flink的設計與運行原理;第4章介紹Flink環(huán)境搭建和使用方法,為開展Flink編程實踐鋪平道路;第5章介紹DataStream API,包括DataStream編程模型、窗口的劃分、時間概念、窗口計算、水位線、狀態(tài)編程;第6章介紹DataSet API,包括DataSet編程模型、數(shù)據(jù)源、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)輸出、迭代計算和廣播變量;第7章介紹Table API&SQL,包括編程模型、Flink Table API、Flink SQL和自定義函數(shù);第8章介紹FlinkCEP,包括Pattern API和模式的檢測等。本書面向高校大數(shù)據(jù)、計算機、軟件工程等專業(yè)的學生,可以作為專業(yè)必修課或選修課教材。本書由林子雨和陶繼平執(zhí)筆,其中,林子雨負責書稿規(guī)劃、統(tǒng)稿、校對和在線資源創(chuàng)作,并撰寫第1、3、4、5、6、7、8章的內(nèi)容,陶繼平負責撰寫第2章的內(nèi)容。在本書的撰寫過程中,廈門大學計算機科學系碩士研究生鄭宛玉、陳杰祥、陳紹緯、周偉敬、阮敏朝、劉官山和黃連福等做了大量輔助性工作,在此,向這些同學的辛勤工作表示衷心的感謝。同時,感謝夏小云老師在書稿校對過程中的辛勤付出。本書官方網(wǎng)站免費提供了全部配套資源的在線瀏覽和下載,并接受錯誤反饋和發(fā)布勘誤信息。同時,F(xiàn)link作為大數(shù)據(jù)進階課程,在學習過程中會涉及大量相關(guān)的大數(shù)據(jù)基礎(chǔ)知識以及各種大數(shù)據(jù)軟件的安裝和使用方法,因此,推薦讀者訪問廈門大學數(shù)據(jù)庫實驗室建設的國內(nèi)高校首個大數(shù)據(jù)課程公共服務平臺,來獲得必要的輔助學習內(nèi)容。在本書的撰寫過程中,參考了大量網(wǎng)絡資料和相關(guān)書籍,對Flink技術(shù)進行了系統(tǒng)梳理,有選擇性地把一些重要知識納入本書。由于筆者能力有限,本書難免存在不足之處,望廣大讀者不吝賜教。
林子雨廈門大學計算機科學系數(shù)據(jù)庫實驗室2021年6月
林子雨(1978-),男,博士,國內(nèi)高校知名大數(shù)據(jù)教師,廈門大學計算機科學系副教授,中國計算機學會數(shù)據(jù)庫專委會委員,中國計算機學會信息系統(tǒng)專委會委員,中國高校首個數(shù)字教師提出者和建設者。2013年開始在廈門大學開設大數(shù)據(jù)課程,建設了國內(nèi)高校首個大數(shù)據(jù)課程公共服務平臺,平臺累計網(wǎng)絡訪問量超過1000萬次,成為全國高校大數(shù)據(jù)教學知名品牌,并榮獲2018年福建省教學成果二等獎,主持的課程《大數(shù)據(jù)技術(shù)原理與應用》獲評2018年國家精品在線開放課程。
第1章大數(shù)據(jù)技術(shù)概述11.1大數(shù)據(jù)概念與關(guān)鍵技術(shù)11.1.1大數(shù)據(jù)概念11.1.2大數(shù)據(jù)關(guān)鍵技術(shù)21.2代表性大數(shù)據(jù)技術(shù)31.2.1Hadoop41.2.2Spark81.2.3Flink101.2.4Beam131.3編程語言的選擇141.4在線資源151.5本章小結(jié)161.6習題16實驗1Linux系統(tǒng)的安裝和常用命令17第2章Scala語言基礎(chǔ)192.1Scala語言概述192.1.1計算機的緣起192.1.2編程范式202.1.3Scala簡介222.1.4Scala的安裝222.1.5HelloWorld232.2Scala的基礎(chǔ)編程知識252.2.1基本數(shù)據(jù)類型和變量252.2.2輸入輸出282.2.3控制結(jié)構(gòu)312.2.4數(shù)據(jù)結(jié)構(gòu)352.3面向?qū)ο缶幊袒A(chǔ)422.3.1類422.3.2對象482.3.3繼承532.3.4參數(shù)化類型572.3.5特質(zhì)592.3.6模式匹配642.3.7包672.4函數(shù)式編程基礎(chǔ)682.4.1函數(shù)的定義與使用692.4.2高階函數(shù)712.4.3閉包722.4.4偏應用函數(shù)和Curry化722.4.5針對容器的操作742.4.6函數(shù)式編程實例802.5本章小結(jié)812.6習題82實驗2Scala編程初級實踐83第3章Flink的設計與運行原理883.1Flink簡介883.2選擇Flink的原因893.2.1傳統(tǒng)數(shù)據(jù)處理架構(gòu)893.2.2大數(shù)據(jù)Lambda架構(gòu)903.2.3流處理架構(gòu)903.2.4Flink是理想的流計算框架913.2.5Flink的優(yōu)勢923.3Flink典型應用場景943.3.1事件驅(qū)動型應用943.3.2數(shù)據(jù)分析應用953.3.3數(shù)據(jù)流水線應用973.4Flink的統(tǒng)一數(shù)據(jù)處理973.5Flink技術(shù)棧993.6Flink工作原理1003.7Flink編程模型1013.8Flink的應用程序結(jié)構(gòu)1023.9Flink的數(shù)據(jù)一致性1033.9.1有狀態(tài)計算1033.9.2數(shù)據(jù)一致性1033.9.3異步屏障快照機制1043.10本章小結(jié)1053.11習題106第4章Flink環(huán)境搭建和使用方法1074.1安裝Flink1074.1.1基礎(chǔ)環(huán)境1074.1.2下載安裝文件1084.1.3配置相關(guān)文件1084.1.4運行測試樣例1094.1.5Flink和Hadoop的交互1104.2在Scala Shell中運行代碼1104.3開發(fā)Flink獨立應用程序1114.3.1安裝編譯打包工具Maven1114.3.2開發(fā)批處理程序1134.3.3開發(fā)流處理程序1174.3.4使用IntelliJ IDEA開發(fā)Flink應用程序1194.4設置程序運行并行度1264.5Flink集群環(huán)境搭建1274.5.1集群基礎(chǔ)配置1274.5.2在集群中安裝Java1294.5.3設置SSH無密碼登錄1304.5.4安裝和配置Flink1314.5.5啟動和關(guān)閉Flink集群1334.6本章小結(jié)1334.7習題134實驗3Flink和Hadoop的安裝134第5章DataStream API1365.1DataStream編程模型1365.1.1數(shù)據(jù)源1375.1.2數(shù)據(jù)轉(zhuǎn)換1495.1.3數(shù)據(jù)輸出1605.2窗口的劃分1635.3時間概念1635.4窗口計算1655.4.1窗口計算程序的結(jié)構(gòu)1655.4.2窗口分配器1665.4.3窗口計算函數(shù)1705.4.4觸發(fā)器1775.4.5驅(qū)逐器1805.5水位線1835.5.1水位線原理1835.5.2水位線的設置方法1865.5.3水位線應用實例1885.6延遲數(shù)據(jù)處理1975.7狀態(tài)編程2015.8本章小結(jié)2035.9習題203實驗4DataStream API編程實踐204第6章DataSet API2076.1DataSet編程模型2076.2數(shù)據(jù)源2086.2.1文件類數(shù)據(jù)源2086.2.2集合類數(shù)據(jù)源2096.2.3通用類數(shù)據(jù)源2096.2.4第三方文件系統(tǒng)2136.3數(shù)據(jù)轉(zhuǎn)換2156.3.1數(shù)據(jù)處理類算子2166.3.2聚合操作類算子2176.3.3多表關(guān)聯(lián)類算子2206.3.4集合操作類算子2236.3.5分區(qū)操作類算子2236.4數(shù)據(jù)輸出2246.5迭代計算2266.5.1全量迭代2266.5.2增量迭代2296.6廣播變量2306.7本章小結(jié)2326.8習題232實驗5DataSet API編程實踐233第7章Table API&SQL2367.1編程模型2367.1.1程序執(zhí)行原理2367.1.2程序結(jié)構(gòu)2377.1.3TableEnvironment2387.1.4注冊表2397.1.5查詢表2457.1.6輸出表2487.1.7DataStream/DataSet與Table的相互轉(zhuǎn)換2517.1.8時間概念2587.2Flink Table API2607.2.1Table API應用實例2607.2.2掃描、投影和過濾2617.2.3列操作2637.2.4聚合操作2637.2.5連接操作2677.2.6集合操作2687.2.7排序操作2707.2.8插入操作2707.2.9基于行的操作2707.3Flink SQL2807.3.1應用實例2807.3.2數(shù)據(jù)查詢與過濾操作2827.3.3聚合操作2827.3.4連接操作2837.3.5集合操作2837.4自定義函數(shù)2857.4.1標量函數(shù)2857.4.2表值函數(shù)2877.4.3聚合函數(shù)2897.5本章小結(jié)2917.6習題292實驗6Table API& SQL編程實踐292第8章FlinkCEP2968.1概述2968.2Pattern API2978.2.1個體模式2978.2.2復合模式2998.2.3模式組3018.2.4匹配后跳過策略3028.3模式的檢測3028.3.1匹配事件提取3038.3.2超時事件提取3038.4應用實例3048.5本章小結(jié)3088.6習題308實驗7FlinkCEP編程實踐308參考文獻311