Hadoop權威指南(第3版 修訂版) [Hadoop: The Definitive Guide,3rd Edition]

Hadoop權威指南(第3版 修訂版) [Hadoop: The Definitive Guide,3rd Edition] pdf epub mobi txt 電子書 下載 2025

[美] Tom White 著,華東師範大學數據科學與工程學院 譯
圖書標籤:
  • Hadoop
  • 大數據
  • 分布式存儲
  • 分布式計算
  • MapReduce
  • YARN
  • HDFS
  • 數據分析
  • 雲計算
  • Java
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302370857
版次:3
商品編碼:11566298
品牌:清華大學
包裝:平裝
外文名稱:Hadoop: The Definitive Guide,3rd Edition
開本:16開
齣版時間:2015-01-01
用紙:膠版紙
頁數:716
正文語種:中文

具體描述

産品特色

編輯推薦

  新版新特色,內容更詳細,更適閤收藏和找Hadoop之父簽名兒!

內容簡介

  準備好釋放數據的強大潛能瞭嗎?藉助於這本本書,你將學習如何使用ApacheHadoop構建和維護穩定性高、伸縮性強的分布式係統。本書是為程序員寫的,可幫助他們分析任何大小的數據集。本書同時也是為管理員寫的,幫助他們瞭解如何設置和運行Hadoop集群。
  本書通過豐富的案例學習來解釋Hadoop的幕後機理,闡述瞭Hadoop如何解決現實生活中的具體問題。第3版覆蓋Hadoop的新動態,包括新增的MapReduceAPI,以及MapReduce2及其靈活性更強的執行模型(YARN)。

作者簡介

  Tom White,數學王子&Hadoop;專傢。身為Apache Hadoop提交者八年之久,Apache軟件基金會成員之一。全球知名雲計算公司Cloudera的軟件工程師。Tom擁有英國劍橋大學數學學士學位和利茲大學科學哲學碩士學位。

目錄

第1章 初識Hadoop
1.1 數據!數據!
1.2 數據的存儲與分析
1.3 相較於其他係統的優勢
1.3.1 關係型數據庫管理係統
1.3.2 網格計算
1.3.3 誌願計算
1.4 Hadoop發展簡史
1.5 Apache Hadoop和Hadoop生態係統
1.6 Hadoop的發行版本
1.6.1 本書包含的內容
1.6.2 兼容性

第2章 關於MapReduce
2.1 氣象數據集
2.2 使用Unix工具來分析數據
2.3 使用Hadoop來分析數據
2.3.1 map和reduce
2.3.2 Java MapReduce
2.4 橫嚮擴展
2.4.1 數據流
2.4.2 combiner函數
2.4.3 運行分布式的MapReduce作業
2.5 Hadoop Streaming
2.5.1 Ruby版本
2.5.2 Python版本
2.6 Hadoop Pipes

第3章 Hadoop分布式文件係統
3.1 HDFS的設計
3.2 HDFS的概念
3.2.1 數據塊
3.2.2 namenode和datanode
3.2.3 聯邦HDFS
3.2.4 HDFS的高可用性
3.3 命令行接口
3.4 Hadoop文件係統
3.5 Java接口
3.5.1 從Hadoop URL讀取數據
3.5.2 通過FileSystem API讀取數據
3.5.3 寫入數據
3.5.4 目錄
3.5.5 查詢文件係統
3.5.6 刪除數據
3.6 數據流
3.6.1 剖析文件讀取
3.6.2 剖析文件寫入
3.6.3 一緻模型
3.7 通過Flume和Sqoop導入數據
3.8 通過distcp並行復製
3.9 Hadoop存檔
3.9.1 使用Hadoop存檔工具
3.9.2 不足

第4章 Hadoop的I/O操作
4.1 數據完整性
4.1.1 HDFS的數據完整性
4.1.2 LocalFileSystem
4.1.3 ChecksumFileSystem
4.2 壓縮
4.2.1 codec
4.2.2 壓縮和輸入分片
4.2.3 在MapReduce中使用壓縮
4.3 序列化
4.3.1 Writable接口
4.3.2 Writable類
4.3.3 實現定製的Writable集閤
4.3 序列化框架
4.4 Avro
4.4.1 Avro數據類型和模式
4.4.2 內存中的序列化和反序列化
4.4.3 Avro數據文件
4.4.4 互操作性
4.4.5 模式的解析
4.4.6 排列順序
4.4.7 關於Avro MapReduce
4.4.8 使用Avro MapReduce進行排序
4.4.9 其他語言的Avro MapReduce
4.5 基於文件的數據結構
4.5.1 關於SequenceFile
4.5.2 關於MapFile

第5章 MapReduce應用開發
5.1 用於配置的API
5.1.1 資源閤並
5.1.2 可變的擴展
5.2 配置開發環境
5.2.1 管理配置
5.2.2 輔助類GenericOptionsParser,Tool和ToolRunner
5.3 用MRUnit來寫單元測試
5.3.1 關於Mapper
5.3.2 關於Reducer
5.4 本地運行測試數據
5.4.1 在本地作業運行器上運行作業
5.4.2 測試驅動程序
5.5 在集群上運行
5.5.1 打包作業
5.5.2 啓動作業
5.5.3 MapReduce的Web界麵
5.5.4 獲取結果
5.5.5 作業調試
5.5.6 Hadoop日誌
5.5.7 遠程調試
5.6 作業調優
5.7 MapReduce的工作流
5.7.1 將問題分解成MapReduce作業
5.7.2 關於JobControl
5.7.3 關於Apache Oozie

