內容簡介
本書側重于大數據的實踐性技術,系統地介紹了主流大數據平臺及工具的安裝部署、管理維護和應用開發。平臺和工具的選擇均為當前業界主流的開源產品,因此,對于讀者來說,有很強的可操作性。
本書涉及的開源技術包括:HDFS、MapReduce、YARN、Zookeeper、HBase、Hive、Sqoop、Storm、Kafka、Flume等。除介紹一般性的背景知識、安裝部署、管理維護和應用開發技術外,還特別注重案例實踐,重要的技術點以實際工作場景或案例為依托,使讀者能快速入門,參考案例動手實踐,通過具體深入的實踐,體會大數據的技術本質特征,領略大數據技術帶來的創新理念,更好地理解和把握信息技術的發展趨勢。
本書主要內容包括以下幾大部分。
大數據存儲篇:以HDFS為基礎,介紹分布式文件系統的原理、安裝、fs命令的使用、編程,介紹如何用HDFS實現,并通過HTTP調用。
大數據計算篇:以MapReduce、YARN為基礎,介紹分布式計算的原理、部署,以及編程案例。
非關系型數據庫篇:以HBase為基礎,重點介紹非關系型數據庫的優勢、原理、部署,以及命令行使用,編程案例,與Sqoop配合使用等。
大數據倉庫篇:以Hive、數據倉庫等為基礎,重點介紹數據的抽取、原理、部署、分析與編程。
大數據實時計算篇:以Storm、Kafka為基礎,介紹實時計算的架構、組成、使用與開發。
本書非常適合從事大數據技術開發與使用的初學者,以及從事大數據技術研發的企事業單位工程師學習和參考,也適合高校計算機相關專業的專科生、本科生和研究生學習使用。
前 言
技術革命的浪潮推動著人類文明的發展。
第一次浪潮造就了農業革命,它在數千年前出現并持續了數千年;第二次浪潮造就了工業革命,它在數百年前出現并持續了數百年;我們今天正在經歷著信息技術第三次浪潮,發端于數十年前,目前也只是處在初級階段。
農業技術革命釋放了"物之力";工業技術革命釋放了"能之力",而今天的信息技術革命釋放的是"智之力"。
距今400年前,培根在《偉大的復興》中預言:知識就是力量。今天,人類終于迎來"知識經濟時代",它是人類社會經濟增長方式與經濟發展的全新模式。
人類認識物質世界、人類社會和精神世界的最高境界是智慧,而要達智慧的境界,必然要跨越數據、信息、知識三個層級。
數據作為基礎,是信息之母、知識之初、智慧之源。正是今天的大數據技術,引燃了人們實現智慧城市、智慧醫療、智慧教育等有關人工智慧的激情。人們真切地認識到,對于人工智能,只要讓數據發生質變,即使是簡單的數據,也比復雜的算法更有效。
今天,移動互聯網的發展,使我們在獲取數據上有了質的飛躍,人類的各種社會活動都與互聯網這個虛擬世界相聯系,使全樣本、全過程地有效測量和記錄成為可能,構建了生成大數據生態的土壤,同時,人們還在期待和憧憬物聯網帶來更大的沖擊。
另一方面,云計算發展到今天,不論從技術到產業都開始進入成熟期,這也是大數據發展的基石和推進器。
在今天這個時代中,運用大數據洞見事物蘊藏的"智慧"成為人們的渴望。大數據更新了人們對數據的認識。在技術層面,小數據時代的很多數據處理方法和工具已不再有效,需要一系列新的方法和工具。所幸,有大量平民化的開源軟件可用,它們不需要特殊的硬件系統,也更適用于云計算環境。
本書正是一本介紹主流的大數據開源軟件平臺和工具的技術專著,側重于大數據的實踐性技術,幫助讀者快速入門,通過具體深入的實踐,體會大數據的技術本質特征,領略大數據技術帶來的創新理念,更好地理解和把握信息技術的發展趨勢。
本書定位
(1) 信息發展已步入大數據時代,當前對于大數據還缺乏面向公眾的技術實踐手冊。
(2) 本書的創作團隊有豐富的大數據規劃、開發、運營等經驗,多位作者成功地架構了教育部、科技部、互聯網等大數據架構與分析項目。
(3) 本書的參與者均是部委信息一線工程師、著名外企架構師、國內企業資深高級工程師,所做的理論分析易于學習,實踐具有可操作性。
(4) 本書重點介紹大數據的基礎理論、關鍵技術,以及編程實踐。利用本書,就可以完全搭建并能有效地管理好大數據平臺。
本書特色
(1) 理念先進:均是國內外最新的大數據理念;方便讀者全面了解國內外大數據研究與發展的情況。
(2) 技術領先:參與者均是國內IT人士;采用的平臺均是業界主流開源平臺,涉及大數據常用的HDFS、MapReduce、YARN、Zookeeper、HBase、Hive、Sqoop、Storm、Kafka等技術的介紹與編程使用。
(3) 案例豐富:提供翔實的實例與解決方法,供項目中參考。
(4) 資源齊備:本書涉及的配套下載資源可以從清華大學出版社的網站中下載。
全書關鍵字
大數據、分布式計算、數據倉庫、數據分析、HDFS、MapReduce、YARN、Zookeeper、HBase、Hive、Sqoop、Storm、Kafka。
由于編者的水平有限,書中難免有疏漏和錯誤,希望業內專家和廣大讀者指正。
編 者
目 錄
大數據存儲篇第1章 概述 11.1 什么是大數據 21.2 大數據的技術轉型 31.3 數據分片 41.4 數據一致性 51.4.1 CAP原則 51.4.2 CAP與ACID 71.4.3 BASE原則 81.5 主流大數據技術 81.6 大數據職業方向 101.7 大數據實踐平臺的搭建 101.7.1 初學者模式 101.7.2 物理集群模式 111.7.3 虛擬化集群模式 111.8 小結 12第2章 HDFS文件系統 132.1 HDFS概述 142.1.1 分布式文件系統 142.1.2 HDFS介紹 162.2 HDFS的運行機制 182.2.1 HDFS的結構與組成 182.2.2 HDFS的數據操作 202.2.3 訪問權限 222.2.4 通信協議簇 232.2.5 HDFS的高可用性 242.2.6 集中緩存管理 252.2.7 日志和檢查點 262.2.8 HDFS快照 282.3 HDFS的數據存儲 292.3.1 數據完整性 292.3.2 數據壓縮 302.3.3 序列化 322.4 HDFS的安裝和配置 342.4.1 Hadoop的安裝 342.4.2 HDFS的配置 402.4.3 啟動HDFS 452.5 小結 47第3章 HDFS操作實踐 493.1 HDFS接口與編程 503.1.1 Shell命令 503.1.2 Java接口操作 623.1.3 WebHDFS 693.1.4 其他接口 713.2 操作實踐 733.2.1 文件操作 733.2.2 壓縮與解壓縮 773.3 小結 80大數據計算篇第4章 YARN 814.1 YARN概述 824.2 YARN的主要組成模塊 834.3 YARN的整體設計 834.4 容量調度器 844.4.1 什么是容量調度器 844.4.2 容量調度器的特性 854.4.3 配置RM使用容量調度器 854.5 公平調度器(Fair Scheduler) 864.5.1 什么是公平調度器 864.5.2 分級隊列 874.5.3 公平調度器隊列的設置 874.6 資源管理者(RM)重啟機制 904.6.1 什么是資源管理器重啟 904.6.2 非工作保存RM重啟 904.6.3 工作保存RM重啟 914.6.4 RM重啟配置yarn-site.xml 914.7 資源管理器的高可用性(RM HA) 924.7.1 什么是資源管理器的高可用性 924.7.2 自動故障轉移 924.7.3 客戶端/應用管理器/節點管理器的故障轉移 924.7.4 部署RM HA 934.7.5 配置例子 944.7.6 管理員命令 954.8 節點標簽 954.8.1 節點標簽的特點 954.8.2 節點標簽的屬性 954.8.3 節點標簽的配置 964.8.4 使用節點標簽的調度器配置 964.8.5 節點標簽配置示例 974.8.6 指定應用的節點標簽 974.8.7 節點標簽的監控 984.9 YARN編程 984.9.1 什么是YARN級別編程 984.9.2 YARN的相關接口 994.9.3 編程實踐 994.10 YARN服務注冊 1074.10.1 為什么需要服務注冊 1074.10.2 配置服務注冊 1074.10.3 安全選項 1084.11 小結 108第5章 MapReduce 1095.1 MapReduce概述 1105.1.1 Hadoop MapReduce 1105.1.2 MapReduce的發展史 1105.1.3 MapReduce的使用場景 1115.2 Key-Value結構的特點 1115.2.1 key的設計 1115.2.2 value的設計 1125.3 MapReduce的部署 1125.3.1 軟件準備 1125.3.2 配置文件 1135.3.3 啟動YARN守護進程 1135.4 MapReduce的程序結構 1135.4.1 MR框架的輸入和輸出 1145.4.2 WordCount 1145.5 MapReduce的編程接口 1165.5.1 Mapper接口 1175.5.2 Reducer接口 1175.5.3 Partitioner(分區) 1185.5.4 Counter(計數器) 1185.5.5 job工作機理 1185.5.6 任務提交和監控(JobSubmission and Monitoring) 1215.5.7 任務的輔助文件(TaskSide-Effect Files) 1235.5.8 提交作業到隊列 1235.5.9 MR中的計數器(Counters) 1235.5.10 Profiling 1235.5.11 Debugging 1245.5.12 job Outputs 1245.5.13 忽略壞記錄(SkippingBad Records) 1245.6 MapReduce的命令行 1255.6.1 概述 1255.6.2 用戶命令(User Commands) 1255.6.3 管理員命令(AdministrationCommands) 1275.6.4 YARN-MapReduce的部署 1285.7 WordCount的實現 1295.8 小結 136非關系型數據庫篇第6章 使用HBase 1376.1 HBase基礎 1386.1.1 HBase是什么 1386.1.2 HBase偽分布式部署 1406.1.3 服務的啟動與驗證 1426.1.4 HBase Shell測試 1426.1.5 Web測試 1446.1.6 服務的關閉 1476.2 HBase的架構原理 1476.2.1 組成架構 1476.2.2 數據模型 1516.2.3 物理存儲 1536.3 HBase的命令實踐 1566.3.1 概述 1576.3.2 命名空間 1586.3.3 表管理 1606.4 HBase的數據管理 1666.4.1 數據的添加 1676.4.2 數據的追加 1686.4.3 數據的獲取 1696.4.4 數據統計 1726.4.5 表的掃描 1736.4.6 數據的刪除 1756.4.7 表的重建 1756.5 HBase的集群管理 1776.5.1 集群部署 1776.5.2 自動化腳本 1806.5.3 權限管理 1826.5.4 集群調度 1846.5.5 日志分析 1866.6 小結 187第7章 HBase編程開發 1897.1 HBase的編程接口 1907.1.1 rest編程接口 1907.1.2 thrift接口 1967.1.3 Java API接口 1987.1.4 Java API示例 1997.2 表與命名空間的編程 2027.2.1 表的查看 2037.2.2 表的創建 2067.2.3 表的刪除 2077.2.4 表的修改 2087.2.5 命名空間 2107.3 數據編程 2137.3.1 數據的增加 2147.3.2 單行查詢 2167.3.3 集合查詢 2177.3.4 過濾器 2197.3.5 數據刪除 2217.4 集群與優化編程 2227.4.1 集群管理 2227.4.2 集群監測 2247.4.3 多表與表池 2277.4.4 批處理 2307.4.5 數據遷移 2317.5 小結 234大數據倉庫篇第8章 數據倉庫概論 2358.1 初識數據倉庫 2368.1.1 什么是數據倉庫 2368.1.2 數據倉庫與數據庫 2378.1.3 為什么要有數據倉庫 2398.2 數據倉庫的核心概念 2408.2.1 數據平臺 2408.2.2 數據產品 2418.2.3 商務智能(BI) 2428.2.4 元數據 2428.2.5 OLAP 2428.2.6 ETL 2438.2.7 數據質量 2438.3 數據倉庫中的數據內容劃分 2438.3.1 多個數據倉庫 2438.3.2 典型的數據倉庫分層 2458.3.3 數據集市 2468.4 OLAP 2478.4.1 定義 2478.4.2 維度建模 2488.4.3 事實表 2508.4.4 維度表 2518.5 ETL 2518.5.1 抽取 2528.5.2 轉換 2528.5.3 加載 2548.5.4 ETL元數據 2558.5.5 ETL工具 2568.6 調度和運行 2568.6.1 調度怎么工作 2578.6.2 需要考慮的其他方面 2588.6.3 簡易調度示例 2598.7 數據倉庫的架構 2598.8 數據倉庫的展望 2608.8.1 數據倉庫發展的階段性 2608.8.2 未來的數據倉庫 2628.9 小結 262第9章 Hive 2639.1 初識Hive 2649.1.1 Hive是什么 2649.1.2 Hive的部署 2649.1.3 以MySQL作為Hive的元數據庫 2669.1.4 Hive的體系結構 2689.1.5 Web界面展示 2699.2 Hive命令行接口 2709.2.1 啟動Hive命令行 2709.2.2 可用的命令 2719.3 Hive數據類型與常見的結構 2719.3.1 數據類型 2719.3.2 文件的存儲結構 2739.4 HiveSQL 2749.4.1 數據定義語言DDL 2749.4.2 數據操縱語言DML 2779.5 Hive的自定義函數 2839.5.1 UDF 2849.5.2 UDAF 2869.5.3 UDTF 2899.6 Hive的高級使用 2929.6.1 視圖 2929.6.2 索引 2939.6.3 權限 2949.6.4 Thrift服務 2969.7 使用Hive構建數據倉庫 2989.7.1 原始數據和結構 2989.7.2 數據需求和模型設計 3009.7.3 各層次數據的生成 3019.8 小結 302大數據實時計算篇第10章 Storm實時系統 30310.1 大數據實時系統概述 30410.2 Kafka分布式消息系統 30510.2.1 Kafka是什么 30510.2.2 主題的工作原理 30610.2.3 分布式分區 30710.2.4 生產者、消費者 30710.2.5 數據保證 30810.2.6 Kafka系統的應用場景 30810.2.7 Kafka系統的部署 30910.3 Storm實時處理系統 31610.3.1 概述 31610.3.2 為什么使用Storm 31610.3.3 Storm系統的特點 31710.3.4 Storm系統的工作機制 31810.3.5 Storm的分組方法 31910.3.6 Storm系統的組件 32010.3.7 搭建單點Storm系統 32010.3.8 查看Storm UI 32210.3.9 搭建Storm集群 32210.3.10 Storm系統的操作實踐 32310.3.11 Storm WordCount(寫RDB) 32410.3.12 Storm WordCount(從Kafka讀取數據) 32910.4 小結 331參考文獻 332