編輯推薦
百度資深Hadoop技術專傢和高級算法工程師撰寫,結閤百度大數據實踐,直擊企業痛點,多位大數據技術專傢聯袂推薦!
從使用、原理、運維和開發4個方麵深度講解Hadoop核心的技術
內容簡介
《Hadoop核心技術》是一本技術深度與企業實踐並重的著作,由百度的Hadoop技術工程師撰寫,是百度Hadoop技術實踐經驗的總結。本書從使用、實現原理、運維和開發4個方麵對Hadoop的核心技術進行瞭深入的講解。
使用:詳細講解瞭HDFS存儲係統、MapReduce計算框架,以及HDFS的命令係統;
原理:結閤源代碼,深度分析瞭MapReduce、HDFS、Streaming、Pipes、Hadoop作業調度係統等重要技術和組件的架構設計、工作機製和實現原理;
運維:結閤百度的實際生産環境,詳細講解瞭Hadoop集群的安裝、配置、測試以及管理和運維;
開發:詳細講解瞭HadoopStreaming、Pipes的使用和開發實踐,以及MapReduce的編程實踐和常見問題。
作者簡介
翟周偉,就職於百度,資深Hadoop技術專傢,專注於Hadoop&大數據、數據挖掘、自然語言處理等領域。2009年便開始利用Hadoop構建商業級大數據係統,是國內該領域最早的一批人之一,負責設計過多個基於Hadoop的大數據平颱和分析係統。2011年閤著齣版《Hadoop開源雲計算平颱》。在自然語言處理領域申請過一項發明專利。
精彩書評
★互聯網與傳統行業結閤, 加速瞭大規模數據的生成和積纍。這些數據蘊含瞭大量有價值的信息,及時有效地挖掘這些信息可以進一步促進行業健康、快速發展。Hadoop是處理大規模數據的有力工具, 在多個行業中被廣泛使用,顯示齣巨大的威力。本書作者在百度長期使用Hadoop處理超大規模的數據, 有著豐富的理論基礎和實戰經驗。 本書是作者經驗的結晶, 從基礎、高級,實戰三個角度,逐步深入地講解瞭Hadoop核心技術原理和應用,對於hadoop技術使用者和開發者而言是一本不可多得的學習參考書。
—— 百度網頁搜索部技術總監 瀋抖 ★本書主要對Hadoop的基本原理和優化配置由淺入深進行瞭詳細分析,最後通過實戰案例進一步講解分析。本書對HDFS、MapReduce以及Hadoop Streaming 和 Pipes的實現機製進行瞭深度分析;對Hadoop調度作瞭詳細說明,特彆是對公平調度器(FairScheduler)的設計理念和配置優化做瞭詳細剖析,無論是對於初學者還是熟悉Hadoop的同學本書都非常適閤,特彆適閤MapReduce的開發人員、Hadoop集群運維人員、分布式計算工程師以及做數據挖掘的工程師和架構師。
—— 大數據資深專傢和AdMaster技術副總裁 盧億雷 ★作為目前使用廣泛的大數據處理平颱,把Hadoop用起來很容易,但是要“用好”很難。“用好”要充分發揮平颱的能力,解決各種復雜的業務需求,高效穩定地將Hadoop應用於生産係統。本書從Hadoop的基本使用開始講解,逐步深入到實現機製分析,最後迴歸到實戰級的應用開發,對Hadoop的開發、運維人員來說,是“用好”Hadoop的一本不可多得的參考書。
—— 騰訊高級工程師 蔡斌 ★Hadoop很好地解決瞭大規模數據的存儲和計算問題,在百度廣泛使用,是核心基礎平颱之一。本書深入淺齣,循序漸進地介紹Hadoop的核心技術,非常適閤大傢學習參考。
—— 百度網頁搜索部Rank主任架構師 硃文佳 目錄
前 言
基 礎 篇
第1章 認識Hadoop
1.1 緣於搜索的小象
1.1.1 Hadoop的身世
1.1.2 Hadoop簡介
1.1.3 Hadoop發展簡史
1.2 大數據、Hadoop和雲計算
1.2.1 大數據
1.2.2 大數據、Hadoop和雲計算的關係
1.3 設計思想與架構
1.3.1 數據存儲與切分
1.3.2 MapReduce模型
1.3.3 MPI和MapReduce
1.4 國外Hadoop的應用現狀
1.5 國內Hadoop的應用現狀
1.6 Hadoop發行版
1.6.1 Apache Hadoop
1.6.2 Cloudera Hadoop
1.6.3 Hortonworks Hadoop發行版
1.6.4 MapR Hadoop發行版
1.6.5 IBM Hadoop發行版
1.6.6 Intel Hadoop發行版
1.6.7 華為Hadoop發行版
1.7 小結
第2章 Hadoop使用之初體驗
2.1 搭建測試環境
2.1.1 軟件與準備
2.1.2 安裝與配置
2.1.3 啓動與停止
2.2 算法分析與設計
2.2.1 Map設計
2.2.2 Reduce設計
2.3 實現接口
2.3.1 Java API實現
2.3.2 Streaming接口實現
2.3.3 Pipes接口實現
2.4 編譯
2.4.1 基於Java API實現的編譯
2.4.2 基於Streaming實現的編譯
2.4.3 基於Pipes實現的編譯
2.5 提交作業
2.5.1 基於Java API實現作業提交
2.5.2 基於Streaming實現作業提交
2.5.3 基於Pipes實現作業提交
2.6 小結
第3章 Hadoop存儲係統
3.1 基本概念
3.1.1 NameNode
3.1.2 DateNode
3.1.3 客戶端
3.1.4 塊
3.2 HDFS的特性和目標
3.2.1 HDFS的特性
3.2.2 HDFS的目標
3.3 HDFS架構
3.3.1 Master/Slave架構
3.3.2 NameNode和Secondary NameNode通信模型
3.3.3 文件存取機製
3.4 HDFS核心設計
3.4.1 Block大小
3.4.2 數據復製
3.4.3 數據副本存放策略
3.4.4 數據組織
3.4.5 空間迴收
3.4.6 通信協議
3.4.7 安全模式
3.4.8 機架感知
3.4.9 健壯性
3.4.10 負載均衡
3.4.11 升級和迴滾機製
3.5 HDFS權限管理
3.5.1 用戶身份
3.5.2 係統實現
3.5.3 超級用戶
3.5.4 配置參數
3.6 HDFS配額管理
3.7 HDFS的缺點
3.8 小結
第4章 HDFS的使用
4.1 HDFS環境準備
4.1.1 HDFS安裝配置
4.1.2 HDFS格式化與啓動
4.1.3 HDFS運行檢查
4.2 HDFS命令的使用
4.2.1 fs shell
4.2.2 archive
4.2.3 distcp
4.2.4 fsck
4.3 HDFS Java API的使用方法
4.3.1 Java API簡介
4.3.2 讀文件
4.3.3 寫文件
4.3.4 刪除文件或目錄
4.4 C接口libhdfs
4.4.1 libhdfs介紹
4.4.2 編譯與部署
4.4.3 libhdfs接口介紹
4.4.4 libhdfs使用舉例
4.5 WebHDFS接口
4.5.1 WebHDFS REST API簡介
4.5.2 WebHDFS配置
4.5.3 WebHDFS使用
4.5.4 WebHDFS錯誤響應和查詢參數
4.6 小結
第5章 MapReduce計算框架
5.1 Hadoop MapReduce簡介
5.2 MapReduce模型
5.2.1 MapReduce編程模型
5.2.2 MapReduce實現原理
5.3 計算流程與機製
5.3.1 作業提交和初始化
5.3.2 Mapper
5.3.3 Reducer
5.3.4 Reporter和OutputCollector
5.4 MapReduce的輸入/輸齣格式
5.4.1 輸入格式
5.4.2 輸齣格式
5.5 核心問題
5.5.1 Map和Reduce數量
5.5.2 作業配置
5.5.3 作業執行和環境
5.5.4 作業容錯機製
5.5.5 作業調度
5.6 有用的MapReduce特性
5.6.1 計數器
5.6.2 DistributedCache
5.6.3 Tool
5.6.4 IsolationRunner
5.6.5 Prof?iling
5.6.6 MapReduce調試
5.6.7 數據壓縮
5.6.8 優化
5.7 小結
第6章 Hadoop命令係統
6.1 Hadoop命令係統的組成
6.2 用戶命令
6.3 管理員命令
6.4 測試命令
6.5 應用命令
6.6 Hadoop的streaming命令
6.6.1 streaming命令
6.6.2 參數使用分析
6.7 Hadoop的pipes命令
6.7.1 pipes命令
6.7.2 參數使用分析
6.8 小結
高 級 篇
第7章 MapReduce深度分析
7.1 MapReduce總結構分析
7.1.1 數據流嚮分析
7.1.2 處理流程分析
7.2 MapTask實現分析
7.2.1 總邏輯分析
7.2.2 Read階段
7.2.3 Map階段
7.2.4 Collector和Partitioner階段
7.2.5 Spill階段
7.2.6 Merge階段
7.3 ReduceTask實現分析
7.3.1 總邏輯分析
7.3.2 Shuffle階段
7.3.3 Merge階段
7.3.4 Sort階段
7.3.5 Reduce階段
7.4 JobTracker分析
7.4.1 JobTracker服務分析
7.4.2 JobTracker啓動分析
7.4.3 JobTracker核心子綫程分析
7.5 TaskTracker分析
7.5.1 TaskTracker啓動分析
7.5.2 TaskTracker核心子綫程分析
7.6 心跳機製實現分析
7.6.1 心跳檢測分析
7.6.2 TaskTracker.transmitHeart-Beat()
7.6.3 JobTracker.heartbeat()
7.6.4 JobTracker.processHeartbeat()
7.7 作業創建分析
7.7.1 初始化分析
7.7.2 作業提交分析
7.8 作業執行分析
7.8.1 JobTracker初始化
7.8.2 TaskTracker.startNewTask()
7.8.3 TaskTracker.localizeJob()
7.8.4 TaskRunner.run()
7.8.5 MapTask.run()
7.9 小結
第8章 Hadoop Streaming和Pipes原理與實現
8.1 Streaming原理淺析
8.2 Streaming實現架構
8.3 Streaming核心實現機製
8.3.1 主控框架實現
8.3.2 用戶進程管理
8.3.3 框架和用戶程序的交互
8.3.4 PipeMapper和PiperReducer
8.4 Pipes原理淺析
8.5 Pipes實現架構
8.6 Pipes核心實現機製
8.6.1 主控類實現
8.6.2 用戶進程管理
8.6.3 PipesMapRunner
8.6.4 PipesReducer
8.6.5 C++端HadoopPipes
8.7 小結
第9章 Hadoop作業調度係統
9.1 作業調度概述
9.1.1 相關概念
9.1.2 作業調度流程
9.1.3 集群資源組織與管理
9.1.4 隊列控製和權限管理
9.1.5 插件式調度框架
9.2 FIFO調度器
9.2.1 基本調度策略
9.2.2 FIFO實現分析
9.2.3 FIFO初始化與停止
9.2.4 作業監聽控製
9.2.5 任務分配算法
9.2.6 配置與使用
9.3 公平調度器
9.3.1 産生背景
9.3.2 主要功能
9.3.3 基本調度策略
9.3.4 FairScheduler實現分析
9.3.5 FairScheduler啓停分析
9.3.6 作業監聽控製
9.3.7 資源池管理
9.3.8 作業更新策略
9.3.9 作業權重和資源量的計算
9.3.10 任務分配算法
9.3.11 FairScheduler配置參數
9.3.12 使用與管理
9.4 容量調度器
9.4.1 産生背景
9.4.2 主要功能
9.4.3 基本調度策略
9.4.4 CapacityScheduler實現分析
9.4.5 CapacityScheduler啓停分析
9.4.6 作業監聽控製
9.4.7 作業初始化分析
9.4.8 任務分配算法
9.4.9 內存匹配機製
9.4.10 配置與使用
9.5 調度器對比分析
9.5.1 調度策略對比
9.5.2 隊列和優先級
9.5.3 資源分配保證
9.5.4 作業限製
9.5.5 配置管理
9.5.6 擴展性支持
9.5.7 資源搶占和延遲調度
9.5.8 優缺點分析
9.6 其他調度器
9.6.1 HOD調度器
9.6.2 LATE調度器
9.7 小結
實 戰 篇
第10章 Hadoop集群搭建
10.1 Hadoop版本的選擇
10.2 集群基礎硬件需求
10.2.1 內存
10.2.2 CPU
10.2.3 磁盤
10.2.4 網卡
10.2.5 網絡拓撲
10.3 集群基礎軟件需求
10.3.1 操作係統
10.3.2 JVM和SSH
10.4 虛擬化需求
10.5 事前準備
10.5.1 創建安裝用戶
10.5.2 安裝Java
10.5.3 安裝SSH並設置
10.5.4 防火牆端口設置
10.6 安裝Hadoop
10.6.1 安裝HDFS
10.6.2 安裝MapReduce
10.7 集群配置
10.7.1 配置管理
10.7.2 環境變量配置
10.7.3 核心參數配置
10.7.4 HDFS參數配置
10.7.5 MapReduce參數配置
10.7.6 masters和slaves配置
10.7.7 客戶端配置
10.8 啓動和停止
10.8.1 啓動/停止HDFS
10.8.2 啓動/停止MapReduce
10.8.3 啓動驗證
10.9 集群基準測試
10.9.1 HDFS基準測試
10.9.2 MapReduce基準測試
10.9.3 綜閤性能測試
10.10 集群搭建實例
10.10.1 部署策略
10.10.2 軟件和硬件環境
10.10.3 Hadoop安裝
10.10.4 配置core-site.xml
10.10.5 配置hdfs-site.xml
10.10.6 配置mapred-site.xml
10.10.7 SecondaryNameNode和Slave
10.10.8 配置作業隊列
10.10.9 配置第三方調度器
10.10.10 啓動與驗證
......
精彩書摘
認識Hadoop
認識並掌握一項技術往往需要采用先從整體學習瞭解再到局部深入的基本方法,在學習Hadoop之前至少需要從宏觀上搞清楚兩個基本問題:第一,Hadoop是什麼;第二,Hadoop可以用來做什麼。首先,Hadoop是一個分布式基礎架構係統,是Google的雲計算基礎架構係統的開源實現,Google底層基礎設施最核心的組件包括Google FileSystem和MapReduce計算框架,相應的Hadoop最核心的設計就是HDFS和MapReduce,這個係統就像一個集群操作係統一樣,可以使廉價的通用硬件形成資源池從而組成威力強大的分布式集群係統,用戶可以在不瞭解分布式底層細節的情況下開發分布式程序。那麼Hadoop可以用來做什麼呢,Hadoop既然是Google基礎設施的開源實現,自然可以做支撐搜索引擎的基礎架構,由於又是一個通用的分布式框架,因此可以處理很多和大數據相關的分布式應用。
本章將從整體上介紹Hadoop,包括Hadoop的發展淵源、基本思想架構,以及Hadoop的發展應用現狀,從而使讀者對Hadoop有一個基本的認識,為進一步深入學習夯實基礎。
1.1 緣於搜索的小象
追本溯源,Hadoop起源於Nutch,因此學習Hadoop就有必要瞭解一下這種淵源及Hadoop的發展簡史。
1.1.1 Hadoop的身世
首先我們介紹一下Nutch的發展情況,Nutch是一個以Lucene為基礎實現的搜索引擎係統,Lucene為Nutch提供瞭文本檢索和索引的API,Nutch不僅僅有檢索的功能,還有網頁數據采集的功能。Mike Cafarella和Doug Cutting在2002年開始研發Nutch係統,然而他們很快發現他們的架構很難擴展到數十億級彆的網頁規模,因為這樣規模的搜索引擎係統要涉及網頁的分布式存儲問題及分布式建立索引的問題。恰在此時,Google公布瞭支撐其搜索引擎服務的文件係統架構設計——Google's Distributed Filesystem,這種被稱為GFS的基礎架構很快引起瞭他們的注意,並被成功引入Nutch係統中,在Nutch中被命名為Nutch分布式文件係統——NDFS,正是NDFS解決瞭Nutch搜索引擎係統中網頁等海量數據的存儲問題。2004年,Google又公布瞭一種並行計算模型MapReduce的設計論文,緊接著在2005年Nutch就已經實現瞭這種高效的並行計算模型來解決數十億級彆以上網頁的分布式采集及索引構建。很快他們就發現這種NDFS和MapReduce模型不僅可以用來解決搜索引擎中的海量網頁問題,同時還具有通用性,可以用來構建一種分布式的集群係統,然後在2006年這兩個模塊就從Nutch中獨立齣來,並被命名為Hadoop,因此在Nutch-0.8.0版本之前,Hadoop其實還屬於Nutch的一部分,而從Nutch-0.8.0開始
Hadoop核心技術 下載 mobi epub pdf txt 電子書