采用Scala語言編寫實現(xiàn)的,大數(shù)據(jù)領域最火爆的計算框架Spark(其實Spark在Apache下的數(shù)據(jù)處理領域也是最火爆的計算框架),正在以迅雷不及掩耳之勢快速發(fā)展。很少有一門語言能夠像Scala這樣,因其作為大數(shù)據(jù)框架Spark的核心和首選開發(fā)語言而爆發(fā)式地普及起來。Spark本身起源于2009年,是美國加州大學伯克利分校AMP實驗室的一個研究性項目,于2010年開源,在2014、2015年大數(shù)據(jù)領域軟件排名中,Spark都以絕對優(yōu)勢遙遙領先!雖然基于Spark平臺可以采用Scala、Java、Python、R等4種語言開發(fā),但據(jù)Spark官方統(tǒng)計,2014年和2015年全世界范圍內(nèi)基于Spark開發(fā)采用最多的語言一直都是Scala。另外,在大數(shù)據(jù)領域越來越多的其他技術框架,例如Kafka等也都把Scala作為實現(xiàn)和開發(fā)語言。因此,為了打好大數(shù)據(jù)領域學習的基礎,本書面向廣大Scala愛好者和大數(shù)據(jù)開發(fā)者,以實戰(zhàn)為主導,并用實戰(zhàn)與理論相結合的方式來幫助讀者學習Scala語言。
從2012年美國政府的“大數(shù)據(jù)研發(fā)計劃”,到2015年我國國務院發(fā)布的《促進大數(shù)據(jù)發(fā)展行動綱要》,可以說,大數(shù)據(jù)已經(jīng)迎來了它的黃金時代。本書緊跟時代潮流,除了講解Scala語言之外,還額外挑選了當前在大數(shù)據(jù)領域中應用非常廣泛的Akka和Kafka兩大框架進行講解,并且詳細講解了Scala語言在其中的應用。其中,Akka是一個在JVM上構建高并發(fā)、分布式和可快速恢復的消息驅動應用的工具包;Kafka是高產(chǎn)出的分布式消息系統(tǒng),它實現(xiàn)了生產(chǎn)者和消費者之間的無縫連接,實現(xiàn)了處理速度快、高可擴展性的分布式實時系統(tǒng)。
本書編寫的主線是以Scala實戰(zhàn)實例為主導,由淺入深,從Scala的基礎篇、中級篇直至高級篇,對Scala各個知識點加以詳細分析并給出相應的實例及解析。然后更進一步地引入分布式框架篇,針對當前大數(shù)據(jù)領域使用非常廣泛的大分布式框架Akka和Kafka,擴展Scala語言在開發(fā)分布式框架時的實戰(zhàn)實例,為讀者進一步學習大數(shù)據(jù)領域各個框架打好基礎。
參與本書編寫的有王家林、段智華、管祥青、徐奔、張敏、徐香玉等。
本書能順利出版,離不開出版社編輯們的大力支持與幫助,在此表示誠摯的感謝。
非常感謝本書的技術審核徐香玉為審核本書技術相關內(nèi)容所做出的努力。
在閱讀本書的過程中,若發(fā)現(xiàn)任何問題或有任何疑問,可以加入本書的閱讀群提出討論,會有專人幫忙答疑。同時,該群中也會提供本書所用實例代碼。
由于時間倉促,書中難免存在不妥之處,請讀者諒解,并提出寶貴意見。
機工授權書
前言
基礎篇
第1章Scala零基礎入門
1.1Scala概述
1.2Windows及Linux下Scale運行環(huán)境安裝配置
1.2.1軟件工具準備
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小結
第2章Scala面向對象編程開發(fā)
2.1類的定義及屬性
2.1.1類定義
2.1.2帶有getter和setter的屬性
2.2主構造器、私有構造器、構造器重載
2.2.1構造器重載之輔助構造器
2.2.2主構造器
2.2.3不同訪問權限的構造器
2.3內(nèi)部類和外部類
2.4單例對象、伴生對象
2.5繼承:超類的構造、重寫字段、重寫方法
2.5.1超類的構造
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多重繼承、多重繼承構造器執(zhí)行順序及AOP實現(xiàn)
2.8.1多重繼承
2.8.2多重繼承構造器執(zhí)行順序
2.8.3AOP實現(xiàn)
2.9包的定義、包對象、包的引用、包的隱式引用
2.9.1包的定義
2.9.2包對象
2.9.3包的引用
2.9.4包的隱式引用
2.10包、類、對象、成員、伴生類、伴生對象訪問權限
2.10.1包、類、對象、成員訪問權限
2.10.2伴生類、伴生對象訪問權限
2.11小結
第3章Scala高階函數(shù)
3.1匿名函數(shù)
3.2偏應用函數(shù)
3.3閉包
3.4SAM轉換
3.5Curring函數(shù)
3.6高階函數(shù)
3.7高階函數(shù)在Spark中的應用
3.8小結
中級篇
第4章Scala模式匹配
4.1模式匹配簡介
4.2模式匹配類型
4.2.1常量模式
4.2.2變量模式
4.2.3構造器模式
4.2.4序列(Sequence)模式
4.2.5元組(Tuple)模式
4.2.6類型模式
4.2.7變量綁定模式
4.3模式匹配與Case Class
4.3.1構造器模式匹配原理
4.3.2序列模式匹配原理
4.3.3Sealed Class在模式匹配中的應用
4.4模式匹配應用實例
4.4.1for循環(huán)控制結構中的模式匹配
4.4.2正則表達式中的模式匹配
4.4.3異常處理中的模式匹配
4.4.4Spark源碼中的模式匹配使用
4.5本章小結
第5章Scala集合
5.1可變集合與不可變集合(Collection)
5.1.1集合的概述
5.1.2集合的相關操作
5.1.3集合的操作示例
5.2序列(Seq)
5.2.1序列的概述
5.2.2序列的相關操作
5.2.3序列的操作示例
5.3列表(List)
5.3.1列表的概述
5.3.2列表的相關操作
5.3.3列表的操作示例
5.4集(Set)
5.4.1集的概述
5.4.2集的相關操作
5.4.3集的操作示例
5.5映射(Map)
5.5.1映射的概述
5.5.2映射的相關操作
5.5.3映射的操作示例
5.6迭代器(Iterator)
5.6.1迭代器的概述
5.6.2迭代器的相關操作
5.6.3迭代器的操作示例
5.7集合的架構
5.8小結
高級篇
第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結合Spark源碼說明Scala類型參數(shù)的使用
6.7小結
第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結構類型
7.6.1結構類型概述
7.6.2結構類型示例
7.7復合類型
7.7.1復合類型概述
7.7.2復合類型示例
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本章小結
第8章Scala隱式轉換
8.1隱式轉換函數(shù)
8.1.1隱式轉換函數(shù)的定義
8.1.2隱式轉換函數(shù)的功能
8.2隱式類與隱式對象
8.2.1隱式類
8.2.2隱式參數(shù)與隱式值
8.3類型證明中的隱式轉換
8.3.1類型證明的定義
8.3.2類型證明使用實例
8.4上下文界定、視圖界定中的隱式轉換
8.4.1Ordering與Ordered特質(zhì)
8.4.2視圖界定中的隱式轉換
8.4.3上下文界定中的隱式轉換
8.5隱式轉換規(guī)則
8.5.1發(fā)生隱式轉換的條件
8.5.2不會發(fā)生隱式轉換的條件
8.6Spark源碼中的隱式轉換使用
8.6.1隱式轉換函數(shù)
8.6.2隱式類
8.6.3隱式參數(shù)
8.7本章小結
第9章Scala并發(fā)編程
9.1Scala的Actor模型簡介
9.2Scala Actor的構建方式
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小結
分布式框架篇
第10章Akka的設計理念
10.1Akka框架模型
10.2創(chuàng)建Actor
10.2.1通過實現(xiàn)akka.actor.Actor來創(chuàng)建Actor類
10.2.2使用非缺省構造方法創(chuàng)建 Actor
10.2.3創(chuàng)建匿名Actor
10.3Actor API
10.3.1Actor trait基本接口
10.3.2使用DeathWatch進行生命周期監(jiān)控
10.3.3Hook函數(shù)的調(diào)用
10.3.4查找Actor
10.3.5消息的不可變性
10.3.6發(fā)送消息
10.3.7轉發(fā)消息
10.3.8接收消息
10.3.9回應消息
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小結
第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遠程部署router
11.2Supervision和Monitoring
11.2.1Supervision
11.2.2Monitoring
11.3Akka中的事務
11.3.1STM
11.3.2使用STM事務
11.3.3讀取Agent事務中的數(shù)據(jù)
11.3.4更新Agent事務中的數(shù)據(jù)
11.3.5Actor中的事務
11.3.6創(chuàng)建Transactor
11.4小結
第12章Akka程序設計實踐
12.1Akka的配置、日志及部署
12.1.1Akka中配置文件的讀寫
12.1.2Akka中日志配置
12.1.3Akka部署及應用場景
12.2使用Akka框架實現(xiàn)單詞統(tǒng)計
12.3分布式Akka環(huán)境搭建
12.4使用Akka微內(nèi)核部署應用
12.5Akka框架在Spark中的運用
12.6小結
第13章Kafka設計理念與基本架構
13.1Kafka產(chǎn)生的背景
13.2消息隊列系統(tǒng)
13.2.1概述
13.2.2常用的消息隊列系統(tǒng)對比
13.2.3Kafka特點及特性
13.2.4Kafka系統(tǒng)應用場景
13.3Kafka設計理念
13.3.1專業(yè)術語解析
13.3.2消息存儲與緩存設計
13.3.3消費者與生產(chǎn)者模型
13.3.4Push與Pull機制
13.3.5鏡像機制
13.4Kafka整體架構
13.4.1Kafka基本組成結構
13.4.2Kafka工作流程
13.5Kafka性能分析及優(yōu)化
13.6Kafka未來研究方向
13.7小結
第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重新設計的Consumer
14.3.2Coordinator Rebalance
14.4小結
第15章Kafka應用實踐
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)設計
15.2.2消息消費者(Consumer)設計
15.2.3Kafka消費者與生產(chǎn)者配置
15.3Spark Streaming整合Kafka
15.3.1基本架構設計流程
15.3.2消息消費者(Consumer)設計——基于Receiver方法
15.3.3消息消費者(Consumer)設計——基于No Receiver方法
15.3.4消息生產(chǎn)者(Producer)設計
15.4小結
附錄Kafka集群server.properties配置文檔
參考文獻