第6章 MapReduce的工作機製
6.1 剖析MapReduce作業運行機製
6.1.1 經典的MapReduce (MapReduce 1)
6.1.2 YARN (MapReduce 2)
6.2 失敗
6.2.1 經典MapReduce中的失敗
6.2.2 YARN中的失敗
6.3 作業的調度
6.3.1 公平調度器
6.3.2 容量調度器
6.4 shuffle和排序
6.4.1 map端
6.4.2 reduce端
6.4.3 配置調優
6.5 任務的執行
6.5.1 任務執行環境
6.5.2 推測執行
6.5.3 關於OutputCommitters
6.5.4 任務JVM重用
6.5.5 跳過壞記錄

第7章 MapReduce的類型與格式
7.1 MapReduce的類型
7.1.1 默認的MapReduce作業
7.1.2 默認的Streaming作業
7.2 輸入格式
7.2.1 輸入分片與記錄
7.2.2 文本輸入
7.2.3 二進製輸入
7.2.4 多個輸入
7.2.5 數據庫輸入(和輸齣)
7.3 輸齣格式
7.3.1 文本輸齣
7.3.2 二進製輸齣
7.3.3 多個輸齣
7.3.4 延遲輸齣
7.3.5 數據庫輸齣

第8章 MapReduce的特性
8.1 計數器
8.1.1 內置計數器
8.1.2 用戶定義的Java計數器
8.1.3 用戶定義的Streaming計數器
8.2 排序
8.2.1 準備
8.2.2 部分排序
8.2.3 全排序
8.2.4 輔助排序
8.3 連接
8.3.1 map端連接
8.3.2 reduce端連接
8.4 邊數據分布
8.4.1 利用JobConf來配置作業
8.4.2 分布式緩存
8.5 MapReduce庫類

第9章 構建Hadoop集群
9.1 集群規範
9.2 集群的構建和安裝
9.2.1 安裝Java
9.2.2 創建Hadoop用戶
9.2.3 安裝Hadoop
9.2.4 測試安裝
9.3 SSH配置
9.4 Hadoop配置
9.4.1 配置管理
9.4.2 環境設置
9.4.3 Hadoop守護進程的關鍵屬性
9.4.4 Hadoop守護進程的地址和端口
9.4.5 Hadoop的其他屬性
9.4.6 創建用戶帳號
9.5 YARN配置
9.5.1 YARN守護進程的重要屬性
9.5.2 YARN守護進程的地址和端口
9.6 安全性
9.6.1 Kerberos和Hadoop
9.6.2 委托令牌
9.6.3 其他安全性改進
9.7 利用基準評測程序測試Hadoop集群
9.7.1 Hadoop基準評測程序
9.7.2 用戶作業
9.8 雲端的Hadoop

第10章 管理Hadoop
10.1 HDFS
10.1.1 永久性數據結構
10.1.2 安全模式
10.1.3 日誌審計
10.1.4 工具
10.2 監控
10.2.1 日誌
10.2.2 度量
10.2.3 Java管理擴展(JMX)
10.3 維護
10.3.1 日常管理過程
10.3.2 委任和解除節點
10.3.3 升級

第11章 關於Pig
11.1 安裝與運行Pig
11.1.1 執行類型
11.1.2 運行Pig程序
11.1.3 Grunt
11.1.4 Pig Latin編輯器
11.2 示例
11.3 與數據庫進行比較
11.4 Pig Latin
11.4.1 結構
11.4.2 語句
11.4.3 錶達式
11.4.4 類型
11.4.5 模式
11.4.6 函數
11.4.7 宏
11.5 用戶自定義函數
11.5.1 過濾UDF
11.5.2 計算UDF
11.5.3 加載UDF
11.6 數據處理操作
11.6.1 數據的加載和存儲
11.6.2 數據的過濾
11.6.3 數據的分組與連接
11.6.4 數據的排序
11.6.5 數據的組閤和切分
11.7 Pig實戰
11.7.1 並行處理
11.7.2 參數代換

第12章 關於Hive
12.1 安裝Hive
12.2 示例
12.3 運行Hive
12.3.1 配置Hive
12.3.2 Hive服務
12.3.3 Metastore
12.4 Hive與傳統數據庫相比
12.4.1 讀時模式vs.寫時模式
12.4.2 更新、事務和索引
12.5 HiveQL
12.5.1 數據類型
12.5.2 操作與函數
12.6 錶
12.6.1 托管錶和外部錶
12.6.2 分區和桶
12.6.3 存儲格式
12.6.4 導入數據
12.6.5 錶的修改
12.6.6 錶的丟棄
12.7 查詢數據
12.7.1 排序和聚集
12.7.2 MapReduce腳本
12.7.3 連接
12.7.4 子查詢
12.7.5 視圖
12.8 用戶定義函數
12.8.1 寫UDF
12.8.2 寫UDAF

第13章 關於HBase
13.1 HBase基礎
13.2 概念
13.3.1 數據模型的"鏇風之旅"
13.3.2 實現
13.3 安裝
13.4 客戶端
13.4.1 Java
13.4.2 Avro、REST和Thrift
13.5 示例
13.5.1 模式
......

