Hadoop是一種分散式資料和計算的框架,在巨量資料處理中應用非常廣泛。MapReduce是一種程式設計模型,Hadoop正是以MapReduce作為核心程式設計模型的。
本書深入淺出、有系統地透過非技術性的表達方式和詳細的原始程式分析,介紹MapReduce 2.0的理論系統、架構和程式設計方法。幫助讀者掌握MapReduce 2.0基礎和特性的基礎上,培養實際程式設計和解決巨量資料處理問題的能力。
強調理論聯繫實際,注重MapReduce程式設計解決現實問題的應用,提供大量程式設計實戰例題供讀者參考。
作者簡介:
王曉華
資深電腦專業講師,教授物件導向程式設計、資料結構、Hadoop程式設計等相關課程,主要研究雲端運算、資料採擷,發表過多篇論文。
作者序
導讀
我們處於一個資料爆炸的時代。每時每刻、各行各業都在產生和累積巨量的資料內容。這些資料中蘊含著生產業務活動、取得商業資訊、做出管理決策的重要資訊。如何處理這些資料並取得有價值的資訊,是許多組織和單位面臨的共同問題。而這個問題的解決又依賴兩項技術,一是能夠對產生的業務資料進行統一管理和綜合,並且能夠無限擴充儲存空間;二是能夠有效處理獲得的巨量資料,在限定時間內獲得處理結果的處理常式。
因此,尋求一個合理可靠的巨量資料處理解決方案是目前資料處理的重點。很多企業領導者把對巨量資料的處理看成網際網路之後,又一個能夠獲得競爭優勢的關鍵性因素,把巨量資料處理能力作為其核心商業競爭力加以發展。這更突顯了巨量資料的戰略意義。
寫作目的
Hadoop 作為應用範圍最為廣泛的巨量資料處理開放原始碼框架,自然引起廣泛的關注,吸引了大量程式設計和開發人員進行相關內容的開發與學習。掌握Hadoop 程式設計基本技能的程式設計人員,成為目前各組織和單位最迫切需要的熱門人才。他們的主要工作就是利用儲存和管理產生的巨量資料撰寫對應的MapReduce 程式對巨量資料進行處理,分析巨量資料中包含的潛在資訊,進行資料資源的管理和對其價值進行進一步開發,為商業機會的取得、管理模式的創新、決策的制定提供對應的支援。隨著越來越多的組織、單位和企業對巨量資料採擷的重視,高層次的程式設計人才必將成為就業市場上搶手的人才。
本書是為MapReduce 程式設計和開發人員,學習最新MapReduce2.0 程式碼而出版的。對MapReduce 2.0 的組成結構與核心部分程式,循序漸進的介紹與說明,以MapReduce 2.0 來源程式為主,從最底層開始介紹新一代的MapReduce 2.0 程式設計模式,多角度、多方面地對MapReduce 2.0 原始程式和功能實現提供翔實的分析,並結合實際案例撰寫大量的應用程式設計,使讀者能夠在開發者的層面掌握MapReduce 2.0 程式的設計方法和技巧,為開發出更強大的MapReduce 2.0 應用打下紮實的基礎。
本書優勢
本書並非單純理論的說明,深入淺出地介紹了MapReduce 2.0 理論系統的全部基礎知識,並在程式撰寫時使用官方推薦的最新MapReduce 2.0 的新型API 進行程式設計,摒棄了已經被明確放棄使用的MapReduce 1.0 程式設計方法,這也是Hadoop 程式設計的大勢所趨。
本書透過深入分析MapReduce 2.0 原始程式,從來源介紹MapReduce 2.0程式設計的優雅,在此基礎上進行對應程式的開發,更進一步地幫助讀者了解和掌握MapReduce 2.0 程式設計的精妙之處。
作者認為,巨量資料處理和分析人才應在掌握基礎和理論的基礎上,重視實際應用程式開發能力和解決問題能力的培養。因此,本書結合作者在工作中遇到的大量實際案例進行分析,抽象化核心模型並列出實際解決方案,全部程式例題均提供了對應程式供讀者學習。
本書內容
本書共分為10 章,所有程式均採用MapReduce 2.0 版本。如果不作特別說明,本書所有MapReduce 都指MapReduce 2.0。
第1 章介紹Hadoop 的基礎知識,初步介紹其應用範圍,說明使用Hadoop對「巨量資料」進行處理是目前資料處理的方向,也是必然趨勢,同時介紹了Hadoop 能為使用者帶來的解決方案和應用效果。
第2 章介紹HDFS 概念、架構,說明HDFS 儲存巨量資料和對資料進行備份的方法,並透過多條程式碼說明使用MapReduce 2.0 附帶的API 進行程式設計的方法。讀者學習完第2 章後,可以使用提供的相關API 進行針對HDFS 的程式設計。
第3 章全面介紹MapReduce 的基本IO 系統,資料傳輸壓縮格式以及基底資料類型。透過原始程式分析向讀者透徹而準確地展示其基本資料結構的組成與應用方式,為實現自訂的MapReduce 資料類型打下紮實的基礎。同時,書中程式極佳地示範了如何在自訂資料類型的基礎上提供進階比較方法的程式設計,為後文對資料排序提供幫助。
第4 章開始進入MapReduce 程式設計部分,也是本書核心內容的開始。詳細介紹MapReduce 的程式設計框架結構,從輸入開始,循序漸進地介紹各個部分處理過程,對核心原始程式展開分析,從專業開發者的角度向讀者剖析MapReduce執行框架結構,透過大量程式進行示範,為原始程式分析提供佐證,並將輸入輸出和執行分成許多部分進行詳細說明。在學完第4 章後,讀者可以撰寫一個簡單的MapReduce 資料處理程式。
第5 章是對MapReduce 測試方法的介紹,首先介紹了以傳統JUnit 為基礎的MRUnit 測試方法;其次著重說明以本機系統為基礎的模擬叢集環境的測試方法;最後向讀者示範將程式上傳叢集進行測試的方法。透過撰寫實例程式說明對叢集環境下輸出資訊歸類和整理的方法,以及透過Web 介面檢視最後內容的方法。
第6 章介紹MapReduce 的執行流程,說明經典的MapReduce 執行流程和新一代的YARN(MapReduce 2.0)執行流程,從載入工作的初始化開始,循序漸進地介紹了各部分執行流程和資料處理的方法,最後對異常結果的處理作了分析和歸納。
第7 章透過劃分多個小節內容向讀者介紹了MapReduce 的進階程式設計內容。此部分主要是程式碼設計內容,旨在教會讀者撰寫自訂的輸入輸出格式,並透過分析原始程式實現MapReduce 程式設計中所涉及的必不可少的自訂輸入輸出格式的設計。
第8 章介紹了更多MapReduce 程式設計的細節和處理方法,進一步能夠
實現更多的程式功能。從計數器開始到對輸出值進行排序和尋找,無一不是MapReduce 程式設計的重要功能和應用。此部分對每個小細節都採用了大量的實例程式作為支撐,進一步向讀者解釋和傳授MapReduce 程式設計的精髓。
第9 章是展望內容,示範了使用MapReduce 進行資料集之間連接處理的方法,說明MapReduce 不僅可以作為一個資料處理程式,同時還可以作為巨量資料採擷的解決方案。此章的最後介紹了資料採擷中最常用的Apriori 的MapReduce程式設計解決方案。
最後一章透過大量的實例程式從多個角度介紹了MapReduce 程式開發的實際案例。其中,「雲端儲存模型」是現在最熱點的儲存解決方案;多文件關鍵字的分析和排序是目前文獻程式開發中必不可少的應用;尋找共同轉載微博是網際網路應用熱點;從資料庫讀取資料給讀者一個完整的從現有資料庫讀取資料並進行處理的解決方案;學生成績排序可作為畢業設計的一項想法。這些都是目前MapReduce 程式設計學習和研究重點。
目標讀者
本書適合於學習MapReduce 2.0 原始程式、MapReduce 2.0 程式設計、資料採擷、機器學習等相關內容的程式設計人員,也可以作為大專院校相關科系的教材。建議在學習本書內容的過程中,理論結合實際,獨立進行一些程式的撰寫,採取開放式的實驗方法,即讀者自行準備實驗資料和實驗環境,解決實際問題,最後達到理論結合實際的目的。在學習過程中,可以檢視第10 章相關內容進行學習。
導讀
我們處於一個資料爆炸的時代。每時每刻、各行各業都在產生和累積巨量的資料內容。這些資料中蘊含著生產業務活動、取得商業資訊、做出管理決策的重要資訊。如何處理這些資料並取得有價值的資訊,是許多組織和單位面臨的共同問題。而這個問題的解決又依賴兩項技術,一是能夠對產生的業務資料進行統一管理和綜合,並且能夠無限擴充儲存空間;二是能夠有效處理獲得的巨量資料,在限定時間內獲得處理結果的處理常式。
因此,尋求一個合理可靠的巨量資料處理解決方案是目前資料處理的重點。很多企業領導者把對巨量資料的處理看成網際網...
目錄
前言
第1章1 大象也會跳舞
1.1 巨量資料時代
1.2 巨量資料分析時代
1.3 簡單、粗暴、有效--這就是Hadoop
1.4 MapReduce 與Hadoop
1.5 看,大象也會跳舞
本章小結
第2章2 大象的肚子--HDFS 檔案系統詳解
2.1 HDFS 基礎詳解
2.1.1 HDFS 設計想法
2.1.2 HDFS 架構與基本存放裝置單元
2.2 HDFS 資料存取流程分析
2.2.1 HDFS 資料儲存位置與複製詳解
2.2.2 HDFS 輸入串流程分析
2.2.3 HDFS 輸出串流程分析
2.3 HDFS 命令列操作詳解
2.3.1 HDFS 中4 個通用的命令列操作
2.3.2 HDFS 檔案18 個基本命令列的操作
2.3.3 HDFS 檔案存取權限詳解
2.4 透過Web 瀏覽HDFS 檔案
2.5 HDFS 介面使用詳解
2.5.1 使用FileSystem API 操作HDFS中的內容
2.5.2 使用FileSystem API 讀取資料詳解
2.5.3 使用FileSystem API 寫入資料詳解
2.6 HDFS 檔案同步與平行處理存取
本章小結
第3章 「 吃下去吐出來」--Hadoop 檔案I/O 系統詳解
3.1 Hadoop 的壓縮類型介紹
3.2 Hadoop 的壓縮類別庫
3.2.1 從一個簡單的實例開始
3.2.2 CompressionCodec 介面
3.2.3 CompressionCodecFactory 類別詳解
3.2.4 壓縮池
3.2.5 在Hadoop 中使用壓縮
3.3 I/O 中序列化類型詳解
3.3.1 Text 類別詳解
3.3.2 IntWritable 類別詳解
3.3.3 ObjectWritable 類別詳解
3.3.4 NullWritable 類別詳解
3.3.5 ByteWritable 類別詳解
3.4 實現自訂的Writable 類型
3.4.1 Writable 介面
3.4.2 WritableComparable 介面與RawComparator 介面
3.4.3 自訂的Writable 類別
3.4.4 為了更快的比較
3.5 Hadoop 中小檔案處理詳解
3.5.1 SequenceFile 詳解
3.5.2 MapFile 詳解
本章小結
第4章 「大象的大腦」--MapReduce 框架結構與原始程式分析
4.1 MapReduce 框架結構與原始程式分析
4.1.1 MapReduce 框架分析與執行過程詳解
4.1.2 MapReduce 輸入輸出與原始程式分析
4.1.3 MapReduce 中Job 類別詳解
4.2 程式設計實戰:經典的MapReduce 單字計數程式
4.2.1 準備工作
4.2.2 MapReduce 過程分析
4.2.3 計數程式的MapReduce 實現
4.2.4 計數程式的main 方法
4.2.5 注意事項
4.2.6 執行結果
4.2.7 Mapper 中的Combiner 詳解
本章小結
第5章5 深入! MapReduce 設定與測試
5.1 MapReduce 環境變數設定詳解
5.1.1 使用XML 設定新的設定檔
5.1.2 修改已有的設定檔
5.1.3 輔助類別ToolRunner、Configured 詳解
5.2 使用MRUnit 對MapReduce 進行測試
5.2.1 MRUnit 簡介與使用
5.2.2 使用MRUnit 完成Mapper 單元測試
5.2.3 使用MRUnit 完成Reduce 單元測試
5.2.4 使用MRUnit 完成MapReduce 單元測試
5.3 在本機磁碟上進行MapReduce 測試
5.3.1 虛擬環境欺騙
5.3.2 在Eclipse 中設定Hadoop 外掛程式
5.3.3 撰寫本機測試程式
5.4 MapReduce 計數器
5.4.1 使用計數器的MapReduce 程式設計
5.4.2 透過Web 介面進行工作分析
5.4.3 透過Web 介面檢視計數器
本章小結
第6章 大象的思考流程--MapReduce 執行流程詳解
6.1 經典MapReduce 工作的工作流程
6.1.1 ClientNode 執行工作的初始化
6.1.2 訊息傳遞
6.1.3 MapReduce 工作的執行
6.1.4 工作的完成與狀態更新
6.2 經典MapReduce 工作例外處理詳解
6.2.1 MapReduce 工作例外的處理方式
6.2.2 MapReduce 工作失敗的處理方式
6.3 經典MapReduce 工作的資料處理過程
6.3.1 Map 端的輸入資料處理過程
6.3.2 Reduce 端的輸入資料處理過程
6.3.3 Java 虛擬機器重用
6.4 MapReduce 2.0(YARN)工作流程詳解
6.4.1 YARN 概述
6.4.2 YARN 工作過程分析
6.4.3 YARN 的例外處理
本章小結
第7章7 更強的大象--MapReduce 進階程式設計( 續)
7.1 MapReduce 程式設計預設格式類型詳解
7.1.1 map 與reduce 方法的預設輸入輸出類型
7.1.2 自訂輸入輸出類型設定
7.1.3 自訂全域類型變數設定要求
7.1.4 預設的MapReduce 程式設定
7.2 InputFormat 輸入格式詳解
7.2.1 輸入記錄與分區
7.2.2 InputFormat 原始程式及執行過程分析
7.2.3 實現自己的RecordReader 類別
7.2.4 自訂的FileInputFormat 類別
7.2.5 一些常用的InputFormat 類別詳解
7.3 OutputFormat 輸出格式詳解
7.3.1 OutputFormat 預設輸出格式
7.3.2 自訂OutputFormat 輸出格式
7.3.3 對Reduce 工作數進行設定
7.3.4 OutputFormat 分區類別Partitioner 詳解
7.4 多種輸入與輸出使用介紹
7.4.1 MultipleInputs 多種輸入方式詳解
7.4.2 MultipleOutputs 多種輸出方式詳解
本章小結
第8章8 MapReduce 相關特性詳解
8.1 MapReduce 計數器
8.1.1 Hadoop 框架內建的計數器
8.1.2 自訂計數器
8.1.3 動態計數器
8.1.4 取得計數器值
8.2 排序與尋找
8.2.1 普通排序規則與尋找
8.2.2 使用MapFile 進行排序與尋找
8.3 對輸出結果的值分組排序
8.3.1 準備工作
8.3.2 對結果進行分組處理
8.3.3 對鍵的二次排序
8.3.4 自訂輸出分組
8.4 程式設計實戰:使用二次排序自動尋找最小值
8.4.1 想法分析
8.4.2 驗證輸入輸出結果
8.4.3 對結果進行二次排序
8.4.4 對結果進行分組
8.4.5 分割處理排序與分組
8.4.6 驗證結果
本章小結
第9章9 啤酒與尿布--MapReduce 連接與資料採擷初步
9.1 對於同樣格式資料進行MapReduce 連接
9.2 對於不同格式資料進行MapReduce 連接
9.3 不能說的秘密—啤酒與尿布
9.3.1 銷售清單的秘密
9.3.2 設計程式
9.3.3 程式執行結果
9.4 資料採擷初步
本章小結
第10章10 MapReduce 實戰程式設計及深度分析
10.1 程式設計實戰:自訂資料庫中讀取資料
10.1.1 準備工作
10.1.2 程式分析
10.1.3 自訂SQLInputFormat
10.1.4 使用自訂程式從資料庫中讀取資料
10.1.5 程式執行及資料分析
10.1.6 使用合併記錄進行效能最佳化
10.2 程式設計實戰:串聯尋找共同轉載微博
10.2.1 應用分析
10.2.2 第一步表轉換
10.2.3 建立關注連接
10.2.4 自訂的OutputFormat .
10.2.5 串聯解決共同轉載微博
10.2.6 效能最佳化及後續處理
10.3 程式設計實戰:雲端儲存模型
10.3.1 應用分析
10.3.2 Tomcat 簡介
10.3.3 設定Tomcat 伺服器
10.3.4 測試Tomcat 伺服器
10.3.5 在Eclipse 中設定Tomcat
10.3.6 建立雲端儲存目錄
10.3.7 取得雲端儲存列表
10.3.8 將檔案上傳至資料雲端儲存中
10.3.9 刪除檔案
10.3.10 下載雲端儲存檔案
10.3.11 程式執行與效能最佳化
10.4 程式設計實戰:多文件相似關鍵字檢索
10.4.1 應用分析
10.4.2 自訂工作處理類別
10.4.3 程式執行及後續分析
10.5 程式設計實戰:學生成績整理與分組
10.5.1 應用分析
10.5.2 自訂的ScoreWritable
10.5.3 自訂的MapReduce
10.5.4 自訂的分組
10.5.5 程式執行結果
10.5.6 採用更多分組類型
本章小結
前言
第1章1 大象也會跳舞
1.1 巨量資料時代
1.2 巨量資料分析時代
1.3 簡單、粗暴、有效--這就是Hadoop
1.4 MapReduce 與Hadoop
1.5 看,大象也會跳舞
本章小結
第2章2 大象的肚子--HDFS 檔案系統詳解
2.1 HDFS 基礎詳解
2.1.1 HDFS 設計想法
2.1.2 HDFS 架構與基本存放裝置單元
2.2 HDFS 資料存取流程分析
2.2.1 HDFS 資料儲存位置與複製詳解
2.2.2 HDFS 輸入串流程分析
2.2.3 HDFS 輸出串流程分析
2.3 HDFS 命令列操作詳解
2.3.1 HDFS 中4 個通用的命令列操作
2.3.2 HDFS 檔案18 個基本命令列的...
購物須知
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。