亞寵展、全球寵物產業風向標——亞洲寵物展覽會深度解析
1261
2025-04-01
Hadoop權威指南
大數據的存儲與分析(第4版)
Hadoop: The Definitive Guide Storage and Analysis at Internet Scale
Tom White? 著
王? 海?? 華? 東? ?劉? 喻 ??呂粵海? 譯
BeijingCambridgeFarnhamK?lnSebastopol***
O’Reilly Media, Inc. 授權清華大學出版社出版
O’Reilly Media, Inc.介紹
O’Reilly Media通過圖書、雜志、在線服務、調查研究和會議等方式傳播創新知識。自1978年開始,O’Reilly一直都是前沿發展的見證者和推動者。超級極客們正在開創著未來,而我們關注真正重要的技術趨勢——通過放大那些“細微的信號”來刺激社會對新科技的應用。作為技術社區中活躍的參與者,O’Reilly的發展充滿了對創新的倡導、創造和發揚光大。
O’Reilly為軟件開發人員帶來革命性的“動物書”;創建第一個商業網站(GNN);組織了影響深遠的開放源代碼峰會,以至于開源軟件運動以此命名;創立了Make雜志,從而成為DIY 革命的主要先鋒;公司一如既往地通過多種形式締結信息與人的紐帶。O’Reilly的會議和峰會集聚了眾多超級極客和高瞻遠矚的商業領袖,共同描繪出開創新產業的革命性思想。作為技術人士獲取信息的選擇,O’Reilly現在還將先鋒專家的知識傳遞給普通的計算機用戶。無論是通過書籍出版,還是在線服務或者面授課程,每一項O’Reilly的產品都反映了公司不可動搖的理念——信息是激發創新的力量。
“O’Reilly Radar 博客有口皆碑。”
——Wired
“O’Reilly 憑借一系列(真希望當初我也想到了)非凡想法建立了數百萬美元的業務?!?/p>
——Business 2.0
“O’Reilly Conference 是聚集關鍵思想領袖的絕對典范。”
——CRN
“一本O’Reilly 的書就代表一個有用、有前途、需要學習的主題。”
——Irish Times
“Tim是一位特立獨行的人,他不光放眼于最長遠、最廣闊的視野并且切實地按照尤吉·貝拉的建議去做了:‘如果你在路上遇到岔路口,就選擇走小路?!仡欉^去Tim 似乎每一次都選擇了小路,而且有幾次都是一閃即逝的機會,盡管大路也不錯?!?/p>
——Linux Journal
推薦序一
Doug Cutting@加州院內小屋
Hadoop起源于Nutch項目。我們幾個人有一段時間一直在嘗試構建一個開源的Web搜索引擎,但始終無法有效地將計算任務分配到多臺計算機上,即使就只是屈指可數的幾臺。直到谷歌發表GFS和MapReduce的相關論文之后,我們的思路才清晰起來。他們設計的系統已經可以精準地解決我們在Nutch項目中面臨的困境。于是,我們(兩個半天工作制的人)開始嘗試重建這些系統,并將其作為Nutch的一部分。
我們終于讓Nutch可以在20臺機器上平穩運行,但很快又意識一點:要想應對大規模的Web數據計算,還必須得讓Nutch能在幾千臺機器上運行,不過這個工作遠遠不是兩個半天工作制的開發人員能夠搞定的。
差不多就在那個時候,雅虎也對這項技術產生了濃厚的興趣并迅速組建了一個開發團隊。我有幸成為其中一員。我們剝離出Nutch的分布式計算模塊,將其稱為“Hadoop”。在雅虎的幫助下,Hadoop很快就能夠真正處理海量的Web數據了。
從2006年起,Tom White就開始為Hadoop做貢獻。很早以前,我便通過他的一篇非常優秀的Nutch論文認識了他。在這篇論文中,他以一種優美的文風清晰地闡述復雜的思路。很快,我還得知他開發的軟件一如他的文筆,優美易懂。
從一開始,Tom對Hadoop所做的貢獻就體現出他對用戶和項目的關注。與大多數開源貢獻者不同,Tom并沒有興致勃勃地調整系統使其更符合自己個人的需要,而是盡可能地使其方便所有人使用。
最開始,Tom專攻如何使Hadoop在亞馬遜的EC2和S3服務上高效運行。隨后,他轉向解決更廣泛的各種各樣的難題,包括如何改進MapReduce API,如何增強網站特色,如何精心構思對象序列化框架,如此等等,不一而舉。在所有這些工作中,Tom都非常清晰、準確地闡明了自己的想法。在很短的時間里,Tom就贏得大家的認可,擁有Hadoop提交者(committer)的權限并很快順理成章地成為Hadoop項目管理委員會的成員。
現在的Tom,是Hadoop開發社區中受人尊敬的資深成員。他精通Hadoop項目的若干個技術領域,但他更擅長于Hadoop的普及,使其更容易理解和使用。
基于我對Tom的這些了解,所以當我得知Tom打算寫一本Hadoop的書之時,別提有多高興了。是的,誰比他更有資格呢?!現在,你們有機會向這位年青的大師學習Hadoop,不單單是技術,還有一些必知必會的常識,以及他化繁為簡、通俗易懂的寫作風格。
前言
數學科普作家馬丁·加德納(Martin Gardner)曾經在一次采訪中談到:
“在我的世界里,只有微積分。這是我的專欄取得成功的奧秘。我花了很多時間才明白如何以大多數讀者都能明白的方式將自己所知道的東西娓娓道來?!?[①]
這也是我對Hadoop的諸多感受。它的內部工作機制非常復雜,是一個集分布式系統理論、實際工程和常識于一體的系統。而且,對門外漢而言,Hadoop更像是“天外來客”。
但Hadoop其實并沒有那么讓人費解,抽絲剝繭,我們來看看它的“廬山真面目”。Hadoop提供的用于處理大數據的工具都非常簡單。如果說這些工具有一個共同的主題,那就是它們更抽象,為(有大量數據需要存儲和分析卻沒有足夠的時間、技能或者不想成為分布式系統專家的)程序員提供一套組件,使其能夠利用Hadoop來構建一個處理數據的基礎平臺。
這樣一個簡單、通用的特性集,促使我在開始使用Hadoop時便明顯感覺到Hadoop真的值得推廣。但最開始的時候(2006年初),安裝、配置和Hadoop應用編程是一門高深的藝術。之后,情況確實有所改善:文檔增多了;示例增多了;碰到問題時,可以向大量活躍的郵件列表發郵件求助。對新手而言,最大的障礙是理解Hadoop有哪些能耐,它擅長什么,它如何使用。這些問題使我萌發了寫作本書的動機。
Apache Hadoop社區的發展來之不易。從本書的第1版發行以來,Hadoop項目如雨后春筍般發展興旺?!按髷祿币殉蔀榇蠹叶炷茉數拿~術語。[②]當前,軟件在可用性、性能、可靠性、可擴展性和可管理性方面都實現了巨大的飛躍。在Hadoop平臺上搭建和運行的應用增長迅猛。事實上,對任何一個人來說,跟蹤這些發展動向都很困難。但為了讓更多的人采用Hadoop,我認為我們要讓Hadoop更好用。這需要創建更多新的工具,集成更多的系統,創建新的增強型API。我希望自己能夠參與,同時也希望本書能夠鼓勵并吸引其他人也參與Hadoop項目。
說明
在文中討論特定的Java類時,我常常會忽略包的名稱以免啰嗦雜亂。如果想知道一個類在哪個包內,可以查閱Hadoop或相關項目的Java API 文檔(Apache Hadoop主頁http://hadoop.apache.org上有鏈接可以訪問)。如果使用IDE編程,其自動補全機制(也稱“自動完成機制”)能夠幫助你找到你需要的東西。
與此類似,盡管偏離傳統的編碼規范,但如果要導入同一個包的多個類,程序可以使用星號通配符來節省空間(例如import org.apache.hadoop. io.*)。
本書中的示例代碼可以從本書網站下載,網址為http://www.hadoopbook.com/??梢愿鶕W頁上的指示獲取本書示例所用的數據集以及運行本書示例的詳細說明、更新鏈接、額外的資源與我的博客。
第4版新增內容
第4版的主題是Hadoop 2。Hadoop 2系列發行版本是當前應用最活躍的系列,且包含Hadoop的最穩定的版本。
第4版新增的章節包括YARN(第4章)、Parquet(第13章)、Flume(第14章)、Crunch(第18章)和Spark(第19章)。此外,為了幫助讀者更方便地閱讀本書,第1章新增了一節“本書包含的內容”(參見1.7節)。
第4版包括兩個新的實例學習(第22章和第23章):一個是關于Hadoop如何應用于醫療健康系統,另一個是關于將Hadoop技術如何應用于基因數據處理。舊版本中的實例學習可以在線查到,網址為http:/bit.ly/hadoop_tdg_prev。
為了和Hadoop最新發行版本及其相關項目同步,第4版對原有章節進行了修訂、更新和優化。
第3版新增內容
第3版概述Apache Hadoop 1.x(以前的0.20)系列發行版本,以及新近的0.22和2.x(以前的0.23)系列。除了少部分(文中有說明)例外,本書包含的所有范例都在這些版本上運行過。
第3版的大部分范例代碼都使用了新的MapReduce API。因為舊的API仍然應用很廣,所以文中在討論新的API時我們還會繼續討論它,使用舊API的對應范例代碼可以到本書的配套網站下載。
Hadoop 2.0最主要的變化是新增的MapReduce運行時MapReduce 2,它建立在一個新的分布式資源管理系統之上,該系統稱為YARN。針對建立在YARN之上的MapReduce,第3版增加了相關的介紹,包括它的工作機制(第7章)及如何運行(第10章)。
第3版還增加了更多對MapReduce的介紹,包括豐富的開發實踐,比如用Maven打包MapReduce作業,設置用戶的Java類路徑,用MRUnit寫測試等(這些內容都請參見第6章)。第3版還深入介紹了一些特性,如輸出committer和分布式緩存(第9章),任務內存監控(第10章)。第3版還新增了兩小節內容,一節是關于如何寫MapReduce作業來處理Avro數據(參見第12章),另一節是關于如何在Oozie中運行一個簡單的MapReduce工作流(參見第6章)。
關于HDFS的章節(第3章),新增了對高可用性、聯邦HDFS、新的WebHDFS和HttpFS文件系統的介紹。
對Pig,Hive,Sqoop和ZooKeeper的相關介紹,第3版全部進行了相應的擴展,廣泛介紹其最新發行版本中的新特性和變化。
此外,第3版還對第2版進行了徹底的更新、修訂和優化。
第2版新增內容
《Hadoop權威指南》(第2版)新增兩章內容,分別介紹Sqoop和Hive(第15章和第17章),新增一個小節專門介紹Avro(參見第12章),補充了關于Hadoop新增安全特性的介紹(參見第10章)以及一個介紹如何使用Hadoop來分析海量網絡圖的新實例分析。
第2版繼續介紹Apache Hadoop 0.20系列發行版本,因為當時最新、最穩定的發行版本。書中有時會提到一些最新發行版本中的一些新特性,但在首次介紹這些特性時,有說明具體的Hadoop版本號。
示例代碼的使用
本書的補充材料(代碼、示例及練習等)可以從本書網站(http://www.hadoopbook.com)或GitHub(https://github.com/tomwhite/hadoop-book/)下載。
本書的目的是幫助讀者完成工作。通常情況下,可以在你的程序或文檔中使用本書中給出的代碼。不必聯系我們獲得代碼使用授權,除非你需要使用大量的代碼。例如,在寫程序的時候引用幾段代碼不需要向我們申請許可。但以光盤方式銷售或重新發行O’Reilly書中的示例的確需要獲得許可。引用本書或引用本書中的示例代碼來回答問題也不需要申請許可。但是,如果要將本書中的大量范例代碼加入你的產品文檔,則需要申請許可。
如果覺得使用示例代碼的情況不屬于前面列出的合理使用或許可范圍,請通過電子郵件聯系我們,郵箱地址為permissions@oreilly.com。
Safari Books Online
專業技術人員、軟件開發人員、網頁設計人員、商務人員和創意專家將Safari Books Online用作自己開展研究、解決問題、學習和完成資格認證培訓的重要來源。
Safari Books Online為企業、政府部門、教育機構和個人提供廣泛、靈活的計劃和定價。
在這里,成員們通過一個可以全文檢索的數據庫中就能夠訪問數千種圖書、培訓視頻和正式出版之前的書稿,這些內容提供商有O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology及其他上百家出版社。歡迎訪問Safari Books Online,了解更多詳情。
致謝
在本書寫作期間,我仰賴于許多人的幫助,直接的或間接的。感謝Hadoop社區,我從中學到很多,這樣的學習仍將繼續。
特別感謝Michael Stack和Jonathan Gray,HBase這一章的內容就是他們寫的。我還要感謝Adrian Woodhead,Marc de Palol,Joydeep Sen Sarma,Ashish Thusoo,Andrzej Bia?ecki,Stu Hood,Chris K. Wensel和 Owen O’Malley,他們提供了學習實例。
感謝為草稿提出有用建議和改進建議的評審人:Raghu Angadi,Matt Biddulph,Christophe Bisciglia,Ryan Cox,Devaraj Das,Alex Dorman,Chris Douglas,Alan Gates,Lars George,Patrick Hunt,Aaron Kimball,Peter Krey,Hairong Kuang,Simon Maxen,Olga Natkovich,Benjamin Reed,Konstantin Shvachko,Allen Wittenauer,Matei Zaharia和 Philip Zeyliger。Ajay Anand組織本書的評審并使其順利完成。Philip (“flip”) Komer幫助我獲得了NCDC氣溫數據,使本書示例很有特色。特別感謝Owen O’Malley 和 Arun C. Murthy,他們為我清楚解釋了MapReduce中shuffle的復雜過程。當然,如果有任何錯誤,得歸咎于我。
對于第2版,我特別感謝 Jeff Bean,Doug Cutting,Glynn Durham,Alan Gates,Jeff Hammerbacher,Alex Kozlov,Ken Krugler,Jimmy Lin,Todd Lipcon,Sarah Sproehnle,Vinithra Varadharajan和Ian Wrigley,感謝他們仔細審閱本書,并提出寶貴的建議,同時也感謝對本書第1版提出勘誤建議的讀者。我也想感謝Aaron Kimball對Sqoop所做的貢獻和Philip (“flip”)Kromer對圖處理實例分析所做的貢獻。
對于第3版,我想感謝Alejandro Abdelnur,Eva Andreasson,Eli Collins,Doug Cutting,Patrick Hunt,Aaron Kimball,Aaron T. Myers,Brock Noland,Arvind Prabhakar,Ahmed Radwan和Tom Wheeler,感謝他們的反饋意見和建議。Rob Weltman友善地對整本書提出了非常詳細的反饋意見,這些意見和建議使得本書終稿的質量得以更上一層樓。此外,我還要向提交第2版勘誤的所有讀者表達最真摯的謝意。
對于第4版,我想感謝Jodok Batlogg,Meghan Blanchette,Ryan Blue,Jarek Jarcec Cecho,Jules Damji,Dennis Dawson,Matthew Gast,Karthik Kambatla,Julien Le Dem,Brock Noland,Sandy Ryza,Akshai Sarma,Ben Spivey,Michael Stack,Kate Ting,Josh Walter,Josh Wills和Adrian Woodhead,感謝他們所有人非常寶貴的審閱反饋。Ryan Brush,Micah Whitacre和Matt Massie kindly為第4版友情提供新的實例學習。再次感謝提交勘誤的所有讀者。
特別感謝Doug Cutting對我的鼓勵、支持、友誼以及他為本書所寫的序。
我還要感謝在本書寫作期間以對話和郵件方式進行交流的其他人。
在本書第1版寫到一半的時候,我加入了Cloudera,我想感謝我的同事,他們為我提供了大量的幫助和支持,使我有充足的時間好好寫書,并能及時交稿。
非常感謝我的編輯Mike Loukides、Meghan Blanchette及其O’Reilly Media的同事,他們在本書的準備階段為我提供了很多幫助。Mike和Meghan一直為我答疑解惑、審讀我的初稿并幫助我如期完稿。
最后,寫作是一項艱巨的任務,如果沒有家人一如既往地支持,我是不可能完成這本的。我的妻子Eliane,她不僅操持著整個家庭,還協助我,參與本書的審稿、編輯和跟進案例學習。還有我的女兒Emilia和Lottie,她們一直都非常理解并支持我的工作,我期待有更多時間好好陪陪她們。
目錄
第Ⅰ部分? Hadoop基礎知識
第1章? 初識Hadoop?? 3
1.1? 數據!數據!??? 3
1.2? 數據的存儲與分析??? 5
1.3? 查詢所有數據??? 6
1.4? 不僅僅是批處理??? 7
1.5? 相較于其他系統的優勢??? 8
1.5.1? 關系型數據庫管理系統??? 8
1.5.2? 網格計算??? 10
1.5.3? 志愿計算??? 11
1.6? Apache Hadoop發展簡史??? 12
1.7? 本書包含的內容??? 16
第2章? 關于MapReduce? 19
2.1? 氣象數據集??? 19
2.2? 使用Unix工具來分析數據??? 21
2.3? 使用Hadoop來分析數據??? 22
2.3.1? map和reduce? 23
2.3.2? Java MapReduce? 24
2.4? 橫向擴展??? 31
2.4.1? 數據流??? 31
2.4.2? combiner函數??? 35
2.4.3? 運行分布式的MapReduce作業??? 37
2.5? Hadoop Streaming?? 37
2.5.1? Ruby版本??? 38
2.5.2? Python版本??? 40
第3章? ?? Hadoop分布式文件系統??? 42
3.1? HDFS的設計??? 42
3.2? HDFS的概念??? 44
3.2.1? 數據塊
3.2.2? namenode和datanode? 45
3.2.3? 塊緩存??? 46
3.2.4? 聯邦HDFS? 47
3.2.5? HDFS的高可用性??? 47
3.3? 命令行接口??? 50
3.4? Hadoop文件系統??? 52
3.5? Java接口??? 56
3.5.1? 從Hadoop URL讀取數據??? 56
3.5.2? 通過FileSystem API讀取數據??? 58
3.5.3? 寫入數據??? 61
3.5.4? 目錄??? 63
3.5.5? 查詢文件系統??? 63
3.5.6? 刪除數據??? 68
3.6? 數據流??? 68
3.6.1? 剖析文件讀取??? 68
3.6.2? 剖析文件寫入??? 71
3.6.3? 一致模型??? 74
3.7? 通過distcp并行復制??? 76
第4章? ? ? ?? 關于YARN?? 78
4.1? 剖析YARN應用運行機制??? 79
4.1.1? 資源請求??? 80
4.1.2? 應用生命期??? 81
4.1.3? 構建YARN應用??? 81
4.2? YARN與MapReduce 1相比??? 82
4.3? YARN中的調度??? 85
4.3.1? 調度選項??? 85
4.3.2? 容量調度器配置??? 87
4.3.3? 公平調度器配置??? 89
4.3.4??延遲調度??? 93
4.3.5? 主導資源公平性??? 94
4.4? 延伸閱讀??? 95
第5章?? Hadoop的I/O操作??? 96
5.1? 數據完整性??? 96
5.1.1? HDFS的數據完整性??? 97
5.1.2? LocalFileSystem??? 98
5.1.3? ChecksumFileSystem??? 98
5.2? 壓縮??? 99
5.2.1? codec? 100
5.2.2? 壓縮和輸入分片
5.2.3? 在MapReduce中使用壓縮??? 106
5.3? 序列化??? 109
5.3.1? Writable接口??? 110
5.3.2? Writable類??? 112
5.3.3? 實現定制的Writable集合
5.3.4? 序列化框架??? 125
5.4? 基于文件的數據結構??? 127
5.4.1? 關于SequenceFile? 127
5.4.2? 關于MapFile? 135
5.4.3? 其他文件格式和面向列的格式??? 136
第Ⅱ部分? 關于MapReduce
第6章? MapReduce應用開發??? 141
6.1? 用于配置的API 142
6.1.1? 資源合并??? 143
6.1.2? 變量擴展??? 144
6.2? 配置開發環境??? 144
6.2.1? 管理配置??? 146
6.2.2? 輔助類GenericOptionsParser,Tool和ToolRunner? 149
6.3? 用MRUnit來寫單元測試??? 152
6.3.1? 關于Mapper? 152
6.3.2? 關于Reducer? 156
6.4? 本地運行測試數據??? 156
6.4.1? 在本地作業運行器上運行作業??? 156
6.4.2? 測試驅動程序??? 158
6.5? 在集群上運行??? 160
6.5.1? 打包作業??? 160
6.5.2? 啟動作業??? 162
6.5.3? MapReduce的Web界面??? 165
6.5.4? 獲取結果??? 167
6.5.5? 作業調試??? 168
6.5.6? Hadoop日志??? 171
6.5.7? 遠程調試??? 173
6.6? 作業調優??? 174
6.7? MapReduce的工作流??? 176
6.7.1? 將問題分解成MapReduce作業??? 177
6.7.2? 關于JobControl 178
6.7.3? 關于Apache Oozie? 179
第7章? MapReduce的工作機制??? 184
7.1? 剖析MapReduce作業運行機制??? 184
7.1.1? 作業的提交??? 185
7.1.2? 作業的初始化??? 186
7.1.3? 任務的分配??? 187
7.1.4? 任務的執行??? 188
7.1.5? 進度和狀態的更新??? 189
7.1.6? 作業的完成??? 191
7.2? 失敗??? 191
7.2.1 ?任務運行失敗??? 191
7.2.2? application master運行失敗??? 193
7.2.3? 節點管理器運行失敗??? 193
7.2.4? 資源管理器運行失敗??? 194
7.3? shuffle和排序??? 195
7.3.1? map端??? 195
7.3.2? reduce端??? 197
7.3.3? 配置調優??? 199
7.4? 任務的執行??? 201
7.4.1? 任務執行環境??? 201
7.4.2? 推測執行??? 202
7.4.3? 關于OutputCommitters? 204
第8章? MapReduce的類型與格式??? 207
8.1? MapReduce的類型??? 207
8.1.1? 默認的MapReduce作業??? 212
8.1.2? 默認的Streaming作業??? 216
8.2? 輸入格式??? 218
8.2.1? 輸入分片與記錄??? 218
8.2.2? 文本輸入??? 229
8.2.3? 二進制輸入??? 233
8.2.4? 多個輸入??? 234
8.2.5? 數據庫輸入(和輸出) 235
8.3? 輸出格式??? 236
8.3.1? 文本輸出??? 236
8.3.2? 二進制輸出??? 237
8.3.3? 多個輸出??? 237
8.3.4? 延遲輸出??? 242
8.3.5? 數據庫輸出??? 242
第9章? MapReduce的特性??? 243
9.1? 計數器??? 243
9.1.1? 內置計數器??? 243
9.1.2? 用戶定義的Java計數器??? 248
9.1.3? 用戶定義的Streaming計數器??? 251
9.2? 排序??? 252
9.2.1? 準備??? 252
9.2.2? 部分排序??? 253
9.2.3? 全排序??? 255
9.2.4? 輔助排序??? 259
9.3? 連接??? 264
9.3.1? map端連接??? 266
9.3.2? reduce端連接??? 266
9.4? 邊數據分布??? 270
9.4.1? 利用JobConf來配置作業??? 270
9.4.2? 分布式緩存??? 270
9.5? MapReduce庫類??? 276
第Ⅲ部分? Hadoop的操作
第10章? 構建Hadoop集群??? 279
10.1? 集群規范??? 280
10.1.1? 集群規模??? 281
10.1.2? 網絡拓撲??? 282
10.2? 集群的構建和安裝??? 284
10.2.1? 安裝Java? 284
10.2.2? 創建Unix 用戶賬號??? 284
10.2.3? 安裝Hadoop?? 284
10.2.4? SSH配置??? 285
10.2.5? 配置Hadoop?? 286
10.2.6? 格式化HDFS 文件系統??? 286
10.2.7? 啟動和停止守護進程??? 286
10.2.8? 創建用戶目錄??? 288
10.3? Hadoop配置??? 288
10.3.1? 配置管理??? 289
10.3.2? 環境設置??? 290
10.3.3? Hadoop守護進程的關鍵屬性??? 293
10.3.4? Hadoop守護進程的地址和端口??? 300
10.3.5? Hadoop的其他屬性??? 303
10.4? 安全性??? 305
10.4.1? Kerberos和Hadoop?? 306
10.4.2? 委托令牌??? 308
10.4.3? 其他安全性改進??? 309
10.5? 利用基準評測程序測試Hadoop集群??? 311
10.5.1? Hadoop基準評測程序??? 311
10.5.2? 用戶作業??? 313
第11章? 管理Hadoop?? 314
11.1? HDFS
11.1.1? 永久性數據結構??? 314
11.1.2? 安全模式??? 320
11.1.3? 日志審計
322
11.1.4? 工具??? 322
11.2? 監控??? 327
11.2.1? 日志??? 327
11.2.2? 度量和JMX(Java管理擴展) 328
11.3? 維護??? 329
11.3.1? 日常管理過程??? 329
11.3.2? 委任和解除節點??? 331
11.3.3? 升級??? 334
第Ⅳ部分? Hadoop相關開源項目
第12章? 關于Avro?? 341
12.1? Avro數據類型和模式??? 342
12.2? 內存中的序列化和反序列化特定API 347
12.3? Avro數據文件??? 349
12.4? 互操作性??? 351
12.4.1? Python API 351
12.4.2? Avro工具集??? 352
12.5? 模式解析??? 352
12.6? 排列順序??? 354
12.7? 關于Avro MapReduce? 356
12.8? 使用Avro MapReduce進行排序??? 359
12.9? 其他語言的Avro?? 362
第13章? 關于Parquet
13.1? 數據模型??? 364
13.2? Parquet文件格式??? 367
13.3? Parquet的配置??? 368
13.4? Parquet文件的讀/寫??? 369
13.4.1? Avro、Protocol Buffers和Thrift? 371
13.4.2? 投影模式和讀取模式??? 373
13.5? Parquet MapReduce
第14章關于Flume
14.1? 安裝Flume? 378
14.2? 示例??? 378
14.3? 事務和可靠性??? 380
14.4? HDFS Sink? 382
14.5? 扇出??? 385
14.5.1? 交付保證??? 386
14.5.2? 復制和復用選擇器??? 387
14.6? 通過代理層分發??? 387
14.7? Sink組??? 391
14.8? Flume與應用程序的集成??? 395
14.9? 組件編目??? 395
14.10? 延伸閱讀??? 397
第15章? 關于Sqoop?? 398
15.1? 獲取Sqoop?? 398
15.2? Sqoop連接器??? 400
15.3? 一個導入的例子??? 401
15.4? 生成代碼??? 404
15.5? 深入了解數據庫導入??? 405
15.5.1? 導入控制??? 407
15.5.2? 導入和一致性??? 408
15.5.3? 增量導入??? 408
15.5.4? 直接模式導入??? 408
15.6? 使用導入的數據??? 409
15.7? 導入大對象??? 412
15.8? 執行導出??? 414
15.9? 深入了解導出功能??? 416
15.9.1? 導出與事務??? 417
15.9.2? 導出和SequenceFile? 418
15.10? 延伸閱讀??? 419
第16章? 關于Pig?? 420
16.1? 安裝與運行Pig?? 421
16.1.1? 執行類型??? 422
16.1.2? 運行Pig程序??? 423
16.1.3? Grunt? 424
16.1.4? Pig Latin編輯器??? 424
16.2? 示例??? 425
16.3? 與數據庫進行比較??? 428
16.4? PigLatin? 429
16.4.1? 結構??? 430
16.4.2? 語句??? 431
16.4.3? 表達式??? 436
16.4.4? 類型??? 437
16.4.5? 模式??? 438
16.4.6? 函數??? 443
16.4.7? 宏??? 445
16.5? 用戶自定義函數??? 446
16.5.1? 過濾UDF? 447
16.5.2? 計算UDF? 450
16.5.3? 加載UDF? 452
16.6? 數據處理操作??? 455
16.6.1? 數據的加載和存儲??? 455
16.6.2? 數據的過濾??? 455
16.6.3? 數據的分組與連接??? 458
16.6.4? 數據的排序??? 463
16.6.5? 數據的組合和切分??? 465
16.7? Pig實戰??? 465
16.7.1? 并行處理??? 465
16.7.2? 匿名關系??? 466
16.7.3? 參數代換??? 467
16.8? 延伸閱讀??? 468
第17章? 關于Hive? 469
17.1? 安裝HiveHive的shell環境
471
17.2? 示例??? 472
17.3? 運行Hive? 473
17.3.1? 配置Hive? 473
17.3.2? Hive服務??? 476
17.3.3? Metastore? 478
17.4? Hive與傳統數據庫相比??? 480
17.4.1? 讀時模式vs.寫時模式??? 480
17.4.2? 更新、事務和索引??? 481
17.4.3? 其他SQL-on-Hadoop技術??? 482
17.5? HiveQL? 483
17.5.1? 數據類型??? 484
17.5.2? 操作與函數??? 487
17.6? 表??? 488
17.6.1? 托管表和外部表??? 488
17.6.2? 分區和桶??? 490
17.6.3? 存儲格式??? 494
17.6.4? 導入數據??? 498
17.6.5? 表的修改??? 500
17.6.6? 表的丟棄??? 501
17.7? 查詢數據??? 501
17.7.1? 排序和聚集??? 501
17.7.2? MapReduce腳本??? 502
17.7.3? 連接??? 503
17.7.4? 子查詢??? 506
17.7.5? 視圖??? 507
17.8? 用戶定義函數??? 508
17.8.1? 寫UDF? 510
17.8.2? 寫UDAF? 512
17.9? 延伸閱讀??? 516
第18章? 關于Crunch? 517
18.1? 示例??? 518
18.2? Crunch核心API 521
18.2.1? 基本操作??? 522
18.2.2? 類型??? 527
18.2.3? 源和目標??? 530
18.2.4? 函數??? 532
18.2.5? 物化??? 535
18.3? 管線執行??? 537
18.3.1? 運行管線??? 538
18.3.2? 停止管線??? 539
18.3.3? 查看Crunch計劃??? 540
18.3.4? 迭代算法??? 543
18.3.5? 給管線設置檢查點??? 544
18.4? Crunch庫??? 545
18.5? 延伸閱讀??? 547
第19章? 關于Spark? 548
19.1? 安裝Spark? 549
19.2? 示例??? 549
19.2.1? Spark應用、作業、階段和任務??? 551
19.2.2? Scala獨立應用??? 552
19.2.3? Java示例??? 553
19.2.4? Python示例??? 554
19.3? 彈性分布式數據集??? 555
19.3.1? 創建??? 555
19.3.2? 轉換和動作??? 557
19.3.3? 持久化??? 561
19.3.4? 序列化??? 563
19.4? 共享變量??? 564
19.4.1? 廣播變量??? 564
19.4.2? 累加器??? 565
19.5? 剖析Spark作業運行機制??? 565
19.5.1? 作業提交??? 566
19.5.2? DAG的構建??? 566
19.5.3? 任務調度??? 569
19.5.4? 任務執行??? 570
19.6? 執行器和集群管理器??? 570
19.7? 延伸閱讀??? 574
第20章? 關于HBase? 575
20.1? HBase基礎??? 575
20.2? 概念??? 576
20.2.1? 數據模型的“旋風之旅”? 576
20.2.2? 實現??? 578
20.3? 安裝??? 581
20.4? 客戶端??? 584
20.4.1? Java? 584
20.4.2? MapReduce? 588
20.4.3? REST和Thrift? 589
20.5? 創建在線查詢應用??? 589
20.5.1? 模式設計??? 590
20.5.2? 加載數據??? 591
20.5.3? 在線查詢??? 595
20.6? HBase和RDBMS的比較??? 598
20.6.1? 成功的服務??? 599
20.6.2? HBase? 600
20.7? Praxis? 601
20.7.1? HDFS? 601
20.7.2? 用戶界面??? 602
20.7.3? 度量??? 602
20.7.4? 計數器??? 602
20.8? 延伸閱讀??? 602
第21章? 關于ZooKeeper? 604
21.1? 安裝和運行ZooKeeper? 605
21.2? 示例??? 607
21.2.1? ZooKeeper中的組成員關系??? 608
21.2.2? 創建組??? 608
21.2.3? 加入組??? 611
21.2.4? 列出組成員??? 612
21.2.5? 刪除組??? 614
21.3? ZooKeeper服務??? 615
21.3.1? 數據模型??? 615
21.3.2? 操作??? 618
21.3.3? 實現??? 622
21.3.4? 一致性??? 624
21.3.5? 會話??? 626
21.3.6? 狀態??? 628
21.4? 使用ZooKeeper來構建應用??? 629
21.4.1? 配置服務??? 629
21.4.2? 可復原的ZooKeeper應用??? 633
21.4.3? 鎖服務??? 637
21.4.4? 更多分布式數據結構和協議
21.5? 生產環境中的ZooKeeper? 640
21.5.1? 可恢復性和性能??? 641
21.5.2? 配置??? 642
21.6? 延伸閱讀??? 643
第Ⅴ部分案例學習
第22章醫療公司塞納(Cerner)的可聚合數據
22.1? 從多CPU到語義集成??? 647
22.2? 進入Apache Crunch? 648
22.3? 建立全貌??? 649
22.4? 集成健康醫療數據??? 651
22.5? 框架之上的可組合性??? 654
22.6? 下一步第23章生物數據科學:用軟件拯救生命
23.1? DNA的結構??? 659
23.2? 遺傳密碼:將DNA字符轉譯為蛋白質??? 660
22.3? 將DNA想象成源代碼??? 661
23.4? 人類基因組計劃和參考基因組??? 663
22.5? DNA測序和比對??? 664
23.6? ADAM,一個可擴展的基因組分析平臺??? 666
23.7? 使用Avro接口描述語言進行自然語言編程??? 666
23.8? 使用Parquet進行面向列的存取??? 668
23.9? 一個簡單例子:用Spark和ADAM做k-mer計數??? 669
23.10? 從個性化廣告到個性化醫療??? 672
23.11? 聯系我們
第24章開源項目Cascading
24.1? 字段、元組和管道??? 675
24.2? 操作??? 678
24.3? Taps,Schemes和Flows? 680
24.4? Cascading實踐應用??? 681
24.5? 靈活性??? 684
24.6? ShareThis中的Hadoop和Cascading?? 685
24.7? 總結??? 689
附錄A? 安裝Apache Hadoop?? 691
附錄B? 關于CDH?? 697
附錄C? 準備NCDC氣象數據??? 699
附錄D? 新版和舊版Java
MapReduce API 702
大數據 Hadoop
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。