精彩書摘

  初識Hadoop
  在古時候,人們用牛來拉重物。當一頭牛拉不動一根圓木時,人們從來沒有考慮過要培育更強壯的牛。同理,我們也不該想方設法打造超級計算機,而應該韆方百計綜閤利用更多計算機來解決問題。
  ——格蕾斯·霍珀(Grace Hopper)
  1.1 數據!數據!
  我們生活在這個數據大爆炸的時代,很難估算全球電子設備中存儲的數據總共有多少。國際數據公司(IDC)曾經發布報告稱,2006年數字世界(digital universe)項目統計得齣全球數據總量為0.18 ZB並預測在2011年將達到1.8 ZB。 1 ZB等於1021字節,等於1000 EB(exabytes),1 000 000 PB (petabytes),等於大傢更熟悉的10億TB(terrabytes)!這相當於全世界每人一個硬盤中保存的數據總量!
  數據“洪流”有很多來源。以下麵列齣的為例:
  紐約證交所每天産生的交易數據多達1 TB
  臉譜網(Facebook)存儲的照片約100 億張,存儲容量約為 1 PB
  傢譜網站Ancestry.com存儲的數據約為2.5 PB
  互聯網檔案館(The Internet Archive)存儲的數據約為2 PB,並以每月至少20 TB的速度持續增長
  瑞士日內瓦附近的大型強子對撞機每年産生的數據約為15 PB
  還有其他大量的數據。但是你可能會想它對自己又有哪些影響呢?地球人都知道,大部分數據都嚴密鎖存在一些大型互聯網公司(如搜索引擎公司)或科學機構與金融機構中。難道所謂的“大數據”隻影響小機構和個人?
  我個人是這樣認為的。以照片為例,我妻子的爺爺是一個骨灰級的攝影愛好者。在成年之後,他一直都在拍照。他的整個相冊,包括普通膠片、幻燈片、35mm膠片,在掃描成高分辨率的圖片之後,大約有10 GB。相比之下,在2008年,我傢用數碼相機拍攝的照片總共有5 GB。對照爺爺的照片生成速度,我傢是他老人傢的35倍!並且,而且這個速度還在不斷增長中,因為現在拍照片真的是越來越容易瞭。
  有句話說得好:“大數據勝於好算法。” 意思是說對於某些應用 (譬如根據以往的偏好來推薦電影和音樂),不論算法有多牛,基於小數據的推薦效果往往都不如基於大量可用數據的一般算法的推薦效果。
  現在,我們已經有瞭大量數據,這是個好消息。但不幸的是,我們必須想方設法好好地存儲和分析這些數據。
  1.2 數據的存儲與分析
  我們遇到的問題很簡單:在硬盤存儲容量多年來不斷提升的同時,訪問速度(硬盤數據讀取速度)卻沒有與時俱進。1990年,一個普通硬盤可以存儲1370 MB數據,傳輸速度為4.4 MB/s ,因此隻需要5分鍾就可以讀完整個硬盤中的數據。20年過去瞭,1 TB的硬盤已然成為主流,但其數據傳輸速度約為100 MB/s,讀完整個硬盤中的數據至少得花2.5個小時。
  讀完整個硬盤中的數據需要更長時間,寫入數據就彆提瞭。一個很簡單的減少讀取時間的辦法是同時從多個硬盤上讀數據。試想,如果我們有100個硬盤,每個硬盤存儲1%的數據,並行讀取,那麼不到兩分鍾就可以讀完所有數據。
  僅使用硬盤容量的1%似乎很浪費。但是我們可以存儲100個數據集,每個數據集1 TB,並實現共享硬盤的讀取。可以想象,用戶肯定很樂於通過硬盤共享來縮短數據分析時間;並且,從統計角度來看,用戶的分析工作都是在不同時間點進行的,所以彼此之間的乾擾並不太大。
  雖然如此,但要對多個硬盤中的數據並行進行讀寫數據,還有更多問題要解決。第一個需要解決的是硬件故障問題。一旦開始使用多個硬件,其中個彆硬件就很有可能發生故障。為瞭避免數據丟失,最常見的做法是復製(replication):係統保存數據的復本(replica),一旦有係統發生故障,就可以使用另外保存的復本。例如,冗餘硬盤陣列(RAID)就是按這個原理實現的,另外,Hadoop的文件係統(HDFS,Hadoop Distributed FileSystem)也是一類,不過它采取的方法稍有不同,詳見後文的描述。
  第二個問題是大多數分析任務需要以某種方式結閤大部分數據來共同完成分析,即從一個硬盤讀取的數據可能需要與從另外99個硬盤中讀取的數據結閤使用。各種分布式係統允許結閤不同來源的數據進行分析,但保證其正確性是一個非常大的挑戰。MapReduce提齣一個編程模型,該模型抽象齣這些硬盤讀寫問題並將其轉換為對一個數據集(由鍵值對組成)的計算。後文將詳細討論這個模型,這樣的計算由map和reduce兩部分組成,而且隻有這兩部分提供對外的接口。與HDFS類似,MapReduce自身也有很高的可靠性。
  簡而言之,Hadoop為我們提供瞭一個可靠的共享存儲和分析係統。HDFS實現數據的存儲,MapReduce實現數據的分析和處理。雖然Hadoop還有其他功能,但HDFS和MapReduce是它的核心價值。
  1.3 相較於其他係統的優勢
  MapReduce看似采用瞭一種蠻力方法。每個查詢需要處理整個數據集或至少一個數據集的絕大部分。但反過來想,這也正是它的能力。MapReduce是一個批量查詢處理器,能夠在閤理的時間範圍內處理針對整個數據集的動態查詢。它改變瞭我們對數據的傳統看法,解放瞭以前隻是保存在磁帶和硬盤上的數據。它讓我們有機會對數據進行創新。以前需要很長時間處理纔能獲得結果的問題,到現在變得頃刻之間就迎刃而解,同時還可以引發新的問題和新的見解。
  例如,Rackspace公司的郵件部門Mailtrust就用Hadoop來處理郵件日誌。他們寫動態查詢,想藉此找齣用戶的地理分布。他們是這麼描述的:“這些數據非常有用,我們每月運行一次MapReduce任務來幫助我們決定哪些Rackspace數據中心需要添加新的郵件服務器。”
  通過整閤好幾百GB的數據,用MapReduce來分析這些數據,Rackspace的工程師從中發現瞭以前從來沒有注意到的數據,甚至還運用這些信息來改善瞭現有的服務。第16章將詳細介紹Rackspace公司內部是如何使用Hadoop的。
  1.3.1 關係型數據庫管理係統
  為什麼不能用數據庫來對大量硬盤上的大規模數據進行批量分析呢?我們為什麼需要MapReduce?
  這兩個問題的答案來自於計算機硬盤的另一個發展趨勢:尋址時間的提升遠遠不敵於傳輸速率的提升。尋址是將磁頭移動到特定硬盤位置進行讀寫操作的過程。它是導緻硬盤操作延遲的主要原因,而傳輸速率取決於硬盤的帶寬。
  如果數據訪問模式中包含大量的硬盤尋址,那麼讀取大量數據集就必然會花更長的時間(相較於流數據讀取模式,流讀取主要取決於傳輸速率)。另一方麵,如果數據庫係統隻更新一小部分記錄,那麼傳統的B樹就更有優勢(關係型數據庫中使用的一種數據結構,受限於尋址的比例)。但數據庫係統如果有大量數據更新時,B樹的效率就明顯落後於MapReduce,因為需要使用“排序/閤並“(sort/merge)來重建數據庫。
  在許多情況下,可以將MapReduce視為關係型數據庫管理係統的補充。兩個係統之間的差異如錶1-1所示。
  MapReduce比較適閤以批處理方式處理需要分析整個數據集的問題,尤其是動態分析。RDBMS適用於點查詢 (point query)和更新,數據集被索引之後,數據庫係統能夠提供低延遲的數據檢索和快速的少量數據更新。MapReduce適閤一次寫入、多次讀取數據的應用,關係型數據庫則更適閤持續更新的數據集。
  錶1-1. 關係型數據庫和MapReduce的比較
  傳統的關係型數據庫 MapReduce
  數據大小 GB PB
  數據存取 交互式和批處理 批處理
  更新 多次讀/寫 一次寫入,多次讀取
  結構 靜態模式 動態模式
  完整性 高 低
  橫嚮擴展 非綫性的 綫性的
  MapReduce和關係型數據庫之間的另一個區彆在於它們所操作的數據集的結構化程度。結構化數據(structured data)是具有既定格式的實體化數據,如XML文檔或滿足特定預定義格式的數據庫錶。這是RDBMS包括的內容。另一方麵,半結構化數據(semi-structured data)比較鬆散,雖然可能有格式,但經常被忽略,所以它隻能作為對數據結構的一般性指導。例如電子錶格,它在結構上是由單元格組成的網格,但是每個單元格內可以保存任何形式的數據。非結構化數據(unstructured data)沒有什麼特彆的內部結構,例如純文本或圖像數據。MapReduce對非結構化或半結構化數據非常有效,因為它是在處理數據時纔對數據進行解釋。換句話說,MapReduce輸入的鍵和值並不是數據固有的屬性,而是由分析數據的人來選的。
  關係型數據往往是規範的(normalized),以保持其數據的完整性且不含冗餘。規範給MapReduce帶來瞭問題,因為它使記錄讀取成為非本地操作,而MapReduce的核心假設之一偏偏就是可以進行(高速的)流讀寫操作。
  Web服務器日誌是典型的非規範化數據記錄(例如,每次都需要記錄客戶端主機全名,這會導緻同一客戶端的全名可能多次齣現),這也是MapReduce非常適用於分析各種日誌文件的原因之一。
  MapReduce是一種綫性的可伸縮編程模型。程序員要寫兩個函數,分彆為map函數和reduce函數,每個函數定義從一個鍵值對集閤到另一個鍵值對集閤的映射。這些函數不必關注數據集及其所用集群的大小,可以原封不動地應用於小規模數據集或大規模的數據集。更重要的是,如果輸入的數據量是原來的兩倍,那麼運行時間也需要兩倍。但如果集群是原來的兩倍,作業的運行速度卻仍然與原來一樣快。SQL查詢一般不具備該特性。
  但是,在不久的將來,關係型數據庫係統和MapReduce係統之間的差異很可能變得模糊。關係型數據庫都開始吸收MapReduce的一些思路(如Aster Data的數據庫和GreenPlum的數據庫),另一方麵,基於MapReduce的高級查詢語言(如Pig和Hive)使傳統數據庫的程序員更容易接受MapReduce係統。
  1.3.2 網格計算
  高性能計算(High Performance Computing,HPC)和網格計算(Grid Computing)組織多年以來一直在研究大規模數據處理,主要使用類似於消息傳遞接口(Message Passing Interface,MPI)的API。從廣義上講,高性能計算采用的方法是將作業分散到集群的各颱機器上,這些機器訪問存儲區域網絡(SAN)所組成的共享文件係統。這比較適用於計算密集型的作業,但如果節點需要訪問的數據量更龐大 (高達幾百GB,MapReduce開始施展它的魔法),很多計算節點就會因為網絡帶寬的瓶頸問題不得不閑下來等數據。
  MapReduc盡量在計算節點上存儲數據,以實現數據的本地快速訪問。 數據本地化(data locality)特性是MapReduce的核心特徵,並因此而獲得良好的性能。意識到網絡帶寬是數據中心環境最珍貴的資源(到處復製數據很容易耗盡網絡帶寬)之後,MapReduce通過顯式網絡拓撲結構來保留網絡帶寬。注意,這種排列方式並沒有降低MapReduce對計算密集型數據進行分析的能力。
  雖然MPI賦予程序員很大的控製權,但需要程序員顯式控製數據流機製,包括用C語言構造底層的功能模塊(例如套接字)和高層的數據分析算法。而MapReduce則在更高層次上執行任務,即程序員僅從鍵值對函數的角度考慮任務的執行,而且數據流是隱含的。
  在大規模分布式計算環境下,協調各個進程的執行是一個很大的挑戰。最睏難的是閤理處理係統的部分失效問題——在不知道一個遠程進程是否掛瞭的情況下——同時還需要繼續完成整個計算。有瞭MapReduce,程序員不必操心係統部分失效的問題,因為它自己的係統實現能夠檢測到並重新執行那些失敗的map或reduce任務。正因為采用的是無共享(shared-nothing)框架,MapReduce纔能夠實現失敗檢測,這意味著各個任務之間是彼此獨立的。 因此,從程序員的角度來看,任務的執行順序無關緊要。相比之下,MPI程序必須顯式管理自己的檢查點和恢復機製,雖然賦予程序員的控製權加大瞭,但編程的難度也增加瞭。
  MapReduce聽起來似乎是一個相當嚴格的編程模型,而且在某種意義上看的確如此:限定用戶使用有特定關聯的鍵值對,mapper和reducer彼此間的協調非常有限(每個mapper將鍵值對傳給reducer)。由此,我們自然聯想到一個問題:能用這個編程模型做一些有用或實際的事情嗎?
  答案是肯定的。MapReduce由榖歌的工程師開發,用於構建搜索引擎的索引,而且,事實已經證明它能夠一次又一次地解決這個問題(MapReduce 的靈感來自於傳統的函數式編程、分布式計算和數據庫社區),但此後,該模型在其他行業還有著很多其他的應用。我們欣喜地發現,有很多算法都可以用 MapReduce來錶達,從圖像圖形分析到各種各樣基於圖像分析的問題,再到機器學習算法。 當然,它也不是包治百病的靈丹妙藥,不能解決所有問題,但它真的是一個很通用的數據處理工具。
  我們將在第16章介紹Hadoop的一些典型應用。
  ......

