本書在第1版的基礎上,介紹大數據的時代背景及應用方案、常用的離線大數據和流式大數據組件,以及基于云平臺的容器級數據平臺搭建。書中以離線大數據和流式大數據兩個具體示例,貫穿本書的第二、三部分內容,對組件之間的協同工作關系進行剖析。書中的代碼部分基本上使用Python編寫,用戶可以下載參考。如果你是一位在校學生、Python編程愛好者或是想轉行從事大數據工作的在職IT人員,閱讀本書必有所收獲!
劉未昕:從事lT研發和項目管理工作十余年。使用多種程序設計語言,目前研究方向主要是大數據生態系統,從事金融、數據倉庫等領域研發。五年以上IT行業授課、培訓經驗,并在多所高校擔任外聘講師。 張粵磊:DBA、大數據架構師,十余年一線數據處理數據分析實戰經驗。先后在咨詢、金融、互聯網行業擔任數據平臺技術負責人或架構師。主要關注大數據基礎平臺、大數據模型構建和大數據分析。 張魁:虛擬化工程師,OpenStack架構師,蘇州某高校云平臺架構師,十余年Linux系統運維實踐及虛擬化開發經驗,4年Linux系統補丁開發經驗。先后在美企擔任虛擬化應用運維、服務器集群開發運維工程師或系統開發架構師,高校信息中心云平臺架構師,主要關注OpenStack、Docker及分布式存儲等。 吳茂貴:運籌學與控制論專業研究生學歷。畢業后主要參與數據倉庫、商務智能等方面的項目,期間做過數據處理、數據分析、數據挖掘等工作,行業涉及金融、物流、制造業等。近期主要做復雜數據存儲、清理、轉換等工作,同時在大數據方面也很有興趣并投入大量時間和精力,且將持續為之。
第一部分 大數據概述
第1章 大數據的時代背景及應用落地 2
1.1 大數據與“云大物區智”的關聯 2
1.2 大數據平臺的應用優勢 4
1.3 大數據平臺的技術架構選型和產品對比 4
第2章 大數據系統的安裝及配置 7
2.1 服務器及操作系統的準備 7
2.2 JDK、PYTHON和SCALA 8
2.3 HADOOP 12
2.3.1 安裝環境的確認及文件準備 16
2.3.2 配置環境變量及無密碼傳輸 16
2.3.3 配置Hadoop的對應參數 18
2.3.4 啟動并驗證Hadoop 20
2.4 SQOOP 20
2.4.1 Sqoop安裝文件的準備 22
2.4.2 Sqoop的安裝及配置 23
2.4.3 Sqoop運行驗證 24
2.5 HIVE 25
2.5.1 安裝文件的準備 26
2.5.2 配置環境變量和安裝MySQL 26
2.5.3 配置Hive參數 26
2.5.4 驗證Hive的相關服務 29
2.6 ZOOKEEPER和HBASE 29
2.6.1 ZooKeeper安裝文件的準備 30
2.6.2 ZooKeeper的安裝及配置 30
2.6.3 ZooKeeper運行驗證 31
2.6.4 HBase安裝文件的準備 31
2.6.5 HBase的安裝及配置 31
2.6.6 HBase運行驗證 32
2.7 FLUME 33
2.8 KAFKA 35
2.9 SPARK 37
2.9.1 Spark安裝文件的準備 38
2.9.2 Spark的安裝及配置 38
2.9.3 Spark運行驗證 39
2.10 FLINK 39
2.11 開源大數據系統各組件的組合 40
2.12 CDH 41
2.13 FUSIONINSIGHT 42
2.14 小結 44
第二部分 離線大數據處理
第3章 使用PYTHON爬蟲獲取數據 47
3.1 PYTHON爬蟲模塊的安裝 47
3.1.1 requests模塊的安裝及驗證 47
3.1.2 Beautiful Soup模塊的安裝及驗證 47
3.2 抓取并解析JSON數據 49
3.2.1 利用Fiddler找出所抓取的網址 49
3.2.2 解析JSON對象 51
3.3 抓取并解析HTML中的數據 52
3.3.1 使用Beautiful Soup提取網頁內容 52
3.3.2 保存抓取內容 53
3.3.3 不同爬蟲模塊所適用的場景 55
3.4 使用PYTHON提取文章的關鍵字 55
3.4.1 中文分詞和關鍵字的提取 55
3.4.2 Python的中文分詞模塊jieba 56
3.4.3 使用自定義詞典和停用詞 57
3.4.4 提取文章的關鍵字 58
3.5 小結 60
第4章 HIVE在大數據中的角色 61
4.1 HIVE的核心概念及配置使用 61
4.1.1 Hive在大數據生態系統中的作用 61
4.1.2 Hive的幾種使用方法 62
4.1.3 使用Tez引擎替代MapReduce 65
4.2 概要設計和物理模型的創建 68
4.2.1 使用Hive要解決哪些問題 68
4.2.2 數據庫的概要設計 68
4.2.3 物理模型的定義及創建表 73
4.3 加載爬蟲數據 79
4.4 數據的合并、去重和轉換 80
4.4.1 數據的合并 80
4.4.2 利用臨時表去掉重復的數據 81
4.4.3 使用Hive內置函數轉換數據 83
4.5 使用UDF實現數據的轉換 84
4.5.1 用戶自定義函數的實現原理 84
4.5.2 利用Python實現UDF 84
4.5.3 數據進入rpt表 87
4.6 使用PYTHON操作HIVE 89
4.6.1 安裝impyla模塊 89
4.6.2 使用Python讀取數據示例 89
4.7 ETL數據調度和數據治理 90
4.7.1 數據處理的自動化 90
4.7.2 數據治理 95
4.8 小結 96
第5章 使用HBASE實現大數據存儲 97
5.1 非關系型數據庫及HBASE 97
5.2 HBASE的幾個核心概念 98
5.3 HBASE數據操作命令 99
5.3.1 HBase客戶端 99
5.3.2 創建表及插入數據 100
5.3.3 按照行鍵值檢索 102
5.3.4 掃描檢索 102
5.3.5 刪除表和數據 104
5.4 使用PYTHON操作HBASE 107
5.4.1 啟動HBase Thrift Server 107
5.4.2 安裝happybase模塊 107
5.4.3 插入數據及刪除數據 107
5.4.4 組合查詢代碼示例 109
5.5 把HIVE數據導入HBASE 110
5.6 用HIVE外部表讀取HBASE數據 111
5.7 小結 112
第6章 SPARK數據分析引擎 113
6.1 SPARK簡介 113
6.2 SPARK集群的配置及啟動 114
6.2.1 Spark集群的安裝與配置 115
6.2.2 作業提交方式 116
6.2.3 操作界面的啟動類型 117
6.2.4 三類Web監控界面 119
6.3 調用HIVE數據 121
6.3.1 使用beeline客戶端 121
6.3.2 使用HiveContext對象 122
6.3.3 使用Spark SQL 123
6.3.4 使用JDBC 123
6.4 調用HBASE數據 123
6.4.1 設定環境變量 123
6.4.2 讀數據示例 124
6.5 使用PYSPARK進行數據分析 126
6.5.1 將RDD轉換為DataFrame 127
6.5.2 Spark SQL等值連接 129
6.5.3 使用matplotlib繪制直方圖 129
6.6 小結 130
第7章 使用FLASK實現數據展示 131
7.1 FLASK框架簡介及站點搭建流程 131
7.2 FLASK微框架的特性 132
7.3 使用MVC模式搭建項目框架 133
7.3.1 訪問地址 133
7.3.2 MVC模式簡介 133
7.3.3 項目目錄結構 134
7.4 檢索及加載新聞數據 135
7.4.1 模型層的開發 135
7.4.2 模型層的單元測試 136
7.4.3 控制器層的開發 138
7.4.4 控制器層的單元測試 139
7.4.5 視圖層的開發 140
7.5 小結 141
第二部分技術點總結 141
第三部分 流式大數據處理
第8章 使用FLUME獲取網站訪問日志 145
8.1 FLUME的安裝及數據流模型 145
8.1.1 Flume簡介及安裝 145
8.1.2 Flume的數據流模型 146
8.2 核心組件的配合使用 146
8.2.1 6種核心組件 146
8.2.2 配置文件 147
8.2.3 flume-ng命令 148
8.3 各種數據組合的流動方式 150
8.3.1 將日志收集至文件 150
8.3.2 Sink的多路復用 152
8.3.3 使用Avro作為數據源 154
8.3.4 Channel的多路復用 155
8.4 APACHE服務器的日志格式 158
8.5 合并兩個網站的日志 160
8.6 小結 162
第9章 KAFKA的安裝、配置及其與FLUME的整合 163
9.1 KAFKA的特性及安裝、配置 163
9.1.1 Kafka的特性和適用場合 163
9.1.2 安裝、配置Kafka 164
9.2 幾種術語 166
9.3 BROKER的使用方法 167
9.3.1 單節點單Broker 168
9.3.2 單節點多Broker 169
9.3.3 分布式Broker 172
9.3.4 分區及偏移量 174
9.3.5 分區選擇策略 176
9.4 分布式生產者/消費者 176
9.4.1 兩個生產者 176
9.4.2 消費者組 177
9.5 KAFKA CONNECTOR 180
9.5.1 File Source 181
9.5.2 File Sink 182
9.6 KAFKA和FLUME的整合 183
9.6.1 給Flume提供數據 183
9.6.2 從Flume中獲取數據 184
9.7 使用PYTHON連接KAFKA 186
9.8 小結 187
第10章 REDIS數據庫簡介 188
10.1 REDIS的特點及適用場景 188
10.2 REDIS的安裝及命令行使用方法 188
10.2.1 Redis的安裝及啟動 188
10.2.2 命令行客戶端 189
10.2.3 5種數據類型 190
10.2.4 字符串命令 191
10.3 使用PYTHON操作REDIS 193
10.4 使用JAVA操作REDIS 194
10.5 小結 195
第11章 FLINK簡介及其與KAFKA的整合 196
11.1 FLINK概述及其與SPARK的區別 196
11.2 FLINK的架構、特性及工作流程 196
11.3 FLINK的安裝 199
11.3.1 單節點的安裝 199
11.3.2 集群的安裝 201
11.3.3 利用ZooKeeper實現Flink的高可用性 203
11.4 FLINK的作業提交方式 205
11.4.1 以Standalone方式運行 205
11.4.2 利用YARN Session運行 207
11.4.3 利用Python調用Flink服務 212
11.4.4 使用REST API查看狀態 213
11.5 FLINK-KAFKA CONNECTOR 214
11.5.1 Flink為Kafka提供數據 215
11.5.2 Flink從Kafka接收數據 219
11.6 使用FLINK統計PAGEVIEW 221
11.6.1 Flink開發的一般步驟 221
11.6.2 Flink DataStream API 221
11.6.3 將數據落地至Redis和HBase 227
11.7 小結 235
第12章 網站頁面訪問量的動態展示 236
12.1 百度的ECHARTS圖表功能簡介 236
12.2 頁面訪問量的動態統計 238
12.2.1 模型層的開發 239
12.2.2 控制器層的開發 242
12.2.3 視圖層的開發 242
12.3 生成詞云圖和占比餅圖 245
12.3.1 詞云圖模型層的開發 245
12.3.2 詞云圖控制器層的開發 248
12.3.3 詞云圖視圖層的開發 249
12.3.4 關鍵字餅圖的模型層開發 249
12.3.5 關鍵字餅圖的控制器層開發 250
12.3.6 關鍵字餅圖的視圖層開發 251
12.4 訪問日志檢索 252
12.5 小結 253
第三部分技術點總結 253
第四部分 云平臺搭建
第13章 搭建基于云平臺的容器級數據系統 256
13.1 云平臺 256
13.1.1 云平臺架構 256
13.1.2 云平臺的搭建及部署 259
13.1.3 云平臺的高級配置 303
13.2 基于云平臺的容器集群 309
13.2.1 Magnum 309
13.2.2 Docker Swarm 311
13.2.3 Mesos和Marathon的結合 316
13.2.4 Kubernetes 323
13.3 基于容器的大數據系統 331
13.4 小結 339