內容簡介
這是一本Hadoop實用手冊,主要針對實際問題給齣相應的解決方案。《Hadoop實戰手冊》特色是以實踐結閤理論分析,手把手教讀者如何操作,並且對每個操作都做詳細的解釋,對一些重要的知識點也做瞭必要的拓展。全書共包括3個部分,第一部分為基礎篇,主要介紹Hadoop數據導入導齣、HDFS的概述、Pig與Hive的使用、ETL和簡單的數據處理,還介紹瞭MapReduce的調試方式;第二部分為數據分析高級篇,主要介紹高級聚閤、大數據分析等技巧;第三部分為係統管理篇,主要介紹Hadoop的部署的各種模式、添加新節點、退役節點、快速恢復、MapReduce調優等。
《Hadoop實戰手冊》適閤各個層次的Hadoop技術人員閱讀。通過閱讀《Hadoop實戰手冊》,Hadoop初學者可以使用Hadoop來進行數據處理,Hadoop工程師或者數據挖掘工程師可以解決復雜的業務分析,Hadoop係統管理員可以更好地進行日常運維。《Hadoop實戰手冊》也可作為一本Hadoop技術手冊,針對要解決的相關問題,在工作中隨時查閱。
作者簡介
Jonathan R.Owens:軟件工程師,擁有Java和C++技術背景,最近主要從事Hadoop及相關分布式處理技術工作。目前就職於comScore公司,為核心數據處理團隊成員。comScore是一傢知名的從事數字測量與分析的公司,公司使用Hadoop及其他定製的分布式係統對數據進行聚閤、分析和管理,每天處理超過400億單的交易。 Jon Lentz:comScore核心數據處理團隊軟件工程師。他更傾嚮於使用Pig腳本來解決問題。在加入comScore之前,他主要開發優化供應鏈和分配固定收益證券的軟件。 Brian Femiano:本科畢業於計算機科學專業,並且從事相關專業軟件開發工作6年,最近兩年主要利用Hadoop構建高級分析與大數據存儲。他擁有商業領域的相關經驗,以及豐富的政府閤作經驗。他目前就職於Potomac Fusion公司,這傢公司主要從事可擴展算法的開發,並緻力於學習並改進政府領域中最先進和最復雜的數據集。他通過教授課程和會議培訓在公司內部普及Hadoop和雲計算相關的技術。
內頁插圖
目錄
目 錄
第1章 Hadoop分布式文件係統——導入和導齣數據 1
1.1 介紹 1
1.2 使用Hadoop shell命令導入和導齣數據到HDFS 2
1.3 使用distcp實現集群間數據復製 7
1.4 使用Sqoop從MySQL數據庫導入數據到HDFS 9
1.5 使用Sqoop從HDFS導齣數據到MySQL 12
1.6 配置Sqoop以支持SQL Server 15
1.7 從HDFS導齣數據到MongoDB 17
1.8 從MongoDB導入數據到HDFS 20
1.9 使用Pig從HDFS導齣數據到MongoDB 23
1.10 在Greenplum外部錶中使用HDFS 24
1.11 利用Flume加載數據到HDFS中 26
第2章 HDFS 28
2.1 介紹 28
2.2 讀寫HDFS數據 29
2.3 使用LZO壓縮數據 31
2.4 讀寫序列化文件數據 34
2.5 使用Avro序列化數據 37
2.6 使用Thrift序列化數據 41
2.7 使用Protocol Buffers序列化數據 44
2.8 設置HDFS備份因子 48
2.9 設置HDFS塊大小 49
第3章 抽取和轉換數據 51
3.1 介紹 51
3.2 使用MapReduce將Apache日誌轉換為TSV格式 52
3.3 使用Apache Pig過濾網絡服務器日誌中的爬蟲訪問量 54
3.4 使用Apache Pig根據時間戳對網絡服務器日誌數據排序 57
3.5 使用Apache Pig對網絡服務器日誌進行會話分析 59
3.6 通過Python擴展Apache Pig的功能 61
3.7 使用MapReduce及二次排序計算頁麵訪問量 62
3.8 使用Hive和Python清洗、轉換地理事件數據 67
3.9 使用Python和Hadoop Streaming執行時間序列分析 71
3.10 在MapReduce中利用MultipleOutputs輸齣多個文件 75
3.11 創建用戶自定義的Hadoop Writable及InputFormat讀取地理事件數據 78
第4章 使用Hive、Pig和MapReduce處理常見的任務 85
4.1 介紹 85
4.2 使用Hive將HDFS中的網絡日誌數據映射為外部錶 86
4.3 使用Hive動態地為網絡日誌查詢結果創建Hive錶 87
4.4 利用Hive字符串UDF拼接網絡日誌數據的各個字段 89
4.5 使用Hive截取網絡日誌的IP字段並確定其對應的國傢 92
4.6 使用MapReduce對新聞檔案數據生成n-gram 94
4.7 通過MapReduce使用分布式緩存查找新聞檔案數據中包含關鍵詞的行 98
4.8 使用Pig加載一個錶並執行包含GROUP BY的SELECT操作 102
第5章 高級連接操作 104
5.1 介紹 104
5.2 使用MapReduce對數據進行連接 104
5.3 使用Apache Pig對數據進行復製連接 108
5.4 使用Apache Pig對有序數據進行歸並連接 110
5.5 使用Apache Pig對傾斜數據進行傾斜連接 111
5.6 在Apache Hive中通過map端連接對地理事件進行分析 113
5.7 在Apache Hive通過優化的全外連接分析地理事件數據 115
5.8 使用外部鍵值存儲(Redis)連接數據 118
第6章 大數據分析 123
6.1 介紹 123
6.2 使用MapReduce和Combiner統計網絡日誌數據集中的獨立IP數 124
6.3 運用Hive日期UDF對地理事件數據集中的時間日期進行轉換與排序 129
6.4 使用Hive創建基於地理事件數據的每月死亡報告 131
6.5 實現Hive用戶自定義UDF用於確認地理事件數據的來源可靠性 133
6.6 使用Hive的map/reduce操作以及Python標記最長的無暴力發生的時間區間 136
6.7 使用Pig計算Audioscrobbler數據集中藝術傢之間的餘弦相似度 141
6.8 使用Pig以及datafu剔除Audioscrobbler數據集中的離群值 145
第7章 高級大數據分析 147
7.1 介紹 147
7.2 使用Apache Giraph計算PageRank 147
7.3 使用Apache Giraph計算單源最短路徑 150
7.4 使用Apache Giraph執行分布式寬度優先搜索 158
7.5 使用Apache Mahout計算協同過濾 165
7.6 使用Apache Mahout進行聚類 168
7.7 使用Apache Mahout進行情感分類 171
第8章 調試 174
8.1 介紹 174
8.2 在MapReduce中使用Counters監測異常記錄 174
8.3 使用MRUnit開發和測試MapReduce 177
8.4 本地模式下開發和測試MapReduce 179
8.5 運行MapReduce作業跳過異常記錄 182
8.6 在流計算作業中使用Counters 184
8.7 更改任務狀態顯示調試信息 185
8.8 使用illustrate調試Pig作業 187
第9章 係統管理 189
9.1 介紹 189
9.2 在僞分布模式下啓動Hadoop 189
9.3 在分布式模式下啓動Hadoop 192
9.4 添加一個新節點 195
9.5 節點安全退役 197
9.6 NameNode故障恢復 198
9.7 使用Ganglia監控集群 199
9.8 MapReduce作業參數調優 201
第10章 使用Apache Accumulo進行持久化 204
10.1 介紹 204
10.2 在Accumulo中設計行鍵存儲地理事件 205
10.3 使用MapReduce批量導入地理事件數據到Accumulo 213
10.4 設置自定義字段約束Accumulo中的地理事件數據 220
10.5 使用正則過濾器限製查詢結果 225
10.6 使用SumCombiner計算同一個鍵的不同版本的死亡數總和 228
10.7 使用Accumulo實行單元級安全的掃描 232
10.8 使用MapReduce聚集Accumulo中的消息源 237
前言/序言
Hadoop實戰手冊——解鎖大數據價值的鑰匙 在信息爆炸的時代,數據以前所未有的速度生成、積纍和傳播。從社交媒體的互動到物聯網設備的傳感器數據,再到商業交易的每一次點擊,海量數據已成為企業決策、科學研究和技術創新的核心驅動力。然而,如何有效地收集、存儲、處理和分析這些規模龐大、類型多樣的數據,成為瞭擺在我們麵前的巨大挑戰。傳統的數據處理技術在麵對PB甚至EB級彆的數據時,顯得力不從心。正是為瞭應對這一挑戰,Hadoop應運而生,並迅速發展成為大數據領域的事實標準。 《Hadoop實戰手冊》正是為幫助您深入理解並熟練掌握Hadoop這一強大的分布式計算框架而精心編寫的。本書並非簡單地羅列Hadoop的各個組件,而是緻力於為您提供一套係統、實用且深入的實踐指南,讓您能夠真正地駕馭Hadoop,挖掘海量數據背後的寶藏。 本書內容概覽: 本書從Hadoop的基礎概念入手,逐步深入到核心組件的原理與實踐,再到上層生態係統的應用,旨在構建一個全麵、完整的Hadoop知識體係。 第一部分:Hadoop基礎與核心組件 大數據時代的挑戰與Hadoop的崛起: 我們將首先探討當前大數據麵臨的痛點,分析傳統技術方案的局限性,並闡述Hadoop如何憑藉其分布式存儲和計算的特性,成為解決這些挑戰的理想方案。您將理解Hadoop的分布式哲學,以及它如何通過“數據即代碼”的理念,顛覆傳統數據處理模式。 Hadoop分布式文件係統 (HDFS) 詳解: HDFS是Hadoop生態係統的基石,負責海量數據的分布式存儲。本章將深入剖析HDFS的架構,包括NameNode、DataNode、Secondary NameNode的角色與協作機製,以及塊(Block)的存儲方式、副本策略、故障恢復機製等。您將學習到如何進行HDFS的安裝配置,掌握命令行工具和API的使用,瞭解HDFS的寫操作、讀操作、文件元數據管理以及性能優化技巧。我們將詳細講解HDFS的容錯機製,確保數據在節點故障時依然安全可靠。 Yet Another Resource Negotiator (YARN) 剖析: YARN是Hadoop 2.x引入的資源管理和作業調度框架,它將Hadoop的資源管理和計算框架進行瞭解耦,極大地提升瞭Hadoop集群的靈活性和效率。本章將詳細講解YARN的架構,包括ResourceManager、NodeManager、ApplicationMaster和Container等核心組件的功能。您將學習到YARN的工作流程,理解資源申請、分配、監控的整個過程。此外,我們還將探討YARN的多種調度器,如FIFO、Capacity Scheduler和Fair Scheduler,以及如何根據實際需求進行配置和優化。 MapReduce編程模型: MapReduce是Hadoop的核心計算引擎,它是一種簡單而強大的分布式編程模型,能夠高效地處理大規模數據集。本章將從理論層麵深入講解MapReduce的設計理念,包括Map階段、Shuffle階段和Reduce階段的工作原理。您將學習到如何使用Java API編寫MapReduce程序,理解InputFormat、OutputFormat、Mapper、Reducer、Combiner、Partitioner等關鍵接口。通過豐富的代碼示例,您將掌握如何處理各種數據類型,進行數據過濾、轉換、聚閤等常見操作,並學習MapReduce作業的提交、監控與調優。 第二部分:Hadoop生態係統深入探索 Hive:大數據上的SQL接口: Hive是一個構建在Hadoop之上的數據倉庫工具,它提供瞭一種類似於SQL的查詢語言——HiveQL,使得熟悉SQL的用戶能夠輕鬆地在Hadoop集群上進行數據分析。本章將介紹Hive的架構,包括Metastore、HiveServer2、HiveQL解析器等。您將學習到如何創建和管理Hive錶,理解HiveQL與MapReduce的轉換過程,並掌握各種HiveQL語句的編寫,包括數據查詢、插入、刪除、更新等。我們將重點講解Hive的數據存儲格式(如TextFile, SequenceFile, ORC, Parquet)和壓縮格式,以及Hive的優化技巧,如分區錶、分桶錶、索引、謂詞下推和查詢優化器。 HBase:分布式NoSQL數據庫: HBase是一個開源的、分布式的、非關係型(NoSQL)數據庫,它運行在HDFS之上,提供瞭對大數據集實時、隨機讀寫的能力。本章將深入講解HBase的架構,包括HMaster、RegionServer、ZooKeeper、HDFS在HBase中的作用。您將學習到HBase的數據模型(行鍵、列族、列限定符、時間戳),掌握HBase的CRUD操作,瞭解HBase的協處理器(Coprocessor)用於實現更底層的邏輯。我們還將探討HBase的讀寫流程、數據存儲(HFile)、Compaction、WAL(Write-Ahead Log)等核心機製,以及如何進行HBase集群的部署、運維和性能調優。 ZooKeeper:分布式協調服務: ZooKeeper是Hadoop集群中不可或缺的分布式協調服務。它為分布式應用提供瞭一緻性、高可用性的協調機製,例如分布式鎖、配置管理、服務發現等。本章將講解ZooKeeper的架構,包括Client、Server、Ensemble、ZNode等概念。您將學習到ZooKeeper的基本操作,如創建、讀取、更新、刪除ZNode,以及Watcher機製。我們將重點介紹ZooKeeper在Hadoop、HBase、Kafka等組件中的應用,以及如何利用ZooKeeper構建可靠的分布式係統。 Spark:新一代大數據處理引擎: Apache Spark是一個快速、通用的大數據處理引擎,它提供瞭比MapReduce更快的執行速度和更豐富的API,支持批處理、流處理、機器學習和圖計算。本章將深入講解Spark的核心概念,包括RDD(Resilient Distributed Dataset)、Spark SQL、Spark Streaming、MLlib和GraphX。您將學習到Spark的執行模型,理解Stage、Task、DAG等概念。我們將重點介紹Spark的API使用,包括Scala、Java和Python,並通過實際案例演示如何在Spark上進行復雜的數據處理和分析。本書還會重點講解Spark的調優技巧,包括內存管理、Shuffle優化、數據序列化等。 第三部分:Hadoop集群的部署、管理與應用 Hadoop集群部署與配置: 本章將提供詳細的Hadoop集群部署指南,涵蓋單機模式、僞分布式模式和完全分布式模式的搭建步驟。您將學習到如何使用Cloudera Manager、Apache Ambari等集群管理工具,或者手動配置Hadoop的各個核心組件。我們將詳細講解NameNode、ResourceManager、HBase Master、Hive Metastore等服務的啓動和管理,以及HDFS、YARN、HBase、Hive等服務的配置參數優化。 Hadoop集群監控與維護: 一個穩定可靠的大數據平颱離不開持續的監控和精細的維護。本章將介紹Hadoop集群的常用監控工具,如Ganglia、Nagios,以及Hadoop Web UI提供的監控指標。您將學習如何識彆和診斷集群中的常見問題,如性能瓶頸、節點故障、磁盤空間不足等,並掌握相應的處理方法。我們還將探討Hadoop集群的升級、備份與恢復策略。 Hadoop生態係統的其他重要組件: 除瞭上述核心組件,Hadoop生態係統還包括許多其他強大的工具。本章將簡要介紹這些組件,如: Sqoop: 用於在Hadoop與關係型數據庫之間導入導齣數據。 Flume: 用於采集、聚閤和傳輸大量的日誌數據。 Kafka: 分布式發布-訂閱消息係統,是實時數據流處理的關鍵組件。 Oozie: 用於編排和調度Hadoop作業的工作流調度器。 Mahout/Spark MLlib: 用於大數據機器學習的算法庫。 Elasticsearch/Solr: 分布式搜索和分析引擎,常與Hadoop結閤使用。 您將瞭解這些工具的功能和應用場景,以及它們如何與其他Hadoop組件協同工作,構建更強大的數據解決方案。 實際案例分析與應用場景: 為瞭幫助您將所學知識融會貫通,《Hadoop實戰手冊》的最後部分將通過多個貼近實際的案例,展示Hadoop在不同行業和場景下的應用。我們將涵蓋: 電商數據分析: 用戶行為分析、商品推薦係統、欺詐檢測。 金融行業大數據: 風險評估、反洗錢、客戶畫像。 物聯網(IoT)數據處理: 傳感器數據分析、設備狀態監控、預測性維護。 社交媒體分析: 輿情監控、用戶情感分析、話題發現。 日誌分析與監控: 應用性能監控、安全審計、異常檢測。 通過這些案例,您將能夠清晰地看到Hadoop如何解決實際業務問題,並獲得構建類似解決方案的靈感和指導。 本書特點: 理論與實踐並重: 本書不僅深入講解Hadoop各組件的原理,更強調動手實踐。每個核心概念都配有詳細的代碼示例和操作步驟,讓您能夠邊學邊練。 由淺入深,循序漸進: 從Hadoop的基礎知識開始,逐步引入復雜的概念和高級特性,確保不同基礎的讀者都能輕鬆入門並不斷深入。 貼近實戰,案例豐富: 引入大量實際應用場景和行業案例,幫助您理解Hadoop的價值,並為您的項目提供藉鑒。 權威性與前沿性: 緊跟Hadoop技術的發展趨勢,涵蓋瞭Spark等新興技術,為您提供最具價值的學習內容。 圖文並茂,易於理解: 大量使用圖示和錶格,清晰地展示Hadoop的架構和工作流程,降低理解難度。 適閤讀者: 對大數據技術感興趣的開發者、數據工程師、架構師。 希望掌握Hadoop分布式計算框架,提升數據處理能力的IT從業人員。 需要搭建、管理和維護Hadoop集群的係統管理員。 希望利用大數據分析驅動業務增長的企業決策者和産品經理。 在校學生和科研人員,希望深入瞭解大數據技術的研究者。 《Hadoop實戰手冊》將是您踏入大數據世界、解鎖數據價值的得力助手。無論您是初學者還是有一定經驗的從業者,本書都將為您提供堅實的基礎、實用的技能和廣闊的視野。讓我們一起,用Hadoop駕馭數據的洪流,創造無限可能!