前言/序言

  數學科普作傢馬丁·加德納(Martin Gardner)曾在一次采訪中談到:
  “在我的世界裏,隻有微積分。這是我的專欄 取得成功奧秘。我花瞭很多時間纔明白如何以大多數讀者都能明白的方式將自己所知道的東西娓娓道來。”
  這也是我對Hadoop的諸多感受。它的內部工作機製非常復雜,是一個集分布式係統理論、實際工程和常識於一體的係統。而且,對門外漢而言,Hadoop更像是“天外來客”。
  但Hadoop其實並沒有那麼讓人費解,抽絲剝繭,我們來看它的“廬山真麵目”。它提供的用於構建分布式係統的每個工具(用於數據存儲、數據分析和協調處理)都非常簡單。如果說這些工具有一個共同的主題,那就是它們更抽象,對偶爾有大量數據需要存儲的程序員、有大量數據需要分析的程序員、有大量計算機需要管理的程序員同時卻沒有足夠的時間、技能或者不想成為分布式係統專傢的程序員提供一套組件,使其能夠利用Hadoop來構建基礎平颱。
  這樣一個簡單、通用的特性集,促使我在開始使用Hadoop時便明顯感覺到Hadoop真的值得推廣。但最開始的時候(2006年初),安裝、配置和Hadoop應用編程是一門高深的藝術。之後,情況確實有所改善:文檔增多瞭;示例增多瞭;碰到問題時,可以嚮大量活躍的郵件列錶發郵件求助。對新手而言,最大的障礙是理解Hadoop有哪些能耐,它擅長什麼,它如何使用。這些問題使我萌發瞭寫作本書的動機。
  Apache Hadoop社區的發展來之不易。在過去的三年多時間裏,Hadoop項目開花結果並孵化齣大約半打子項目。到目前,它在性能、可靠性、可擴展性和可管理性方麵都實現瞭巨大的飛躍。但是,為瞭讓更多人采用Hadoop,我認為我們要讓Hadoop更好用。這需要創建更多新的工具,集成更多的係統,創建新的、改進的API。我希望我自己能夠參與,同時也希望本書能夠鼓勵並吸引其他人也參與Hadoop項目。


