本書內(nèi)容包括:Scala零基礎(chǔ)入門,Scala面向?qū)ο缶幊涕_發(fā),Scala高階函數(shù),Scala模式匹配等。
采用Scala語言編寫實現(xiàn)的,大數(shù)據(jù)領(lǐng)域最火爆的計算框架Spark(其實Spark在Apache下的數(shù)據(jù)處理領(lǐng)域也是最火爆的計算框架),正在以迅雷不及掩耳之勢快速發(fā)展。很少有一門語言能夠像Scala這樣,因其作為大數(shù)據(jù)框架Spark的核心和首選開發(fā)語言而爆發(fā)式地普及起來。Spark本身起源于2009年,是美國加州大學(xué)伯克利分校AMP實驗室的一個研究性項目,于2010年開源,在2014、2015年大數(shù)據(jù)領(lǐng)域軟件排名中,Spark都以絕對優(yōu)勢遙遙領(lǐng)先!雖然基于Spark平臺可以采用Scala、Java、Python、R等4種語言開發(fā),但據(jù)Spark官方統(tǒng)計,2014年和2015年全世界范圍內(nèi)基于Spark開發(fā)采用最多的語言一直都是Scala。另外,在大數(shù)據(jù)領(lǐng)域越來越多的其他技術(shù)框架,例如Kafka等也都把Scala作為實現(xiàn)和開發(fā)語言。因此,為了打好大數(shù)據(jù)領(lǐng)域?qū)W習(xí)的基礎(chǔ),本書面向廣大Scala愛好者和大數(shù)據(jù)開發(fā)者,以實戰(zhàn)為主導(dǎo),并用實戰(zhàn)與理論相結(jié)合的方式來幫助讀者學(xué)習(xí)Scala語言。
從2012年美國政府的“大數(shù)據(jù)研發(fā)計劃”,到2015年我國國務(wù)院發(fā)布的《促進(jìn)大數(shù)據(jù)發(fā)展行動綱要》,可以說,大數(shù)據(jù)已經(jīng)迎來了它的黃金時代。本書緊跟時代潮流,除了講解Scala語言之外,還額外挑選了當(dāng)前在大數(shù)據(jù)領(lǐng)域中應(yīng)用非常廣泛的Akka和Kafka兩大框架進(jìn)行講解,并且詳細(xì)講解了Scala語言在其中的應(yīng)用。其中,Akka是一個在JVM上構(gòu)建高并發(fā)、分布式和可快速恢復(fù)的消息驅(qū)動應(yīng)用的工具包;Kafka是高產(chǎn)出的分布式消息系統(tǒng),它實現(xiàn)了生產(chǎn)者和消費者之間的無縫連接,實現(xiàn)了處理速度快、高可擴展性的分布式實時系統(tǒng)。
本書編寫的主線是以Scala實戰(zhàn)實例為主導(dǎo),由淺入深,從Scala的基礎(chǔ)篇、中級篇直至高級篇,對Scala各個知識點加以詳細(xì)分析并給出相應(yīng)的實例及解析。然后更進(jìn)一步地引入分布式框架篇,針對當(dāng)前大數(shù)據(jù)領(lǐng)域使用非常廣泛的大分布式框架Akka和Kafka,擴展Scala語言在開發(fā)分布式框架時的實戰(zhàn)實例,為讀者進(jìn)一步學(xué)習(xí)大數(shù)據(jù)領(lǐng)域各個框架打好基礎(chǔ)。
參與本書編寫的有王家林、段智華、管祥青、徐奔、張敏、徐香玉等。
本書能順利出版,離不開出版社編輯們的大力支持與幫助,在此表示誠摯的感謝。
非常感謝本書的技術(shù)審核徐香玉為審核本書技術(shù)相關(guān)內(nèi)容所做出的努力。
在閱讀本書的過程中,若發(fā)現(xiàn)任何問題或有任何疑問,可以加入本書的閱讀群提出討論,會有專人幫忙答疑。同時,該群中也會提供本書所用實例代碼。
由于時間倉促,書中難免存在不妥之處,請讀者諒解,并提出寶貴意見。
機工授權(quán)書
前言
基礎(chǔ)篇
第1章Scala零基礎(chǔ)入門
1.1Scala概述
1.2Windows及Linux下Scale運行環(huán)境安裝配置
1.2.1軟件工具準(zhǔn)備
1.2.2Windows環(huán)境下的Scala安裝
1.2.3Linux環(huán)境下的Scala安裝
1.2.4Linux環(huán)境下的Hadoop安裝與配置
1.2.5Linux環(huán)境下的Spark安裝與配置
1.3Scala開發(fā)環(huán)境搭建和HelloWorld實例
1.3.1Scala集成開發(fā)工具的安裝
1.3.2HelloWorld編程實例
1.3.3WorkSheet的使用
1.4變量的使用
1.4.1Scala解釋器中的變量示例
1.4.2val變量的定義
1.4.3var變量的定義
1.4.4var變量與val變量的使用比較
1.5函數(shù)的定義、流程控制、異常處理
1.5.1函數(shù)的定義
1.5.2流程控制(if、while、for)
1.5.3異常處理
1.6Tuple、Array、Map與文件操作
1.6.1Tuple元組
1.6.2Array數(shù)組
1.6.3文件操作
1.6.4Map映射
1.7Scala中的apply方法
1.7.1Object中的apply
1.7.2Class中的apply
1.7.3Array數(shù)組的apply實現(xiàn)
1.8小結(jié)
第2章Scala面向?qū)ο缶幊涕_發(fā)
2.1類的定義及屬性
2.1.1類定義
2.1.2帶有g(shù)etter和setter的屬性
2.2主構(gòu)造器、私有構(gòu)造器、構(gòu)造器重載
2.2.1構(gòu)造器重載之輔助構(gòu)造器
2.2.2主構(gòu)造器
2.2.3不同訪問權(quán)限的構(gòu)造器
2.3內(nèi)部類和外部類
2.4單例對象、伴生對象
2.5繼承:超類的構(gòu)造、重寫字段、重寫方法
2.5.1超類的構(gòu)造
2.5.2重寫字段
2.5.3重寫方法
2.6抽象類、抽象字段、抽象方法
2.6.1抽象類
2.6.2抽象字段
2.6.3抽象方法
2.7trait特質(zhì)
2.7.1作為接口使用的trait
2.7.2在對象中混入trait
2.7.3trait深入解析
2.8多重繼承、多重繼承構(gòu)造器執(zhí)行順序及AOP實現(xiàn)
2.8.1多重繼承
2.8.2多重繼承構(gòu)造器執(zhí)行順序
2.8.3AOP實現(xiàn)
2.9包的定義、包對象、包的引用、包的隱式引用
2.9.1包的定義
2.9.2包對象
2.9.3包的引用
2.9.4包的隱式引用
2.10包、類、對象、成員、伴生類、伴生對象訪問權(quán)限
2.10.1包、類、對象、成員訪問權(quán)限
2.10.2伴生類、伴生對象訪問權(quán)限
2.11小結(jié)
第3章Scala高階函數(shù)
3.1匿名函數(shù)
3.2偏應(yīng)用函數(shù)
3.3閉包
3.4SAM轉(zhuǎn)換
3.5Curring函數(shù)
3.6高階函數(shù)
3.7高階函數(shù)在Spark中的應(yīng)用
3.8小結(jié)
中級篇
第4章Scala模式匹配
4.1模式匹配簡介
4.2模式匹配類型
4.2.1常量模式
4.2.2變量模式
4.2.3構(gòu)造器模式
4.2.4序列(Sequence)模式
4.2.5元組(Tuple)模式
4.2.6類型模式
4.2.7變量綁定模式
4.3模式匹配與Case Class
4.3.1構(gòu)造器模式匹配原理
4.3.2序列模式匹配原理
4.3.3Sealed Class在模式匹配中的應(yīng)用
4.4模式匹配應(yīng)用實例
4.4.1for循環(huán)控制結(jié)構(gòu)中的模式匹配
4.4.2正則表達(dá)式中的模式匹配
4.4.3異常處理中的模式匹配
4.4.4Spark源碼中的模式匹配使用
4.5本章小結(jié)
第5章Scala集合
5.1可變集合與不可變集合(Collection)
5.1.1集合的概述
5.1.2集合的相關(guān)操作
5.1.3集合的操作示例
5.2序列(Seq)
5.2.1序列的概述
5.2.2序列的相關(guān)操作
5.2.3序列的操作示例
5.3列表(List)
5.3.1列表的概述
5.3.2列表的相關(guān)操作
5.3.3列表的操作示例
5.4集(Set)
5.4.1集的概述
5.4.2集的相關(guān)操作
5.4.3集的操作示例
5.5映射(Map)
5.5.1映射的概述
5.5.2映射的相關(guān)操作
5.5.3映射的操作示例
5.6迭代器(Iterator)
5.6.1迭代器的概述
5.6.2迭代器的相關(guān)操作
5.6.3迭代器的操作示例
5.7集合的架構(gòu)
5.8小結(jié)
高級篇
第6章Scala類型參數(shù)
6.1泛型
6.1.1泛型的概述
6.1.2泛型的操作示例
6.2界定
6.2.1上下界界定
6.2.2視圖界定
6.2.3上下文界定
6.2.4多重界定
6.2.5界定的操作示例
6.3類型約束
6.3.1類型約束的概述
6.3.2類型約束的操作示例
6.4類型系統(tǒng)
6.4.1類型系統(tǒng)的概述
6.4.2類型系統(tǒng)的操作示例
6.5型變Variance
6.5.1協(xié)變
6.5.2逆變
6.5.3協(xié)變與逆變的操作示例
6.6結(jié)合Spark源碼說明Scala類型參數(shù)的使用
6.7小結(jié)
第7章Scala高級類型
7.1單例類型
7.1.1單例類型概述
7.1.2單例類型示例
7.2類型別名
7.2.1類型別名概述
7.2.2類型別名示例
7.3自身類型
7.3.1自身類型概述
7.3.2自身類型示例
7.4中置類型
7.4.1中置類型概述
7.4.2中置類型示例
7.5類型投影
7.5.1類型投影概述
7.5.2類型投影實例
7.6結(jié)構(gòu)類型
7.6.1結(jié)構(gòu)類型概述
7.6.2結(jié)構(gòu)類型示例
7.7復(fù)合類型
7.7.1復(fù)合類型概述
7.7.2復(fù)合類型示例
7.8存在類型
7.8.1存在類型概述
7.8.2存在類型示例
7.9函數(shù)類型
7.9.1函數(shù)類型概述
7.9.2函數(shù)類型示例
7.10抽象類型
7.10.1抽象類型概述
7.10.2抽象類型實例
7.11Spark源碼中的高級類型使用
7.12本章小結(jié)
第8章Scala隱式轉(zhuǎn)換
8.1隱式轉(zhuǎn)換函數(shù)
8.1.1隱式轉(zhuǎn)換函數(shù)的定義
8.1.2隱式轉(zhuǎn)換函數(shù)的功能
8.2隱式類與隱式對象
8.2.1隱式類
8.2.2隱式參數(shù)與隱式值
8.3類型證明中的隱式轉(zhuǎn)換
8.3.1類型證明的定義
8.3.2類型證明使用實例
8.4上下文界定、視圖界定中的隱式轉(zhuǎn)換
8.4.1Ordering與Ordered特質(zhì)
8.4.2視圖界定中的隱式轉(zhuǎn)換
8.4.3上下文界定中的隱式轉(zhuǎn)換
8.5隱式轉(zhuǎn)換規(guī)則
8.5.1發(fā)生隱式轉(zhuǎn)換的條件
8.5.2不會發(fā)生隱式轉(zhuǎn)換的條件
8.6Spark源碼中的隱式轉(zhuǎn)換使用
8.6.1隱式轉(zhuǎn)換函數(shù)
8.6.2隱式類
8.6.3隱式參數(shù)
8.7本章小結(jié)
第9章Scala并發(fā)編程
9.1Scala的Actor模型簡介
9.2Scala Actor的構(gòu)建方式
9.2.1繼承Actor類
9.2.2Actor工具方法
9.3Actor的生命周期
9.3.1start方法的等冪性
9.3.2Actor的不同狀態(tài)
9.4Actor之間的通信
9.4.1Actor之間發(fā)送消息
9.4.2Actor接收消息
9.5使用react重用線程提升性能
9.6Channel通道
9.6.1OutputChannel
9.6.2InputChannel
9.6.3創(chuàng)建和共享channel
9.7同步和Future
9.8Scala并發(fā)編程實例
9.8.1Scala Actor并發(fā)編程
9.8.2ExecutorService并發(fā)編程
9.9小結(jié)
分布式框架篇
第10章Akka的設(shè)計理念
10.1Akka框架模型
10.2創(chuàng)建Actor
10.2.1通過實現(xiàn)akka.actor.Actor來創(chuàng)建Actor類
10.2.2使用非缺省構(gòu)造方法創(chuàng)建 Actor
10.2.3創(chuàng)建匿名Actor
10.3Actor API
10.3.1Actor trait基本接口
10.3.2使用DeathWatch進(jìn)行生命周期監(jiān)控
10.3.3Hook函數(shù)的調(diào)用
10.3.4查找Actor
10.3.5消息的不可變性
10.3.6發(fā)送消息
10.3.7轉(zhuǎn)發(fā)消息
10.3.8接收消息
10.3.9回應(yīng)消息
10.3.10終止Actor
10.3.11Become/Unbecome
10.3.12殺死Actor
10.4不同類型的Actor
10.4.1方法派發(fā)語義
10.4.2終止有類型Actor
10.5小結(jié)
第11章Akka核心組件及核心特性剖析
11.1Dispatchers 和 Routers
11.1.1為Actor指定派發(fā)器
11.1.2派發(fā)器的類型
11.1.3郵箱
11.1.4Routers
11.1.5路由的使用
11.1.6遠(yuǎn)程部署router
11.2Supervision和Monitoring
11.2.1Supervision
11.2.2Monitoring
11.3Akka中的事務(wù)
11.3.1STM
11.3.2使用STM事務(wù)
11.3.3讀取Agent事務(wù)中的數(shù)據(jù)
11.3.4更新Agent事務(wù)中的數(shù)據(jù)
11.3.5Actor中的事務(wù)
11.3.6創(chuàng)建Transactor
11.4小結(jié)
第12章Akka程序設(shè)計實踐
12.1Akka的配置、日志及部署
12.1.1Akka中配置文件的讀寫
12.1.2Akka中日志配置
12.1.3Akka部署及應(yīng)用場景
12.2使用Akka框架實現(xiàn)單詞統(tǒng)計
12.3分布式Akka環(huán)境搭建
12.4使用Akka微內(nèi)核部署應(yīng)用
12.5Akka框架在Spark中的運用
12.6小結(jié)
第13章Kafka設(shè)計理念與基本架構(gòu)
13.1Kafka產(chǎn)生的背景
13.2消息隊列系統(tǒng)
13.2.1概述
13.2.2常用的消息隊列系統(tǒng)對比
13.2.3Kafka特點及特性
13.2.4Kafka系統(tǒng)應(yīng)用場景
13.3Kafka設(shè)計理念
13.3.1專業(yè)術(shù)語解析
13.3.2消息存儲與緩存設(shè)計
13.3.3消費者與生產(chǎn)者模型
13.3.4Push與Pull機制
13.3.5鏡像機制
13.4Kafka整體架構(gòu)
13.4.1Kafka基本組成結(jié)構(gòu)
13.4.2Kafka工作流程
13.5Kafka性能分析及優(yōu)化
13.6Kafka未來研究方向
13.7小結(jié)
第14章Kafka核心組件及核心特性剖析
14.1Kafka核心組件剖析
14.1.1Producers
14.1.2Consumers
14.1.3Low Level Consumer
14.1.4High Level Consumer
14.2Kafka核心特性剖析
14.2.1Topic、Partitions
14.2.2Replication和Leader Election
14.2.3Consumer Rebalance
14.2.4消息傳送機制
14.2.5Kafka的可靠性
14.2.6Kafka的高效性
14.3Kafka即將發(fā)布版本核心組件及特性剖析
14.3.1重新設(shè)計的Consumer
14.3.2Coordinator Rebalance
14.4小結(jié)
第15章Kafka應(yīng)用實踐
15.1Kafka開發(fā)環(huán)境搭建及運行環(huán)境部署
15.1.1Kafka開發(fā)環(huán)境配置
15.1.2Kafka運行環(huán)境安裝與部署
15.2基于Kafka客戶端開發(fā)
15.2.1消息生產(chǎn)者(Producer)設(shè)計
15.2.2消息消費者(Consumer)設(shè)計
15.2.3Kafka消費者與生產(chǎn)者配置
15.3Spark Streaming整合Kafka
15.3.1基本架構(gòu)設(shè)計流程
15.3.2消息消費者(Consumer)設(shè)計——基于Receiver方法
15.3.3消息消費者(Consumer)設(shè)計——基于No Receiver方法
15.3.4消息生產(chǎn)者(Producer)設(shè)計
15.4小結(jié)
附錄Kafka集群server.properties配置文檔
參考文獻(xiàn)