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