駕馭分布式計算的未來:一本關於數據處理和存儲的深度探索 在數據爆炸式增長的時代,如何高效地處理、存儲和分析海量信息,已經成為企業和組織麵臨的核心挑戰。從電子商務的推薦係統到金融領域的風險評估,再到科學研究的基因測序,數據無處不在,其價值也日益凸顯。然而,傳統的數據處理技術在麵對TB甚至PB級彆的數據時,往往顯得力不從心。正是在這樣的背景下,分布式計算技術應運而生,而Hadoop,作為這一領域的佼佼者,無疑成為瞭解構和駕馭海量數據的關鍵。 本書並非一本簡單介紹Hadoop工具使用方法的指南,而是一次對分布式計算原理、架構設計以及實際應用場景的深度探索。它旨在為讀者提供一個全麵而深入的視角,理解Hadoop為何能成為處理大數據事實上的標準,以及如何利用其強大的能力解決現實世界中的復雜問題。我們將從最基礎的概念齣發,逐步深入到Hadoop生態係統的核心組件,揭示其設計的哲學和技術細節,最終引導讀者掌握構建和管理高性能分布式係統的能力。 第一部分:分布式計算的基石 我們將首先迴顧計算模式的演進,從單機處理的局限性,到並行計算的發展,最終抵達分布式計算的必然性。理解“分布式”的真正含義,不僅僅是多颱機器協同工作,更在於如何有效地分割任務、管理數據、處理故障以及保證一緻性。我們將詳細闡述分布式係統設計的核心挑戰,例如: 數據局部性 (Data Locality): 如何將計算任務盡可能地部署在數據所在的節點上,以最大限度地減少網絡傳輸的開銷。這對於大規模數據處理至關重要,直接影響到係統的吞吐量和響應速度。 容錯性 (Fault Tolerance): 在一個由成韆上萬颱機器組成的集群中,硬件故障是常態而非異常。本書將深入探討Hadoop如何通過數據冗餘、任務重試和優雅降級等機製,確保係統的持續可用性和數據的安全性。 可伸縮性 (Scalability): 隨著數據量的增長,係統如何能夠輕鬆地通過添加更多的節點來擴展計算和存儲能力,而無需進行重大的架構調整。我們將分析Hadoop的設計是如何支持這種“彈性”擴展的。 並發與一緻性 (Concurrency and Consistency): 在分布式環境中,多個進程或節點同時訪問和修改數據時,如何保證數據的一緻性是一個棘手的難題。我們將探討Hadoop在不同場景下如何權衡一緻性和可用性。 第二部分:Hadoop分布式文件係統 (HDFS) 的設計哲學 Hadoop的核心是其分布式文件係統HDFS,它是整個生態係統的基石。本書將對HDFS進行抽絲剝繭式的解析,重點關注以下幾個方麵: 架構概覽: 詳細介紹NameNode(命名節點)和DataNode(數據節點)的角色及其交互方式。我們將深入理解NameNode如何管理文件係統的元數據,包括文件和目錄的映射、權限信息等,以及DataNode如何存儲和管理實際的數據塊。 數據塊 (Data Blocks): 為什麼HDFS將文件分割成固定大小的數據塊(通常為128MB或256MB)?這種設計如何簡化分布式存儲的管理,並提高讀取效率?我們將分析塊大小的選擇對係統性能的影響。 副本機製 (Replication): HDFS如何通過為每個數據塊創建多個副本(默認3個)來保證數據的容錯性?我們將探討副本的存儲策略,以及NameNode如何決定副本的放置位置,以最大限度地規避單點故障。 讀寫流程: 詳細闡述客戶端如何嚮HDFS讀寫文件。從客戶端與NameNode交互獲取文件元數據,到與DataNode進行數據塊的實際傳輸,每一步都將進行細緻的講解,並分析其中的優化點。 NameNode的高可用性: 考慮到NameNode是HDFS的單點故障,我們將探討HDFS如何通過Secondary NameNode、Active/Standby NameNode(如HA模式)等機製來提升NameNode的可用性,確保文件係統的持續運行。 HDFS的性能優化: 除瞭基礎架構,我們還將探討一些高級的HDFS性能調優技巧,例如調整塊大小、優化網絡配置、利用緩存等,以在實際應用中榨乾HDFS的性能潛力。 第三部分:MapReduce編程模型與執行引擎 MapReduce是Hadoop最著名也最核心的計算框架,它提供瞭一種簡單而強大的編程模型,用於並行處理大規模數據集。本書將深入剖析MapReduce的工作原理: 編程模型: 詳細講解Map和Reduce兩個核心階段的含義、輸入輸齣以及相互關係。我們將通過豐富的代碼示例,演示如何將實際問題映射到MapReduce任務中。 Shuffle階段: 這是MapReduce執行過程中最關鍵也是最復雜的部分。我們將深入揭示Shuffle的內部機製:Map任務輸齣的鍵值對如何被分組、排序,然後傳遞給Reduce任務。理解Shuffle的細節對於優化MapReduce作業性能至關重要。 JobTracker與TaskTracker: 介紹MapReduce集群的管理組件JobTracker(現已被ResourceManager取代,但理解其概念仍有價值)和TaskTracker(現為NodeManager的一部分)。JobTracker如何調度任務,TaskTracker如何執行任務,以及它們之間的通信機製。 MapReduce的執行流程: 從客戶端提交一個MapReduce作業開始,到JobTracker的接收、任務的分配、TaskTracker的執行、Shuffle過程,再到最終結果的輸齣,我們將描繪齣一幅完整的MapReduce執行圖景。 高級MapReduce編程: 除瞭基礎的Map和Reduce函數,我們還將探討一些高級的MapReduce編程技巧,例如Combiner(局部聚閤)、Partitioner(數據分區)、Comparator(排序)、自定義InputFormat和OutputFormat等,以及如何處理復雜的數據結構和計算邏輯。 MapReduce性能調優: 深入講解影響MapReduce性能的關鍵因素,例如數據傾斜、內存配置、JVM調優、磁盤I/O優化、網絡帶寬利用等,並提供切實可行的調優策略。 第四部分:Hadoop生態係統的擴展與進化 Hadoop不僅僅是HDFS和MapReduce,它已經發展成為一個龐大而活躍的生態係統。本書將介紹Hadoop生態係統中一些最重要且應用最廣泛的組件,以及它們如何協同工作,解決更復雜的計算和分析需求: YARN (Yet Another Resource Negotiator): 作為Hadoop 2.x的革命性創新,YARN將資源管理和任務調度從MapReduce框架中分離齣來,使得Hadoop能夠支持多種計算框架(如Spark、Tez、Storm等)。我們將詳細解析YARN的架構,包括ResourceManager、NodeManager、ApplicationMaster等組件,以及它們如何管理集群資源和應用程序生命周期。 Spark: 作為一個內存計算框架,Spark以其卓越的性能和靈活性,在許多場景下取代瞭MapReduce。我們將探討Spark的RDD(Resilient Distributed Dataset)概念,其數據處理模型,以及與Hadoop的集成方式。 Hive: 作為一個數據倉庫基礎設施,Hive提供瞭SQL查詢Hadoop數據的能力,極大地降低瞭大數據分析的門檻。我們將講解Hive的架構,包括Hive Metastore、HiveServer2,以及HiveQL(SQL方言)的基礎知識。 HBase: 一個分布式的、麵嚮列的NoSQL數據庫,適用於存儲海量、稀疏、非結構化數據。我們將介紹HBase的數據模型、讀寫流程以及其與HDFS的關係。 Zookeeper: 一個分布式協調服務,在Hadoop生態係統中扮演著至關重要的角色,例如實現NameNode的高可用、Master選舉等。我們將簡要介紹Zookeeper的功能和應用。 其他重要組件: 根據需要,我們還將觸及一些其他有價值的組件,例如Flume(數據收集)、Sqoop(RDBMS與Hadoop之間數據導入導齣)、Oozie(工作流調度)等,展示Hadoop生態係統的廣度和深度。 第五部分:實際應用與最佳實踐 理論知識的掌握最終是為瞭解決實際問題。本書將通過一係列真實世界的應用場景,展示如何將Hadoop技術應用於數據分析、機器學習、日誌處理、推薦係統等領域。我們將分享以下方麵的最佳實踐: 集群部署與管理: 從硬件選型、網絡配置到軟件安裝、版本選擇,以及日常的監控、故障排除和升級維護,提供一套實用的集群管理指南。 數據治理與安全: 在處理敏感數據時,安全性和閤規性是重中之重。我們將探討Hadoop的安全模型,包括認證、授權、數據加密等,以及數據治理的最佳實踐。 性能監控與調優: 如何有效地監控Hadoop集群的性能指標,識彆瓶頸,並采取針對性的調優措施。 開發模式與架構設計: 在實際項目中,如何選擇閤適的工具組閤,設計可伸縮、高可用的分布式數據處理架構。 本書旨在成為您在分布式計算領域的一位全麵而深入的嚮導。通過對Hadoop核心原理的透徹理解,您將能夠 confidently 地構建、部署和管理自己的大數據解決方案,駕馭數據驅動的未來。這不僅僅是關於技術,更是關於如何以全新的視角思考數據,以及如何利用強大的工具來釋放數據的潛在價值。

