內(nèi)容簡(jiǎn)介
本書(shū)結(jié)合理論和實(shí)踐,由淺入深,全方位介紹了Hadoop這一高性能的海量數(shù)據(jù)處理和分析平臺(tái)。全書(shū)5部分24章,第Ⅰ部分介紹Hadoop基礎(chǔ)知識(shí),主題涉及Hadoop、MapReduce、Hadoop分布式文件系統(tǒng)、YARN、Hadoop的I/O操作。第Ⅱ部分介紹MapReduce,主題包括MapReduce應(yīng)用開(kāi)發(fā);MapReduce的工作機(jī)制、MapReduce的類(lèi)型與格式、MapReduce的特性。第Ⅲ部分介紹Hadoop的運(yùn)維,主題涉及構(gòu)建Hadoop集群、管理Hadoop。第Ⅳ部分介紹Hadoop相關(guān)開(kāi)源項(xiàng)目,主題涉及Avro、Parquet、Flume、Sqoop、Pig、Hive、Crunch、Spark、HBase、ZooKeeper。第Ⅴ部分提供了三個(gè)案例,分別來(lái)自醫(yī)療衛(wèi)生信息技術(shù)服務(wù)商塞納(Cerner)、微軟的人工智能項(xiàng)目ADAM(一種大規(guī)模分布式深度學(xué)習(xí)框架)和開(kāi)源項(xiàng)目Cascading(一個(gè)新的針對(duì)MapReduce的數(shù)據(jù)處理API)。
本書(shū)是一本權(quán)威、全面的Hadoop參考書(shū)和工具書(shū),闡述了Hadoop生態(tài)圈的最新發(fā)展和應(yīng)用,程序員可以從中探索海量數(shù)據(jù)集的存儲(chǔ)和分析,管理員可以從中了解Hadoop集群的安裝和運(yùn)維。
前言
數(shù)學(xué)科普作家馬丁·加德納(Martin Gardner)曾經(jīng)在一次采訪(fǎng)中談到:
“在我的世界里,只有微積分。這是我的專(zhuān)欄取得成功的奧秘。我花了很多時(shí)間才明白如何以大多數(shù)讀者都能明白的方式將自己所知道的東西娓娓道來(lái)。” ①
這也是我對(duì)Hadoop的諸多感受。它的內(nèi)部工作機(jī)制非常復(fù)雜,是一個(gè)集分布式系統(tǒng)理論、實(shí)際工程和常識(shí)于一體的系統(tǒng)。而且,對(duì)門(mén)外漢而言,Hadoop更像是“天外來(lái)客”。
但Hadoop其實(shí)并沒(méi)有那么讓人費(fèi)解,抽絲剝繭,我們來(lái)看看它的“廬山真面目”。Hadoop提供的用于處理大數(shù)據(jù)的工具都非常簡(jiǎn)單。如果說(shuō)這些工具有一個(gè)共同的主題,那就是它們更抽象,為(有大量數(shù)據(jù)需要存儲(chǔ)和分析卻沒(méi)有足夠的時(shí)間、技能或者不想成為分布式系統(tǒng)專(zhuān)家的)程序員提供一套組件,使其能夠利用Hadoop來(lái)構(gòu)建一個(gè)處理數(shù)據(jù)的基礎(chǔ)平臺(tái)。
這樣一個(gè)簡(jiǎn)單、通用的特性集,促使我在開(kāi)始使用Hadoop時(shí)便明顯感覺(jué)到Hadoop真的值得推廣。但最開(kāi)始的時(shí)候(2006年初),安裝、配置和Hadoop應(yīng)用編程是一門(mén)高深的藝術(shù)。之后,情況確實(shí)有所改善:文檔增多了;示例增多了;碰到問(wèn)題時(shí),可以向大量活躍的郵件列表發(fā)郵件求助。對(duì)新手而言,最大的障礙是理解Hadoop有哪些能耐,它擅長(zhǎng)什么,它如何使用。這些問(wèn)題使我萌發(fā)了寫(xiě)作本書(shū)的動(dòng)機(jī)。
Apache Hadoop社區(qū)的發(fā)展來(lái)之不易。從本書(shū)的第1版發(fā)行以來(lái),Hadoop項(xiàng)目如雨后春筍般發(fā)展興旺。“大數(shù)據(jù)”已成為大家耳熟能詳?shù)拿~術(shù)語(yǔ)。②當(dāng)前,軟件在可用性、性能、可靠性、可擴(kuò)展性和可管理性方面都實(shí)現(xiàn)了巨大的飛躍。在Hadoop平臺(tái)上搭建和運(yùn)行的應(yīng)用增長(zhǎng)迅猛。事實(shí)上,對(duì)任何一個(gè)人來(lái)說(shuō),跟蹤這些發(fā)展動(dòng)向都很困難。但為了讓更多的人采用Hadoop,我認(rèn)為我們要讓Hadoop更好用。這需要?jiǎng)?chuàng)建更多新的工具,集成更多的系統(tǒng),創(chuàng)建新的增強(qiáng)型API。我希望自己能夠參與,同時(shí)也希望本書(shū)能夠鼓勵(lì)并吸引其他人也參與Hadoop項(xiàng)目。
說(shuō)明
在文中討論特定的Java類(lèi)時(shí),我常常會(huì)忽略包的名稱(chēng)以免啰嗦雜亂。如果想知道一個(gè)類(lèi)在哪個(gè)包內(nèi),可以查閱Hadoop或相關(guān)項(xiàng)目的Java API 文檔(Apache Hadoop主頁(yè)http://hadoop.apache.org上有鏈接可以訪(fǎng)問(wèn))。如果使用IDE編程,其自動(dòng)補(bǔ)全機(jī)制(也稱(chēng)“自動(dòng)完成機(jī)制”)能夠幫助你找到你需要的東西。
與此類(lèi)似,盡管偏離傳統(tǒng)的編碼規(guī)范,但如果要導(dǎo)入同一個(gè)包的多個(gè)類(lèi),程序可以使用星號(hào)通配符來(lái)節(jié)省空間(例如import org.apache.hadoop. io.*)。
本書(shū)中的示例代碼可以從本書(shū)網(wǎng)站下載,網(wǎng)址為http://www.hadoopbook.com/。可以根據(jù)網(wǎng)頁(yè)上的指示獲取本書(shū)示例所用的數(shù)據(jù)集以及運(yùn)行本書(shū)示例的詳細(xì)說(shuō)明、更新鏈接、額外的資源與我的博客。
第4版新增內(nèi)容
第4版的主題是Hadoop 2。Hadoop 2系列發(fā)行版本是當(dāng)前應(yīng)用最活躍的系列,且包含Hadoop的最穩(wěn)定的版本。
第4版新增的章節(jié)包括YARN(第4章)、Parquet(第13章)、Flume(第14章)、Crunch(第18章)和Spark(第19章)。此外,為了幫助讀者更方便地閱讀本書(shū),第1章新增了一節(jié)“本書(shū)包含的內(nèi)容”(參見(jiàn)1.7節(jié))。
第4版包括兩個(gè)新的實(shí)例學(xué)習(xí)(第22章和第23章):一個(gè)是關(guān)于Hadoop如何應(yīng)用于醫(yī)療健康系統(tǒng),另一個(gè)是關(guān)于將Hadoop技術(shù)如何應(yīng)用于基因數(shù)據(jù)處理。舊版本中的實(shí)例學(xué)習(xí)可以在線(xiàn)查到,網(wǎng)址為http:/bit.ly/hadoop_tdg_prev。
為了和Hadoop最新發(fā)行版本及其相關(guān)項(xiàng)目同步,第4版對(duì)原有章節(jié)進(jìn)行了修訂、更新和優(yōu)化。
第3版新增內(nèi)容
第3版概述Apache Hadoop 1.x(以前的0.20)系列發(fā)行版本,以及新近的0.22和2.x(以前的0.23)系列。除了少部分(文中有說(shuō)明)例外,本書(shū)包含的所有范例都在這些版本上運(yùn)行過(guò)。
第3版的大部分范例代碼都使用了新的MapReduce API。因?yàn)榕f的API仍然應(yīng)用很廣,所以文中在討論新的API時(shí)我們還會(huì)繼續(xù)討論它,使用舊API的對(duì)應(yīng)范例代碼可以到本書(shū)的配套網(wǎng)站下載。
Hadoop 2.0最主要的變化是新增的MapReduce運(yùn)行時(shí)MapReduce 2,它建立在一個(gè)新的分布式資源管理系統(tǒng)之上,該系統(tǒng)稱(chēng)為YARN。針對(duì)建立在YARN之上的MapReduce,第3版增加了相關(guān)的介紹,包括它的工作機(jī)制(第7章)及如何運(yùn)行(第10章)。
第3版還增加了更多對(duì)MapReduce的介紹,包括豐富的開(kāi)發(fā)實(shí)踐,比如用Maven打包MapReduce作業(yè),設(shè)置用戶(hù)的Java類(lèi)路徑,用MRUnit寫(xiě)測(cè)試等(這些內(nèi)容都請(qǐng)參見(jiàn)第6章)。第3版還深入介紹了一些特性,如輸出committer和分布式緩存(第9章),任務(wù)內(nèi)存監(jiān)控(第10章)。第3版還新增了兩小節(jié)內(nèi)容,一節(jié)是關(guān)于如何寫(xiě)MapReduce作業(yè)來(lái)處理Avro數(shù)據(jù)(參見(jiàn)第12章),另一節(jié)是關(guān)于如何在Oozie中運(yùn)行一個(gè)簡(jiǎn)單的MapReduce工作流(參見(jiàn)第6章)。
關(guān)于HDFS的章節(jié)(第3章),新增了對(duì)高可用性、聯(lián)邦HDFS、新的WebHDFS和HttpFS文件系統(tǒng)的介紹。
對(duì)Pig,Hive,Sqoop和ZooKeeper的相關(guān)介紹,第3版全部進(jìn)行了相應(yīng)的擴(kuò)展,廣泛介紹其最新發(fā)行版本中的新特性和變化。
此外,第3版還對(duì)第2版進(jìn)行了徹底的更新、修訂和優(yōu)化。
第2版新增內(nèi)容
《Hadoop權(quán)威指南》(第2版)新增兩章內(nèi)容,分別介紹Sqoop和Hive(第15章和第17章),新增一個(gè)小節(jié)專(zhuān)門(mén)介紹Avro(參見(jiàn)第12章),補(bǔ)充了關(guān)于Hadoop新增安全特性的介紹(參見(jiàn)第10章)以及一個(gè)介紹如何使用Hadoop來(lái)分析海量網(wǎng)絡(luò)圖的新實(shí)例分析。
第2版繼續(xù)介紹Apache Hadoop 0.20系列發(fā)行版本,因?yàn)楫?dāng)時(shí)最新、最穩(wěn)定的發(fā)行版本。書(shū)中有時(shí)會(huì)提到一些最新發(fā)行版本中的一些新特性,但在首次介紹這些特性時(shí),有說(shuō)明具體的Hadoop版本號(hào)。
本書(shū)采用的約定
本書(shū)采用以下排版約定。
斜體
用于表明新的術(shù)語(yǔ)、URL、電子郵件地址、文件名和文件擴(kuò)展名。
等寬字體Consolas
用于程序清單,在正文段落中出現(xiàn)的程序元素(如變量或函數(shù)名)、數(shù)據(jù)庫(kù)、數(shù)據(jù)類(lèi)型、環(huán)境變量、語(yǔ)句和關(guān)鍵字也采用這樣的字體。
等寬字體Consolas+加粗
用于顯示命令或應(yīng)該由用戶(hù)鍵入的其他文本。
等寬字體Consolas+斜體
表明這里的文本需要替換為用戶(hù)提供的值或其他由上下文確定的值。
這個(gè)圖標(biāo)表示通用的說(shuō)明。
這個(gè)圖標(biāo)表示重要的指示或建議。
這個(gè)圖標(biāo)表示警告或需要注意的問(wèn)題。
示例代碼的使用
本書(shū)的補(bǔ)充材料(代碼、示例及練習(xí)等)可以從本書(shū)網(wǎng)站(http://www.hadoopbook.com)或GitHub(https://github.com/tomwhite/hadoop-book/)下載。
本書(shū)的目的是幫助讀者完成工作。通常情況下,可以在你的程序或文檔中使用本書(shū)中給出的代碼。不必聯(lián)系我們獲得代碼使用授權(quán),除非你需要使用大量的代碼。例如,在寫(xiě)程序的時(shí)候引用幾段代碼不需要向我們申請(qǐng)?jiān)S可。但以光盤(pán)方式銷(xiāo)售或重新發(fā)行O’Reilly書(shū)中的示例的確需要獲得許可。引用本書(shū)或引用本書(shū)中的示例代碼來(lái)回答問(wèn)題也不需要申請(qǐng)?jiān)S可。但是,如果要將本書(shū)中的大量范例代碼加入你的產(chǎn)品文檔,則需要申請(qǐng)?jiān)S可。
我們欣賞你在引用時(shí)注明出處,但不強(qiáng)求。引用通常包括書(shū)名、作者、出版社和ISBN,如“Hadoop: The Definitive Guide, Fourth Edition, by Tom White(O’Reilly).Copyright 2015 Tom White,978-1-491-90163-2”。
如果覺(jué)得使用示例代碼的情況不屬于前面列出的合理使用或許可范圍,請(qǐng)通過(guò)電子郵件聯(lián)系我們,郵箱地址為permissions@oreilly.com。
Safari Books Online
Safari Books Online(www.safaribooksonline.com)是一個(gè)按需定制的數(shù)字圖書(shū)館,以圖書(shū)和視頻的形式提供全球技術(shù)領(lǐng) 域和經(jīng)管領(lǐng)域內(nèi)知名作者的專(zhuān)業(yè)作品。
專(zhuān)業(yè)技術(shù)人員、軟件開(kāi)發(fā)人員、網(wǎng)頁(yè)設(shè)計(jì)人員、商務(wù)人員和創(chuàng)意專(zhuān)家將Safari Books Online用作自己開(kāi)展研究、解決問(wèn)題、學(xué)習(xí)和完成資格認(rèn)證培訓(xùn)的重要來(lái)源。
Safari Books Online為企業(yè)、政府部門(mén)、教育機(jī)構(gòu)和個(gè)人提供廣泛、靈活的計(jì)劃和定價(jià)。
在這里,成員們通過(guò)一個(gè)可以全文檢索的數(shù)據(jù)庫(kù)中就能夠訪(fǎng)問(wèn)數(shù)千種圖書(shū)、培訓(xùn)視頻和正式出版之前的書(shū)稿,這些內(nèi)容提供商有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及其他上百家出版社。歡迎訪(fǎng)問(wèn)Safari Books Online,了解更多詳情。
聯(lián)系我們
對(duì)于本書(shū),如果有任何意見(jiàn)或疑問(wèn),請(qǐng)通過(guò)以下地址聯(lián)系出版商:
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門(mén)南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(xún)(北京)有限公司
本書(shū)也有相關(guān)的網(wǎng)頁(yè),我們?cè)谏厦媪谐隽丝闭`表、范例以及其他一些信息。網(wǎng)址如下:
http://bit.ly/hadoop_tdg_4e(英文版)
http://www.oreilly.com.cn/book.php?bn=978-7-302-46513-3(中文版)
對(duì)本書(shū)做出評(píng)論或者詢(xún)問(wèn)技術(shù)問(wèn)題,請(qǐng)發(fā)送E-mail至以下郵箱:
bookquestions@oreilly.com
如果希望獲得關(guān)于本書(shū)、會(huì)議、資源中心和O’Reilly的更多信息,請(qǐng)?jiān)L問(wèn)以下網(wǎng)址:
http://www.oreilly.com
http://www.oreilly.com.cn
致謝
在本書(shū)寫(xiě)作期間,我仰賴(lài)于許多人的幫助,直接的或間接的。感謝Hadoop社區(qū),我從中學(xué)到很多,這樣的學(xué)習(xí)仍將繼續(xù)。
特別感謝Michael Stack和Jonathan Gray,HBase這一章的內(nèi)容就是他們寫(xiě)的。我還要感謝Adrian Woodhead,Marc de Palol,Joydeep Sen Sarma,Ashish Thusoo,Andrzej Białecki,Stu Hood,Chris K. Wensel和 Owen O’Malley,他們提供了學(xué)習(xí)實(shí)例。
感謝為草稿提出有用建議和改進(jìn)建議的評(píng)審人: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組織本書(shū)的評(píng)審并使其順利完成。Philip (“flip”) Komer幫助我獲得了NCDC氣溫?cái)?shù)據(jù),使本書(shū)示例很有特色。特別感謝Owen O’Malley 和 Arun C. Murthy,他們?yōu)槲仪宄忉屃薓apReduce中shuffle的復(fù)雜過(guò)程。當(dāng)然,如果有任何錯(cuò)誤,得歸咎于我。
對(duì)于第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,感謝他們仔細(xì)審閱本書(shū),并提出寶貴的建議,同時(shí)也感謝對(duì)本書(shū)第1版提出勘誤建議的讀者。我也想感謝Aaron Kimball對(duì)Sqoop所做的貢獻(xiàn)和Philip (“flip”)Kromer對(duì)圖處理實(shí)例分析所做的貢獻(xiàn)。
對(duì)于第3版,我想感謝Alejandro Abdelnur,Eva Andreasson,Eli Collins,Doug Cutting,Patrick Hunt,Aaron Kimball,Aaron T. Myers,Brock Noland,Arvind Prabhakar,Ahmed Radwan和Tom Wheeler,感謝他們的反饋意見(jiàn)和建議。Rob Weltman友善地對(duì)整本書(shū)提出了非常詳細(xì)的反饋意見(jiàn),這些意見(jiàn)和建議使得本書(shū)終稿的質(zhì)量得以更上一層樓。此外,我還要向提交第2版勘誤的所有讀者表達(dá)最真摯的謝意。
對(duì)于第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版友情提供新的實(shí)例學(xué)習(xí)。再次感謝提交勘誤的所有讀者。
特別感謝Doug Cutting對(duì)我的鼓勵(lì)、支持、友誼以及他為本書(shū)所寫(xiě)的序。
我還要感謝在本書(shū)寫(xiě)作期間以對(duì)話(huà)和郵件方式進(jìn)行交流的其他人。
在本書(shū)第1版寫(xiě)到一半的時(shí)候,我加入了Cloudera,我想感謝我的同事,他們?yōu)槲姨峁┝舜罅康膸椭椭С郑刮矣谐渥愕臅r(shí)間好好寫(xiě)書(shū),并能及時(shí)交稿。
非常感謝我的編輯Mike Loukides、Meghan Blanchette及其O’Reilly Media的同事,他們?cè)诒緯?shū)的準(zhǔn)備階段為我提供了很多幫助。Mike和Meghan一直為我答疑解惑、審讀我的初稿并幫助我如期完稿。
最后,寫(xiě)作是一項(xiàng)艱巨的任務(wù),如果沒(méi)有家人一如既往地支持,我是不可能完成這本的。我的妻子Eliane,她不僅操持著整個(gè)家庭,還協(xié)助我,參與本書(shū)的審稿、編輯和跟進(jìn)案例學(xué)習(xí)。還有我的女兒Emilia和Lottie,她們一直都非常理解并支持我的工作,我期待有更多時(shí)間好好陪陪她們。
① 摘自“The science of fun”,網(wǎng)址為http://bit.ly/science_of_fun。此文2008年5月31日發(fā)表于《衛(wèi)報(bào)》。
② 術(shù)語(yǔ)“大數(shù)據(jù)”在2013年被收入《牛津英語(yǔ)辭典》(Oxford English Dictionary),網(wǎng)址為http://bit.ly/6_13_oed_update。
目錄
第Ⅰ部分 Hadoop基礎(chǔ)知識(shí)第1章 初識(shí)Hadoop 31.1 數(shù)據(jù)!數(shù)據(jù)! 31.2 數(shù)據(jù)的存儲(chǔ)與分析 51.3 查詢(xún)所有數(shù)據(jù) 61.4 不僅僅是批處理 71.5 相較于其他系統(tǒng)的優(yōu)勢(shì) 81.5.1 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng) 81.5.2 網(wǎng)格計(jì)算 101.5.3 志愿計(jì)算 111.6 Apache Hadoop發(fā)展簡(jiǎn)史 121.7 本書(shū)包含的內(nèi)容 16第2章 關(guān)于MapReduce 192.1 氣象數(shù)據(jù)集 192.2 使用Unix工具來(lái)分析數(shù)據(jù) 212.3 使用Hadoop來(lái)分析數(shù)據(jù) 222.3.1 map和reduce 232.3.2 Java MapReduce 242.4 橫向擴(kuò)展 312.4.1 數(shù)據(jù)流 312.4.2 combiner函數(shù) 352.4.3 運(yùn)行分布式的MapReduce作業(yè) 372.5 Hadoop Streaming 372.5.1 Ruby版本 382.5.2 Python版本 40第3章 Hadoop分布式文件系統(tǒng) 423.1 HDFS的設(shè)計(jì) 423.2 HDFS的概念 443.2.1 數(shù)據(jù)塊 443.2.2 namenode和datanode 453.2.3 塊緩存 463.2.4 聯(lián)邦HDFS 473.2.5 HDFS的高可用性 473.3 命令行接口 503.4 Hadoop文件系統(tǒng) 523.5 Java接口 563.5.1 從Hadoop URL讀取數(shù)據(jù) 563.5.2 通過(guò)FileSystem API讀取數(shù)據(jù) 583.5.3 寫(xiě)入數(shù)據(jù) 613.5.4 目錄 633.5.5 查詢(xún)文件系統(tǒng) 633.5.6 刪除數(shù)據(jù) 683.6 數(shù)據(jù)流 683.6.1 剖析文件讀取 683.6.2 剖析文件寫(xiě)入 713.6.3 一致模型 743.7 通過(guò)distcp并行復(fù)制 76第4章 關(guān)于YARN 784.1 剖析YARN應(yīng)用運(yùn)行機(jī)制 794.1.1 資源請(qǐng)求 804.1.2 應(yīng)用生命期 814.1.3 構(gòu)建YARN應(yīng)用 814.2 YARN與MapReduce 1相比 824.3 YARN中的調(diào)度 854.3.1 調(diào)度選項(xiàng) 854.3.2 容量調(diào)度器配置 874.3.3 公平調(diào)度器配置 894.3.5 延遲調(diào)度 934.3.5 主導(dǎo)資源公平性 944.4 延伸閱讀 95第5章 Hadoop的I/O操作 965.1 數(shù)據(jù)完整性 965.1.1 HDFS的數(shù)據(jù)完整性 975.1.2 LocalFileSystem 985.1.3 ChecksumFileSystem 985.2 壓縮 995.2.1 codec 1005.2.2 壓縮和輸入分片 1055.2.3 在MapReduce中使用壓縮 1065.3 序列化 1095.3.1 Writable接口 1105.3.2 Writable類(lèi) 1125.3.3 實(shí)現(xiàn)定制的Writable集合 1215.3.4 序列化框架 1255.4 基于文件的數(shù)據(jù)結(jié)構(gòu) 1275.4.1 關(guān)于SequenceFile 1275.4.2 關(guān)于MapFile 1355.4.3 其他文件格式和面向列的格式 136第Ⅱ部分 關(guān)于MapReduce第6章 MapReduce應(yīng)用開(kāi)發(fā) 1416.1 用于配置的API 1426.1.1 資源合并 1436.1.2 變量擴(kuò)展 1446.2 配置開(kāi)發(fā)環(huán)境 1446.2.1 管理配置 1466.2.2 輔助類(lèi)GenericOptionsParser,Tool和ToolRunner 1496.3 用MRUnit來(lái)寫(xiě)單元測(cè)試 1526.3.1 關(guān)于Mapper 1526.3.2 關(guān)于Reducer 1566.4 本地運(yùn)行測(cè)試數(shù)據(jù) 1566.4.1 在本地作業(yè)運(yùn)行器上運(yùn)行作業(yè) 1566.4.2 測(cè)試驅(qū)動(dòng)程序 1586.5 在集群上運(yùn)行 1606.5.1 打包作業(yè) 1606.5.2 啟動(dòng)作業(yè) 1626.5.3 MapReduce的Web界面 1656.5.4 獲取結(jié)果 1676.5.5 作業(yè)調(diào)試 1686.5.6 Hadoop日志 1716.5.7 遠(yuǎn)程調(diào)試 1736.6 作業(yè)調(diào)優(yōu) 1746.7 MapReduce的工作流 1766.7.1 將問(wèn)題分解成MapReduce作業(yè) 1776.7.2 關(guān)于JobControl 1786.7.3 關(guān)于Apache Oozie 179第7章 MapReduce的工作機(jī)制 1847.1 剖析MapReduce作業(yè)運(yùn)行機(jī)制 1847.1.1 作業(yè)的提交 1857.1.2 作業(yè)的初始化 1867.1.3 任務(wù)的分配 1877.1.4 任務(wù)的執(zhí)行 1887.1.5 進(jìn)度和狀態(tài)的更新 1897.1.6 作業(yè)的完成 1917.2 失敗 1917.2.1 任務(wù)運(yùn)行失敗 1917.2.2 application master運(yùn)行失敗 1937.2.3 節(jié)點(diǎn)管理器運(yùn)行失敗 1937.2.4 資源管理器運(yùn)行失敗 1947.3 shuffle和排序 1957.3.1 map端 1957.3.2 reduce端 1977.3.3 配置調(diào)優(yōu) 1997.4 任務(wù)的執(zhí)行 2017.4.1 任務(wù)執(zhí)行環(huán)境 2017.4.2 推測(cè)執(zhí)行 2027.4.3 關(guān)于OutputCommitters 204第8章 MapReduce的類(lèi)型與格式 2078.1 MapReduce的類(lèi)型 2078.1.1 默認(rèn)的MapReduce作業(yè) 2128.1.2 默認(rèn)的Streaming作業(yè) 2168.2 輸入格式 2188.2.1 輸入分片與記錄 2188.2.2 文本輸入 2298.2.3 二進(jìn)制輸入 2338.2.4 多個(gè)輸入 2348.2.5 數(shù)據(jù)庫(kù)輸入(和輸出) 2358.3 輸出格式 2368.3.1 文本輸出 2368.3.2 二進(jìn)制輸出 2378.3.3 多個(gè)輸出 2378.3.4 延遲輸出 2428.3.5 數(shù)據(jù)庫(kù)輸出 242第9章 MapReduce的特性 2439.1 計(jì)數(shù)器 2439.1.1 內(nèi)置計(jì)數(shù)器 2439.1.2 用戶(hù)定義的Java計(jì)數(shù)器 2489.1.3 用戶(hù)定義的Streaming計(jì)數(shù)器 2519.2 排序 2529.2.1 準(zhǔn)備 2529.2.2 部分排序 2539.2.3 全排序 2559.2.4 輔助排序 2599.3 連接 2649.3.1 map端連接 2669.3.2 reduce端連接 2669.4 邊數(shù)據(jù)分布 2709.4.1 利用JobConf來(lái)配置作業(yè) 2709.4.2 分布式緩存 2709.5 MapReduce庫(kù)類(lèi) 276第Ⅲ部分 Hadoop的操作第10章 構(gòu)建Hadoop集群 27910.1 集群規(guī)范 28010.1.1 集群規(guī)模 28110.1.2 網(wǎng)絡(luò)拓?fù)?span id="epizqqp1gsyu" class="Apple-tab-span" style="white-space:pre"> 28210.2 集群的構(gòu)建和安裝 28410.2.1 安裝Java 28410.2.2 創(chuàng)建Unix 用戶(hù)賬號(hào) 28410.2.3 安裝Hadoop 28410.2.4 SSH配置 28510.2.5 配置Hadoop 28610.2.6 格式化HDFS 文件系統(tǒng) 28610.2.7 啟動(dòng)和停止守護(hù)進(jìn)程 28610.2.8 創(chuàng)建用戶(hù)目錄 28810.3 Hadoop配置 28810.3.1 配置管理 28910.3.2 環(huán)境設(shè)置 29010.3.3 Hadoop守護(hù)進(jìn)程的關(guān)鍵屬性 29310.3.4 Hadoop守護(hù)進(jìn)程的地址和端口 30010.3.5 Hadoop的其他屬性 30310.4 安全性 30510.4.1 Kerberos和Hadoop 30610.4.2 委托令牌 30810.4.3 其他安全性改進(jìn) 30910.5 利用基準(zhǔn)評(píng)測(cè)程序測(cè)試Hadoop集群 31110.5.1 Hadoop基準(zhǔn)評(píng)測(cè)程序 31110.5.2 用戶(hù)作業(yè) 313第11章 管理Hadoop 31411.1 HDFS 31411.1.1 永久性數(shù)據(jù)結(jié)構(gòu) 31411.1.2 安全模式 32011.1.3 日志審計(jì) 32211.1.4 工具 32211.2 監(jiān)控 32711.2.1 日志 32711.2.2 度量和JMX(Java管理擴(kuò)展) 32811.3 維護(hù) 32911.3.1 日常管理過(guò)程 32911.3.2 委任和解除節(jié)點(diǎn) 33111.3.3 升級(jí) 334第Ⅳ部分 Hadoop相關(guān)開(kāi)源項(xiàng)目第12章 關(guān)于Avro 34112.1 Avro數(shù)據(jù)類(lèi)型和模式 34212.2 內(nèi)存中的序列化和反序列化特定API 34712.3 Avro數(shù)據(jù)文件 34912.4 互操作性 35112.4.1 Python API 35112.4.2 Avro工具集 35212.5 模式解析 35212.6 排列順序 35412.7 關(guān)于Avro MapReduce 35612.8 使用Avro MapReduce進(jìn)行排序 35912.9 其他語(yǔ)言的Avro 362第13章 關(guān)于Parquet 36313.1 數(shù)據(jù)模型 36413.2 Parquet文件格式 36713.3 Parquet的配置 36813.4 Parquet文件的讀/寫(xiě) 36913.4.1 Avro、Protocol Buffers和Thrift 37113.4.2 投影模式和讀取模式 37313.5 Parquet MapReduce 374第14章 關(guān)于Flume 37714.1 安裝Flume 37814.2 示例 37814.3 事務(wù)和可靠性 38014.4 HDFS Sink 38214.5 扇出 38514.5.1 交付保證 38614.5.2 復(fù)制和復(fù)用選擇器 38714.6 通過(guò)代理層分發(fā) 38714.7 Sink組 39114.8 Flume與應(yīng)用程序的集成 39514.9 組件編目 39514.10 延伸閱讀 397第15章 關(guān)于Sqoop 39815.1 獲取Sqoop 39815.2 Sqoop連接器 40015.3 一個(gè)導(dǎo)入的例子 40115.4 生成代碼 40415.5 深入了解數(shù)據(jù)庫(kù)導(dǎo)入 40515.5.1 導(dǎo)入控制 40715.5.2 導(dǎo)入和一致性 40815.5.3 增量導(dǎo)入 40815.5.4 直接模式導(dǎo)入 40815.6 使用導(dǎo)入的數(shù)據(jù) 40915.7 導(dǎo)入大對(duì)象 41215.8 執(zhí)行導(dǎo)出 41415.9 深入了解導(dǎo)出功能 41615.9.1 導(dǎo)出與事務(wù) 41715.9.2 導(dǎo)出和SequenceFile 41815.10 延伸閱讀 419第16章 關(guān)于Pig 42016.1 安裝與運(yùn)行Pig 42116.1.1 執(zhí)行類(lèi)型 42216.1.2 運(yùn)行Pig程序 42316.1.3 Grunt 42416.1.4 Pig Latin編輯器 42416.2 示例 42516.3 與數(shù)據(jù)庫(kù)進(jìn)行比較 42816.4 PigLatin 42916.4.1 結(jié)構(gòu) 43016.4.2 語(yǔ)句 43116.4.3 表達(dá)式 43616.4.4 類(lèi)型 43716.4.5 模式 43816.4.6 函數(shù) 44316.4.7 宏 44516.5 用戶(hù)自定義函數(shù) 44616.5.1 過(guò)濾UDF 44716.5.2 計(jì)算UDF 45016.5.3 加載UDF 45216.6 數(shù)據(jù)處理操作 45516.6.1 數(shù)據(jù)的加載和存儲(chǔ) 45516.6.2 數(shù)據(jù)的過(guò)濾 45516.6.3 數(shù)據(jù)的分組與連接 45816.6.4 數(shù)據(jù)的排序 46316.6.5 數(shù)據(jù)的組合和切分 46516.7 Pig實(shí)戰(zhàn) 46516.7.1 并行處理 46516.7.2 匿名關(guān)系 46616.7.3 參數(shù)代換 46716.8 延伸閱讀 468第17章 關(guān)于Hive 46917.1 安裝Hive 470Hive的shell環(huán)境 47117.2 示例 47217.3 運(yùn)行Hive 47317.3.1 配置Hive 47317.3.2 Hive服務(wù) 47617.3.3 Metastore 47817.4 Hive與傳統(tǒng)數(shù)據(jù)庫(kù)相比 48017.4.1 讀時(shí)模式vs.寫(xiě)時(shí)模式 48017.4.2 更新、事務(wù)和索引 48117.4.3 其他SQL-on-Hadoop技術(shù) 48217.5 HiveQL 48317.5.1 數(shù)據(jù)類(lèi)型 48417.5.2 操作與函數(shù) 48717.6 表 48817.6.1 托管表和外部表 48817.6.2 分區(qū)和桶 49017.6.3 存儲(chǔ)格式 49417.6.4 導(dǎo)入數(shù)據(jù) 49817.6.5 表的修改 50017.6.6 表的丟棄 50117.7 查詢(xún)數(shù)據(jù) 50117.7.1 排序和聚集 50117.7.2 MapReduce腳本 50217.7.3 連接 50317.7.4 子查詢(xún) 50617.7.5 視圖 50717.8 用戶(hù)定義函數(shù) 50817.8.1 寫(xiě)UDF 51017.8.2 寫(xiě)UDAF 51217.9 延伸閱讀 516第18章 關(guān)于Crunch 51718.1 示例 51818.2 Crunch核心API 52118.2.1 基本操作 52218.2.2 類(lèi)型 52718.2.3 源和目標(biāo) 53018.2.4 函數(shù) 53218.2.5 物化 53518.3 管線(xiàn)執(zhí)行 53718.3.1 運(yùn)行管線(xiàn) 53818.3.2 停止管線(xiàn) 53918.3.3 查看Crunch計(jì)劃 54018.3.4 迭代算法 54318.3.5 給管線(xiàn)設(shè)置檢查點(diǎn) 54418.4 Crunch庫(kù) 54518.5 延伸閱讀 547第19章 關(guān)于Spark 54819.1 安裝Spark 54919.2 示例 54919.2.1 Spark應(yīng)用、作業(yè)、階段和任務(wù) 55119.2.2 Scala獨(dú)立應(yīng)用 55219.2.3 Java示例 55319.2.4 Python示例 55419.3 彈性分布式數(shù)據(jù)集 55519.3.1 創(chuàng)建 55519.3.2 轉(zhuǎn)換和動(dòng)作 55719.3.3 持久化 56119.3.4 序列化 56319.4 共享變量 56419.4.1 廣播變量 56419.4.2 累加器 56519.5 剖析Spark作業(yè)運(yùn)行機(jī)制 56519.5.1 作業(yè)提交 56619.5.2 DAG的構(gòu)建 56619.5.3 任務(wù)調(diào)度 56919.5.4 任務(wù)執(zhí)行 57019.6 執(zhí)行器和集群管理器 57019.7 延伸閱讀 574第20章 關(guān)于HBase 57520.1 HBase基礎(chǔ) 57520.2 概念 57620.2.1 數(shù)據(jù)模型的“旋風(fēng)之旅” 57620.2.2 實(shí)現(xiàn) 57820.3 安裝 58120.4 客戶(hù)端 58420.4.1 Java 58420.4.2 MapReduce 58820.4.3 REST和Thrift 58920.5 創(chuàng)建在線(xiàn)查詢(xún)應(yīng)用 58920.5.1 模式設(shè)計(jì) 59020.5.2 加載數(shù)據(jù) 59120.5.3 在線(xiàn)查詢(xún) 59520.6 HBase和RDBMS的比較 59820.6.1 成功的服務(wù) 59920.6.2 HBase 60020.7 Praxis 60120.7.1 HDFS 60120.7.2 用戶(hù)界面 60220.7.3 度量 60220.7.4 計(jì)數(shù)器 60220.8 延伸閱讀 602第21章 關(guān)于ZooKeeper 60421.1 安裝和運(yùn)行ZooKeeper 60521.2 示例 60721.2.1 ZooKeeper中的組成員關(guān)系 60821.2.2 創(chuàng)建組 60821.2.3 加入組 61121.2.4 列出組成員 61221.2.5 刪除組 61421.3 ZooKeeper服務(wù) 61521.3.1 數(shù)據(jù)模型 61521.3.2 操作 61821.3.3 實(shí)現(xiàn) 62221.3.4 一致性 62421.3.5 會(huì)話(huà) 62621.3.6 狀態(tài) 62821.4 使用ZooKeeper來(lái)構(gòu)建應(yīng)用 62921.4.1 配置服務(wù) 62921.4.2 可復(fù)原的ZooKeeper應(yīng)用 63321.4.3 鎖服務(wù) 63721.4.4 更多分布式數(shù)據(jù)結(jié)構(gòu)和協(xié)議 63921.5 生產(chǎn)環(huán)境中的ZooKeeper 64021.5.1 可恢復(fù)性和性能 64121.5.2 配置 642