本書分為三大部分,共九章。第壹部分(第1章)主要介紹了企業(yè)大數(shù)據(jù)系統(tǒng)的前期準(zhǔn)備工作,包括如何構(gòu)建企業(yè)大數(shù)據(jù)處理系統(tǒng)的軟件環(huán)境和集群環(huán)境。第二部分(第2~7章)首先介紹了Spark的基本原理,Spark2.0版本的SparkSQL、StructuredStreaming原理和使用方法,以及Spark的多種優(yōu)化方式;然后,介紹了Druid的基本原理、集群的搭建過程、數(shù)據(jù)攝入過程,以及在查詢過程中如何實(shí)現(xiàn)Druid查詢API;接著介紹了日志收集系統(tǒng)Flume的基本架構(gòu)和關(guān)鍵組件,以及分層日志收集架構(gòu)的設(shè)計(jì)與實(shí)踐;后介紹了分布式消息隊(duì)列Kafka的基本架構(gòu)和集群搭建過程,以及使用Java語言實(shí)現(xiàn)客戶端API的詳細(xì)過程。第三部分(第8~9章)主要介紹了企業(yè)大數(shù)據(jù)處理的兩個(gè)實(shí)際應(yīng)用案例,分別是基于Druid構(gòu)建多維數(shù)據(jù)分析平臺(tái)和基于JMX指標(biāo)的監(jiān)控系統(tǒng)。
Preface?前 言我寫本書的初衷是將自己在企業(yè)工作中應(yīng)用的技術(shù)歸納總結(jié),系統(tǒng)地將大數(shù)據(jù)處理相關(guān)技術(shù)融合在一起,給已經(jīng)從事大數(shù)據(jù)相關(guān)技術(shù)研發(fā)工作的朋友,或是準(zhǔn)備從其他行業(yè)轉(zhuǎn)行進(jìn)入大數(shù)據(jù)領(lǐng)域?qū)W習(xí)相關(guān)技術(shù)的朋友提供一份參考資料。希望本書能夠幫助更多從事大數(shù)據(jù)相關(guān)工作的人,也希望通過本書結(jié)識(shí)更多熱愛大數(shù)據(jù)的朋友。
目前,大數(shù)據(jù)已不只停留在概念階段,而是在各領(lǐng)域成功落地,并取得了豐碩的成果。大數(shù)據(jù)已經(jīng)滲透到生活中的各個(gè)方面,距離我們最近且與我們生活息息相關(guān)的大數(shù)據(jù)項(xiàng)目有交通大數(shù)據(jù)、醫(yī)療大數(shù)據(jù)、金融大數(shù)據(jù)、社交媒體大數(shù)據(jù)、互聯(lián)網(wǎng)大數(shù)據(jù)等。如此多的大數(shù)據(jù)項(xiàng)目能夠成功落地,關(guān)鍵原因在于數(shù)據(jù)來源的多樣化,數(shù)據(jù)量的爆發(fā)式增長(zhǎng),新興技術(shù)的快速發(fā)展,以及市場(chǎng)創(chuàng)新需求的不斷增多,這為各種大數(shù)據(jù)項(xiàng)目提供了龐大的數(shù)據(jù)源,通過多種技術(shù)的綜合應(yīng)用,可不斷挖掘出大數(shù)據(jù)背后的社會(huì)價(jià)值和商業(yè)價(jià)值。
隨著開源社區(qū)的不斷發(fā)展,越來越多的優(yōu)秀項(xiàng)目被開源,以處理各種大數(shù)據(jù)場(chǎng)景下的問題和挑戰(zhàn)。作為目前大數(shù)據(jù)生態(tài)系統(tǒng)內(nèi)的早期開源項(xiàng)目,Hadoop在廉價(jià)機(jī)器上實(shí)現(xiàn)了分布式數(shù)據(jù)存儲(chǔ)和高性能分布式計(jì)算,大大降低了數(shù)據(jù)存儲(chǔ)和計(jì)算成本。Hadoop提供的分布式存儲(chǔ)系統(tǒng)HDFS、大數(shù)據(jù)集并行計(jì)算編程模型MapReduce、資源調(diào)度框架YARN已經(jīng)被廣泛應(yīng)用,為大數(shù)據(jù)生態(tài)系統(tǒng)的發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。如今,Hadoop大數(shù)據(jù)生態(tài)圈發(fā)展已經(jīng)非常全面,涉及領(lǐng)域眾多,在大數(shù)據(jù)處理系統(tǒng)中常用的技術(shù)框架包括數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析、數(shù)據(jù)挖掘、批處理、實(shí)時(shí)流計(jì)算、數(shù)據(jù)可視化、監(jiān)控預(yù)警、信息安全等。下圖展示了大數(shù)據(jù)生態(tài)系統(tǒng)內(nèi)比較流行并且已經(jīng)在生產(chǎn)環(huán)境驗(yàn)證過的開源技術(shù)。
(1)SparkSpark是由加州大學(xué)伯克利分校AMP實(shí)驗(yàn)室開源的分布式大規(guī)模數(shù)據(jù)處理通用引擎,具有高吞吐、低延時(shí)、通用易擴(kuò)展、高容錯(cuò)等特點(diǎn)。Spark內(nèi)部提供了豐富的開發(fā)庫,集成了數(shù)據(jù)分析引擎Spark SQL、圖計(jì)算框架GraphX、機(jī)器學(xué)習(xí)庫MLlib、流計(jì)算引擎Spark Streaming。Spark在函數(shù)式編程語言Scala中實(shí)現(xiàn),提供了豐富的開發(fā)API,支持Scala、Java、Python、R等多種開發(fā)語言。同時(shí),它提供了多種運(yùn)行模式,既可以采用獨(dú)立部署的方式運(yùn)行,也可以依托Hadoop YARN、Apache Mesos等資源管理器調(diào)度任務(wù)運(yùn)行。目前,Spark已經(jīng)在金融、交通、醫(yī)療、氣象等多種領(lǐng)域中廣泛使用。
大數(shù)據(jù)生態(tài)系統(tǒng)中的開源技術(shù)(2)DruidDruid是由美國MetaMarkets公司創(chuàng)建并開源的分布式提供海量時(shí)序數(shù)據(jù)存儲(chǔ)、支持實(shí)時(shí)多維數(shù)據(jù)分析的OLAP系統(tǒng),主要應(yīng)用于廣告數(shù)據(jù)分析、網(wǎng)絡(luò)系統(tǒng)監(jiān)控等場(chǎng)景。Druid具有高吞吐、易擴(kuò)展、高容錯(cuò)、低延遲、按時(shí)間序列存儲(chǔ)等特點(diǎn)。
(3)FlumeFlume是由Cloudera公司開發(fā)的分布式、高可用的日志收集系統(tǒng),是Hadoop生態(tài)圈內(nèi)的關(guān)鍵組件之一,目前已開源給Apache。Flume的原始版本為Flume-OG,經(jīng)過對(duì)整體架構(gòu)的重新設(shè)計(jì),現(xiàn)已改名為Flume-NG。Flume發(fā)展到現(xiàn)在已經(jīng)不局限于日志收集,還可以通過簡(jiǎn)單的配置收集不同數(shù)據(jù)源的海量數(shù)據(jù)并將數(shù)據(jù)準(zhǔn)確高效地傳輸?shù)讲煌闹行拇鎯?chǔ)。目前Flume可對(duì)接的主流大數(shù)據(jù)框架有Hadoop、Kafka、ElasticSearch、Hive、HBase等。在使用Flume的過程中,通過配置文件就可以實(shí)現(xiàn)整個(gè)數(shù)據(jù)收集過程的負(fù)載均衡和故障轉(zhuǎn)移,而不需要修改Flume的任何代碼。得益于優(yōu)秀的框架設(shè)計(jì),F(xiàn)lume通過可擴(kuò)展、插件化、組合式、高可用、高容錯(cuò)的設(shè)計(jì)模式,為用戶提供了簡(jiǎn)單、高效、準(zhǔn)確的輕量化大數(shù)據(jù)采集工具。
(4)KafkaKafka是由LinkedIn開源的分布式消息隊(duì)列,能夠輕松實(shí)現(xiàn)高吞吐、可擴(kuò)展、高可用,并且部署簡(jiǎn)單快速、開發(fā)接口豐富。目前,各大互聯(lián)網(wǎng)公司已經(jīng)在生產(chǎn)環(huán)境中廣泛使用,而且已經(jīng)有很多分布式處理系統(tǒng)支持使用Kafka,比如Spark、Strom、Druid、Flume等。
(5)InfluxDBInfluxDB是一款開源分布式時(shí)序數(shù)據(jù)庫,非常適合存儲(chǔ)監(jiān)控系統(tǒng)收集的指標(biāo)數(shù)據(jù)。時(shí)序數(shù)據(jù)庫顧名思義就是按照時(shí)間順序存儲(chǔ)指標(biāo)數(shù)據(jù),即監(jiān)控系統(tǒng)的場(chǎng)景大部分是按照時(shí)間順序存儲(chǔ)各項(xiàng)指標(biāo)數(shù)據(jù),過期時(shí)間太長(zhǎng)的指標(biāo)可能將不會(huì)再關(guān)注,所以為了提高數(shù)據(jù)庫的存儲(chǔ)率,提高查詢性能,需要定期刪除過期指標(biāo)。InfluxDB的諸多特性非常適合監(jiān)控系統(tǒng)的使用場(chǎng)景。
本書將詳細(xì)介紹上述技術(shù)的原理,通過實(shí)踐演示每種技術(shù)的實(shí)際應(yīng)用場(chǎng)景。希望通過理論與實(shí)踐相結(jié)合的方式使內(nèi)容更通俗易懂,幫助讀者根據(jù)實(shí)際的業(yè)務(wù)場(chǎng)景選擇合適的技術(shù)方案,相信大數(shù)據(jù)在未來的發(fā)展中還會(huì)創(chuàng)造更多的價(jià)值。
內(nèi)容概述本書分三部分展開介紹:
第一部分(第1章)主要介紹了企業(yè)大數(shù)據(jù)系統(tǒng)的前期準(zhǔn)備工作,包括如何構(gòu)建企業(yè)大數(shù)據(jù)處理系統(tǒng)的軟件環(huán)境和集群環(huán)境。
第二部分(第2~7章)首先介紹了Spark的基本原理,Spark 2.0版本的Spark SQL、Structured Streaming原理和使用方法,以及Spark的多種優(yōu)化方式;然后,介紹了Druid的基本原理、集群的搭建過程、數(shù)據(jù)攝入過程,以及在查詢過程中如何實(shí)現(xiàn)Druid查詢API;接著介紹了日志收集系統(tǒng)Flume的基本架構(gòu)和關(guān)鍵組件,以及分層日志收集架構(gòu)的設(shè)計(jì)與實(shí)踐;最后介紹了分布式消息隊(duì)列
肖冠宇目前就職于樂視網(wǎng)智能中心大數(shù)據(jù)部,曾就職于人民在線大數(shù)據(jù)團(tuán)隊(duì),主要進(jìn)行廣告數(shù)據(jù)分析、大數(shù)據(jù)產(chǎn)品研發(fā)等工作,具有多年大數(shù)據(jù)產(chǎn)品研發(fā)、高性能分布式框架、實(shí)時(shí)計(jì)算等經(jīng)驗(yàn),對(duì)整個(gè)Hadoop生態(tài)系統(tǒng)的各項(xiàng)技術(shù)都非常了解,有豐富的實(shí)踐經(jīng)驗(yàn)。
Contents?目 錄
前 言
第一部分 準(zhǔn)備工作
第1章 基礎(chǔ)環(huán)境準(zhǔn)備 2
1.1 軟件環(huán)境準(zhǔn)備 2
1.2 集群環(huán)境準(zhǔn)備 4
1.2.1 Zookeeper集群部署 4
1.2.2 Hadoop部署 6
1.3 小結(jié) 15
第二部分 核心技術(shù)
第2章 Spark詳解 18
2.1 Spark概述 18
2.1.1 Spark概述 18
2.1.2 Shuff?le詳解 25
2.2 Spark SQL 29
2.2.1 SparkSession 29
2.2.2 DataFrame 30
2.2.3 DataSet 35
2.3 Structured Streaming 35
2.3.1 數(shù)據(jù)源 36
2.3.2 輸出到外部存儲(chǔ) 38
2.3.3 WordCount示例 40
2.4 Spark優(yōu)化 42
2.4.1 數(shù)據(jù)優(yōu)化 42
2.4.2 代碼優(yōu)化 44
2.4.3 參數(shù)優(yōu)化 46
2.5 小結(jié) 48
第3章 Druid原理及部署 49
3.1 架構(gòu)設(shè)計(jì) 49
3.1.1 節(jié)點(diǎn)類型 49
3.1.2 Segment介紹 57
3.1.3 容錯(cuò)處理 59
3.1.4 路由節(jié)點(diǎn) 60
3.2 集群部署 63
3.2.1 集群規(guī)劃 63
3.2.2 配置安裝 64
3.3 小結(jié) 72
第4章 Druid數(shù)據(jù)攝入 73
4.1 模式設(shè)計(jì) 73
4.1.1 設(shè)計(jì)概述 73
4.1.2 數(shù)據(jù)解析 75
4.1.3 Segment分區(qū) 79
4.1.4 模式更改 81
4.2 批量數(shù)據(jù)攝入 81
4.3 流數(shù)據(jù)攝入 87
4.3.1 Tranquility 88
4.3.2 StreamPush 91
4.3.3 從Kafka中攝取數(shù)據(jù) 92
4.4 數(shù)據(jù)更新 94
4.5 小結(jié) 95
第5章 Druid客戶端 96
5.1 涉及組件 96
5.1.1 查詢相關(guān) 96
5.1.2 過濾器 99
5.1.3 聚合粒度 101
5.1.4 聚合器 105
5.2 查詢類型 109
5.2.1 時(shí)間序列查詢 109
5.2.2 TopN查詢 111
5.2.3 分組查詢 113
5.2.4 元數(shù)據(jù)查詢 117
5.2.5 搜索查詢 121
5.3 查詢API 125
5.3.1 RESTful介紹 125
5.3.2 Jersey客戶端 126
5.4 小結(jié) 129
第6章 日志收集 130
6.1 Flume介紹 130
6.1.1 基本架構(gòu) 131
6.2 Flume應(yīng)用實(shí)踐 144
6.2.1 攔截器、選擇器實(shí)踐 144
6.2.2 負(fù)載均衡、故障轉(zhuǎn)移實(shí)踐 149
6.2.3 設(shè)計(jì)與實(shí)踐 150
6.3 小結(jié) 154
第7章 分布式消息隊(duì)列 155
7.1 Kafka介紹 155
7.1.1 基本架構(gòu) 155
7.1.2 高吞吐的實(shí)現(xiàn) 157
7.1.3 高可用的實(shí)現(xiàn) 160
7.2 安裝部署 161
7.2.1 Broker配置參數(shù) 161
7.2.2 分布式部署 162
7.3 客戶端API 163
7.3.1 Producer API 164
7.3.2 Consumer API 165
7.4 小結(jié) 169
第三部分 項(xiàng)目實(shí)踐
第8章 數(shù)據(jù)平臺(tái) 172
8.1 需求分析 172
8.2 功能實(shí)現(xiàn) 173
8.2.1 架構(gòu)設(shè)計(jì) 173
8.2.2 關(guān)鍵功能實(shí)現(xiàn) 175
8.3 小結(jié) 184
第9章 監(jiān)控系統(tǒng) 185
9.1 Inf?luxDB 185
9.1.1 Inf?luxDB簡(jiǎn)介 186
9.1.2 Inf?luxDB安裝 186
9.1.3 Inf?luxDB操作 188
9.1.4 Inf?luxDB客戶端 191
9.2 JMXTrans 192
9.2.1 JMXTrans介紹 192
9.2.2 JMXTrans安裝 194
9.2.3 JMXTrans使用 195
9.3 Grafana 198
9.3.1 Grafana安裝 198
9.3.2 Grafana使用 199
9.4 小結(jié) 208