用戶評價

評分

作為一名在數據領域摸爬滾打多年的老兵,我對Hadoop生態係統中的各類工具早已耳熟能詳。然而,《Hadoop權威指南》(第三版修訂版)依舊給瞭我不少驚喜。它並沒有停留在對基礎概念的簡單羅列,而是深入探討瞭Hadoop在實際應用中可能遇到的各種挑戰,並提供瞭行之有效的應對策略。書中關於YARN的講解尤為齣色,清晰地闡釋瞭它如何成為Hadoop的資源管理和作業調度核心,以及如何通過調整YARN的配置來優化集群性能。此外,它還廣泛覆蓋瞭Hadoop生態係統中的其他重要技術,比如Hive、Pig、HBase等,並詳細介紹瞭它們與Hadoop核心的集成方式和最佳實踐。最讓我感到受益匪淺的是,書中並沒有止步於技術介紹,而是融入瞭許多作者在實際項目中積纍的寶貴經驗,比如如何進行大規模集群的部署、監控和故障排除,以及如何設計高效的MapReduce作業。這些實戰性的建議,對於那些希望將Hadoop技術真正落地到企業級應用中的讀者來說,無疑是無價之寶。

評分

說實話,最初選擇這本書,是因為它的名字——《Hadoop權威指南》。我希望找到一本能夠讓我全麵、深入地理解Hadoop的書籍,而這本書沒有讓我失望。從HDFS的分布式文件係統設計原理,到MapReduce的編程模型,再到YARN的資源管理機製,這本書都進行瞭詳盡的闡述。我特彆喜歡書中對Hadoop各個組件之間相互關係的分析,這讓我能夠更宏觀地把握整個Hadoop生態係統。作者的寫作風格非常嚴謹,邏輯清晰,即使是復雜的技術概念,也能被解釋得通俗易懂。每章的結尾都有相關的練習和思考題,這極大地幫助我鞏固所學的知識。而且,本書的修訂版在原有基礎上更新瞭許多內容,加入瞭最新的Hadoop版本特性和發展趨勢,這對於想要跟上技術步伐的讀者來說至關重要。這本書為我構建瞭一個紮實的Hadoop知識體係,讓我能夠自信地麵對各種Hadoop相關的挑戰。

評分

這本書的價值遠超其定價。我是一名資深的數據工程師,在工作中經常需要處理海量數據,而Hadoop無疑是解決這類問題的利器。這本書以其權威性和深度,成為瞭我工作中的得力助手。它不僅提供瞭對Hadoop核心組件(如HDFS、MapReduce、YARN)的深入講解,更包含瞭對Hadoop生態係統中其他重要組件(如Hive、HBase、Spark等)的詳細介紹。書中關於如何優化Hadoop集群性能、如何進行大規模數據處理以及如何解決常見故障的章節,都充滿瞭作者在實踐中積纍的寶貴經驗。我特彆喜歡書中對不同應用場景下Hadoop配置的建議,這對於指導我們在實際工作中如何進行閤理的調優非常有幫助。此外,書中對於Hadoop最新版本特性的更新和闡述,也讓我能夠始終站在技術的前沿。總而言之,這本書是一本不可多得的Hadoop參考書,無論是初學者還是資深從業者,都能從中獲益良多。

評分

這本書簡直就是Hadoop世界的百科全書!作為一名剛開始接觸Hadoop的開發者,我曾一度被其復雜的概念和龐大的生態係統壓得喘不過氣來。然而,當我翻開這本《Hadoop權威指南》(第三版修訂版),我仿佛找到瞭指引方嚮的燈塔。書中從Hadoop的核心組件HDFS和MapReduce講起,循序漸進地剖析瞭它們的架構、工作原理以及關鍵配置。那些曾經讓我頭疼不已的細節,比如HDFS的NameNode和DataNode如何協同工作,MapReduce作業的調度流程,甚至是各個參數背後的深層含義,都在作者清晰的闡述下變得明朗起來。我尤其欣賞的是書中提供瞭大量的代碼示例和實際操作指導,這讓我能夠邊學邊練,將理論知識轉化為實踐能力。每一次遇到問題,這本書幾乎都能提供最直接、最有效的解決方案。它不僅僅是一本技術手冊,更像是一位經驗豐富的老友,耐心地解答著我所有的疑惑,幫助我一步步建立起對Hadoop的深刻理解,讓我能夠自信地投入到實際的項目開發中去。

評分

這本書的深度和廣度都令人驚嘆。對於我這樣一名剛剛開始探索大數據世界的學習者來說,它就像一張詳盡的地圖,指引著我穿梭於Hadoop的復雜世界。書中對HDFS的架構剖析,從NameNode的元數據管理到DataNode的數據塊存儲,再到Client的讀寫操作,每一個環節都講解得非常到位,讓我對數據如何在分布式環境中存儲和管理有瞭清晰的認識。而MapReduce的部分,更是詳細介紹瞭其編程模型、Shuffle過程以及各種優化技巧,讓原本看似抽象的計算過程變得生動具體。我特彆欣賞書中關於“為什麼”和“如何做”的結閤,不僅僅是告訴我們Hadoop是什麼,更是深入淺齣地解釋瞭Hadoop為什麼會這樣設計,以及我們應該如何去使用它。各種圖示和流程圖的運用,讓復雜的概念更加直觀易懂。讀完這本書,我感覺自己仿佛擁有瞭Hadoop的“內功心法”,對這個強大的分布式計算框架有瞭前所未有的自信。

評分

經典之作,很好很喜歡,推薦給大傢。

評分

還沒看,,書的質量沒的說,大數據是未來,技術人加油

評分

商品來瞭看著不錯,還沒用。。

評分

遠沒有過時,思路和設計仍被沿用

評分

不錯!不錯不錯不錯!不錯不錯不錯!不錯不錯

評分

京東很善解人意呢,正想買書呢(不想看電子版的),圖書就起搞活動瞭,很贊,自營送的就是快,質量還可以,一下買瞭十幾本,夠看一年的瞭,彆攔我,我要閉關瞭,哈哈哈

評分

書不錯,該講的都講瞭

評分

老公看的,平時做編程的

評分

不錯不錯不錯不錯不錯不錯

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有