一、前言: 非常感謝Hadoop專業(yè)解決方案群:313702010,兄弟們的大力支持,在此說(shuō)一聲辛苦了,經(jīng)過(guò)兩周的努力,已經(jīng)有啦初步的成果,目前第1章 大數(shù)據(jù)和Hadoop生態(tài)圈小組已經(jīng)翻譯完成,在此對(duì):譯者:賈艷成 QQ:496830205 表示感謝。 二、意見(jiàn)征集: 本章節(jié)由《Hadoop專業(yè)解決方案群:313702010》翻譯小組完成,為小組校驗(yàn)稿,已經(jīng)通過(guò)小組內(nèi)部校驗(yàn)通過(guò),特此面向網(wǎng)絡(luò)征集意見(jiàn),如果對(duì)本章節(jié)內(nèi)容有任何異議,請(qǐng)?jiān)谠u(píng)論中加以說(shuō)明,說(shuō)明時(shí),請(qǐng)標(biāo)明行號(hào),也可以以修訂的方式,發(fā)送給我。非常感謝。 三、原書(shū)說(shuō)明 英文原書(shū)《Wrox.Professional.Hadoop.Solutions》第一章,請(qǐng)參照英文原文。 四、翻譯原稿 第一章 大數(shù)據(jù)和Hadoop生態(tài)圈本章主要內(nèi)容:
你可能聽(tīng)別人說(shuō)過(guò),我們生活在“大數(shù)據(jù)”的環(huán)境中。技術(shù)驅(qū)動(dòng)著當(dāng)今世界的發(fā)展,計(jì)算能力飛速增長(zhǎng),電子設(shè)備越來(lái)越普遍,因特網(wǎng)越來(lái)越容易接入,與此同時(shí),比以往任何時(shí)候都多的數(shù)據(jù)正在被傳輸和收集。 企業(yè)正在以驚人的速度產(chǎn)生數(shù)據(jù)。僅Facebook每天就會(huì)收集 250 TB 的數(shù)據(jù)。Thompson Reuters News Analytics (湯普森路透社新聞分析)顯示,現(xiàn)在數(shù)字?jǐn)?shù)據(jù)的總量比2009年的1ZB(1ZB等同于一百萬(wàn) PB)多了兩倍多,到 2015 年有可能將達(dá)到7.9ZB,到 2020 年則有可能會(huì)達(dá)到35ZB。其他調(diào)查機(jī)構(gòu)甚至做出了更高的預(yù)測(cè)。 隨著企業(yè)產(chǎn)生并收集的數(shù)據(jù)量增多,他們開(kāi)始認(rèn)識(shí)到數(shù)據(jù)分析的重要性。但是,他們必須先有效地管理好自己擁有的大量信息。這會(huì)產(chǎn)生新的挑戰(zhàn):怎樣才能存儲(chǔ)大量的數(shù)據(jù)?怎樣處理它們?怎樣高效地分析它們?既然數(shù)據(jù)會(huì)增加,又如何構(gòu)建一個(gè)可擴(kuò)展的解決方案? 不僅研究人員和數(shù)據(jù)科學(xué)家要面對(duì)大數(shù)據(jù)的挑戰(zhàn)。幾年前,在Google+ 大會(huì)上,計(jì)算機(jī)書(shū)籍出版者Tim O’Reilly引用過(guò)Alistair Croll的話,“這些產(chǎn)生了大量的無(wú)明顯規(guī)律數(shù)據(jù)的公司,正在被那些產(chǎn)生了相對(duì)較少的有規(guī)律數(shù)據(jù)的新創(chuàng)公司取代……”。簡(jiǎn)而言之,Croll想要說(shuō),除非你的企業(yè)“理解”你擁有的數(shù)據(jù),否則你的企業(yè)無(wú)法與那些“理解”自身數(shù)據(jù)的公司抗衡。 企業(yè)已經(jīng)意識(shí)到:大數(shù)據(jù)與商業(yè)競(jìng)爭(zhēng)、態(tài)勢(shì)感知、生產(chǎn)力、科學(xué)和創(chuàng)新等密切相關(guān),分析這些大數(shù)據(jù)能夠獲得巨大的效益。因?yàn)樯虡I(yè)競(jìng)爭(zhēng)正在驅(qū)動(dòng)大數(shù)據(jù)分析,所以大多數(shù)企業(yè)認(rèn)同O’Reilly和Croll的觀點(diǎn)。他們認(rèn)為當(dāng)今企業(yè)的生存依賴于存儲(chǔ)、處理和分析大量信息的能力,依賴于是否掌控了接受大數(shù)據(jù)挑戰(zhàn)的能力。 如果你閱讀這本書(shū),你將會(huì)熟悉這些挑戰(zhàn),熟悉Apache的Hadoop,并且知道Hadoop可以解決哪些問(wèn)題。本章主要介紹大數(shù)據(jù)的前景和挑戰(zhàn),并且概述Hadoop及其組件生態(tài)圈??梢岳眠@些組件構(gòu)建可擴(kuò)展、分布式的數(shù)據(jù)分析解決方案。 1.1 當(dāng)大數(shù)據(jù)遇到Hadoop由于“人力資本”是一個(gè)無(wú)形的、對(duì)成功至關(guān)重要的因素,所以多數(shù)企業(yè)都認(rèn)為他們的員工才是他們最有價(jià)值的財(cái)產(chǎn)。其實(shí)還有另外一個(gè)關(guān)鍵因素——企業(yè)所擁有的“信息”。信息可信度、信息量和信息可訪問(wèn)性可以增強(qiáng)企業(yè)信息能力,從而使企業(yè)做出更好的決策。 要理解企業(yè)產(chǎn)生的大量的數(shù)字信息是非常困難的。IBM指出在過(guò)去僅僅兩年的時(shí)間里產(chǎn)生了世界90%的數(shù)據(jù)。企業(yè)正在收集、處理和存儲(chǔ)這些可能成為戰(zhàn)略資源的數(shù)據(jù)。十年前,Michael Daconta, Leo Obrst, and Kevin T.Smith (Indianapolis: Wiley, 2004)寫(xiě)的一本書(shū)《The Semantic Web: A Guide to the Future of XML, Web Services, and Knowledge Management》中有句格言“只有擁有最好的信息,知道怎樣發(fā)現(xiàn)信息,并能夠最快利用信息的企業(yè)才能立于不敗之地”。 知識(shí)就是力量。問(wèn)題是,隨著收集的數(shù)據(jù)越來(lái)越多,傳統(tǒng)的數(shù)據(jù)庫(kù)工具將不能管理,并且快速處理這些數(shù)據(jù)。這將導(dǎo)致企業(yè)“淹沒(méi)”在自己的數(shù)據(jù)中:不能有效利用數(shù)據(jù),不能理解數(shù)據(jù)之間的聯(lián)系,不能理解數(shù)據(jù)潛在的巨大力量。 人們用“大數(shù)據(jù)”來(lái)描述過(guò)于龐大的數(shù)據(jù)集,這些數(shù)據(jù)集一般無(wú)法使用傳統(tǒng)的用于存儲(chǔ)、管理、搜索和分析等過(guò)程的工具來(lái)處理。大數(shù)據(jù)有眾多來(lái)源,可以是結(jié)構(gòu)型的,也可以是非結(jié)構(gòu)型的;通過(guò)處理和分析大數(shù)據(jù),可以發(fā)現(xiàn)內(nèi)部規(guī)律和模式,從而做出明智選擇。 什么是大數(shù)據(jù)的挑戰(zhàn)?怎么存儲(chǔ)、處理和分析如此大的數(shù)據(jù)量,從而從海量數(shù)據(jù)中獲取有用信息? 分析大數(shù)據(jù),需要大量的存儲(chǔ)空間和超級(jí)計(jì)算處理能力。在過(guò)去的十年中,研究人員嘗試了各種的方法來(lái)解決數(shù)字信息增加帶來(lái)的問(wèn)題。首先,把重點(diǎn)放在了給單個(gè)計(jì)算機(jī)更多的存儲(chǔ)、處理能力和內(nèi)存等上面,卻發(fā)現(xiàn)單臺(tái)計(jì)算機(jī)的分析能力并不能解決問(wèn)題。隨著時(shí)間的推移,許多組織實(shí)現(xiàn)了分布式系統(tǒng)(通過(guò)多臺(tái)計(jì)算機(jī)分布任務(wù)),但是分布式系統(tǒng)的數(shù)據(jù)分析解決方案往往很復(fù)雜,并且容易出錯(cuò),甚至速度不夠快。 在2002年,Doug Cutting和Mike Cafarella開(kāi)發(fā)一個(gè)名為Nutch的項(xiàng)目(專注于解決網(wǎng)絡(luò)爬蟲(chóng)、建立索引和搜索網(wǎng)頁(yè)的搜索引擎項(xiàng)目),用于處理大量信息。在為Nutch項(xiàng)目解決存儲(chǔ)和處理問(wèn)題的過(guò)程中,他們意識(shí)到,需要一個(gè)可靠的、分布式計(jì)算方法,為Nutch收集大量網(wǎng)頁(yè)數(shù)據(jù)。 一年后,谷歌發(fā)表了關(guān)于谷歌文件系統(tǒng)(GFS)和MapReduce的論文,MapReduce是一個(gè)用來(lái)處理大型數(shù)據(jù)集的算法和分布式編程平臺(tái)。當(dāng)意識(shí)到集群的分布式處理和分布式存儲(chǔ)的前景后,Cutting和Cafarella把這些論文作為基礎(chǔ),為Nutch構(gòu)建分布式平臺(tái),開(kāi)發(fā)了我們所熟知的Hadoop分布式文件系統(tǒng)(HDFS)和MapReduce。 在2006年,Yahoo在為搜索引擎建立大量信息的索引的過(guò)程中,經(jīng)歷了“大數(shù)據(jù)”挑戰(zhàn)的掙扎之后,看到了Nutch項(xiàng)目的前景,聘請(qǐng)了Doug Cutting,并迅速?zèng)Q定采用Hadoop作為其分布式架構(gòu),用來(lái)解決搜索引擎方面的問(wèn)題。雅虎剝離出來(lái)Nutch項(xiàng)目的存儲(chǔ)和處理部分,形成Apache基金的一個(gè)開(kāi)源項(xiàng)目Hadoop,與此同時(shí)Nutch的網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目保持自己獨(dú)立性。此后不久,雅虎開(kāi)始使用Hadoop分析各種產(chǎn)品應(yīng)用。該平臺(tái)非常有效,以至于雅虎把搜索業(yè)務(wù)和廣告業(yè)務(wù)合并成一個(gè)單元,從而更好地利用Hadoop技術(shù)。 在過(guò)去的10年中,Hadoop已經(jīng)從搜索引擎相關(guān)的平臺(tái),演變?yōu)樽盍餍型ㄓ玫挠?jì)算平臺(tái),用于解決大數(shù)據(jù)帶來(lái)的挑戰(zhàn)。它正在快速成為下一代基于數(shù)據(jù)的應(yīng)用程序的基礎(chǔ)。市場(chǎng)研究公司IDC預(yù)計(jì),到2016年,Hadoop驅(qū)動(dòng)的大數(shù)據(jù)市場(chǎng)將超過(guò)23億美元。自從2008年建立第一家以Hadoop為中心的公司Cloudera之后,幾十家基于Hadoop的創(chuàng)業(yè)公司吸引了數(shù)億美元的風(fēng)險(xiǎn)投資。簡(jiǎn)而言之,Hadoop為企業(yè)提供了一個(gè)行之有效的方法,來(lái)進(jìn)行大數(shù)據(jù)分析。 1.1.1 Hadoop:迎接大數(shù)據(jù)挑戰(zhàn)Apache的Hadoop通過(guò)簡(jiǎn)化數(shù)據(jù)密集型、高度并行的分布式應(yīng)用的實(shí)現(xiàn),以此迎接大數(shù)據(jù)的挑戰(zhàn)。世界各地的企業(yè)、大學(xué)和其它組織都在使用Hadoop,Hadoop把任務(wù)分成任務(wù)片,分布在數(shù)千臺(tái)計(jì)算機(jī)上,從而進(jìn)行快速分析,并分布式存儲(chǔ)大量的數(shù)據(jù)。Hadoop利用大量廉價(jià)的計(jì)算機(jī),提供了一個(gè)可擴(kuò)展強(qiáng),可靠性高的機(jī)制;并利用廉價(jià)的方式來(lái)存儲(chǔ)大量數(shù)據(jù)。Hadoop還提供了新的和改進(jìn)的分析技術(shù),從而使大量結(jié)構(gòu)化數(shù)據(jù)的復(fù)雜分析變?yōu)榭赡堋?/p> Hadoop與以前的分布式方法的區(qū)別:
此外,Hadoop隱藏了復(fù)雜的分布式實(shí)現(xiàn)過(guò)程,提供了一種簡(jiǎn)單的編程方法。從而,Hadoop得以提供強(qiáng)大的數(shù)據(jù)分析機(jī)制,包括以下內(nèi)容:
對(duì)于大多數(shù)Hadoop用戶而言,Hadoop最重要的特征是,將業(yè)務(wù)規(guī)劃和基礎(chǔ)設(shè)施維護(hù)進(jìn)行了清晰的劃分。為那些專注于商業(yè)業(yè)務(wù)的用戶,隱藏了Hadoop的基礎(chǔ)設(shè)施的復(fù)雜性,并提供了一個(gè)易于使用的平臺(tái),從而使復(fù)雜的分布式計(jì)算的問(wèn)題簡(jiǎn)單化。 1.1.2 商業(yè)界的數(shù)據(jù)科學(xué)Hadoop的存儲(chǔ)和處理大數(shù)據(jù)的能力經(jīng)常與“數(shù)據(jù)科學(xué)”掛鉤。雖然該詞是由彼得·諾爾在20世紀(jì)60年代提出的,但是直到最近才引起人們廣泛關(guān)注。美國(guó)雪域大學(xué)杰弗里·斯坦頓德教授把“數(shù)據(jù)科學(xué)”定義為“一個(gè)專注于搜集、分析、可視化、管理和大量信息保存的新興領(lǐng)域”。 通常將“數(shù)據(jù)科學(xué)”這一術(shù)語(yǔ)用在商業(yè)業(yè)務(wù)分析中,與實(shí)際中的“大數(shù)據(jù)”學(xué)科有很大的不同。在數(shù)據(jù)科學(xué)中,業(yè)務(wù)分析師通過(guò)研究現(xiàn)有商業(yè)運(yùn)作模式,來(lái)提升業(yè)務(wù)。 數(shù)據(jù)科學(xué)的目標(biāo)是從數(shù)據(jù)提取出數(shù)據(jù)的真正含義。數(shù)據(jù)科學(xué)家基于數(shù)學(xué)、統(tǒng)計(jì)分析、模式識(shí)別、機(jī)器學(xué)習(xí)、高性能計(jì)算和數(shù)據(jù)倉(cāng)庫(kù)等來(lái)工作,通過(guò)分析數(shù)據(jù)來(lái)發(fā)現(xiàn)事物發(fā)展趨勢(shì),并基于收集到的信息開(kāi)發(fā)新業(yè)務(wù)。 在過(guò)去的幾年中,許多數(shù)據(jù)庫(kù)和編程方面的業(yè)務(wù)分析師成為了數(shù)據(jù)科學(xué)家。他們?cè)贖adoop生態(tài)圈中,使用高級(jí)的SQL工具(比如:Hive或者實(shí)時(shí)Hadoop查詢工具)進(jìn)行數(shù)據(jù)分析,以做出明智的業(yè)務(wù)決策。 不只是“一個(gè)大數(shù)據(jù)庫(kù)” 在本書(shū)后面會(huì)深入講解Hadoop,但在此之前,讓我們先消除這樣的誤區(qū)——Hadoop僅僅是數(shù)據(jù)分析師使用的工具。因?yàn)閷?duì)于那些熟悉數(shù)據(jù)庫(kù)查詢的人,Hadoop工具(如Hive和實(shí)時(shí)Hadoop查詢)提供了較低的門檻,所以一些人認(rèn)為Hadoop僅僅是以數(shù)據(jù)庫(kù)為中心的工具。 此外,如果你正在試圖解決的問(wèn)題超出了數(shù)據(jù)分析的范疇,并涉及到真正的“科學(xué)數(shù)據(jù)”的問(wèn)題,這時(shí),SQL數(shù)據(jù)挖掘技術(shù)將明顯變得不再實(shí)用。例如,大多數(shù)問(wèn)題的解決,需要用到線性代數(shù)和其它復(fù)雜的數(shù)學(xué)應(yīng)用程序,然而,這些問(wèn)題都不能用SQL很好地解決。 這意味著,使用Hadoop工具是解決這類問(wèn)題的最好辦法。利用Hadoop的MapReduce編程模型,不但解決了數(shù)據(jù)科學(xué)的問(wèn)題,而且明顯簡(jiǎn)化了企業(yè)級(jí)應(yīng)用創(chuàng)建和部署的過(guò)程??梢酝ㄟ^(guò)多種方式做到這一點(diǎn)——可以使用一些工具,這些工具往往要求開(kāi)發(fā)者具備軟件開(kāi)發(fā)技能。例如,通過(guò)使用基于Oozie的應(yīng)用程序進(jìn)行協(xié)調(diào)(在本書(shū)后面將詳細(xì)介紹Oozie),可以簡(jiǎn)化多個(gè)應(yīng)用程序的匯集過(guò)程,并非常靈活地鏈接來(lái)自多個(gè)工具的任務(wù)。在本書(shū)中,你會(huì)看到Hadoop在企業(yè)中的實(shí)際應(yīng)用,以及什么時(shí)候使用這些工具。 目前Hadoop的開(kāi)發(fā),主要是為了更好地支持?jǐn)?shù)據(jù)科學(xué)家。Hadoop提供了一個(gè)強(qiáng)大的計(jì)算平臺(tái),擁有高擴(kuò)展性和并行執(zhí)行能力,非常適合應(yīng)用于新一代功能強(qiáng)大的數(shù)據(jù)科學(xué)和企業(yè)級(jí)應(yīng)用。并且,Hadoop還提供了可伸縮的分布式存儲(chǔ)和MapReduce編程模式。企業(yè)正在使用Hadoop解決相關(guān)業(yè)務(wù)問(wèn)題,主要集中在以下幾個(gè)方面:
類似的例子數(shù)不勝數(shù)。企業(yè)正在逐步使用Hadoop進(jìn)行數(shù)據(jù)分析,從而作出更好的戰(zhàn)略決策??偠灾?,數(shù)據(jù)科學(xué)已經(jīng)進(jìn)入了商界。 不僅僅是針對(duì)商業(yè)的大數(shù)據(jù)工具 雖然這里的大多數(shù)例子針對(duì)于商業(yè),但是Hadoop也被廣泛應(yīng)用在科學(xué)界和公有企業(yè)。 最近一項(xiàng)由美國(guó)科技基金會(huì)進(jìn)行的研究指出,醫(yī)療研究人員已經(jīng)證明,大數(shù)據(jù)分析可以被用于分析癌癥患者的信息,以提高治療效果(比如,蘋(píng)果創(chuàng)始人喬布斯的治療過(guò)程)。警察部門正在使用大數(shù)據(jù)工具,來(lái)預(yù)測(cè)犯罪可能的發(fā)生時(shí)間和地點(diǎn),從而降低了犯罪率。同樣的調(diào)查也表明,能源方面的官員正在利用大數(shù)據(jù)工具,分析相關(guān)的能量損耗和潛在的電網(wǎng)故障問(wèn)題。 通過(guò)分析大數(shù)據(jù)可以發(fā)現(xiàn)模型和趨勢(shì),提高效率,從而用新方法來(lái)作出更好的決策。 1.2 Hadoop生態(tài)圈架構(gòu)師和開(kāi)發(fā)人員通常會(huì)使用一種軟件工具,用于其特定的用途軟件開(kāi)發(fā)。例如,他們可能會(huì)說(shuō),Tomcat是Apache Web服務(wù)器,MySQL是一個(gè)數(shù)據(jù)庫(kù)工具。 然而,當(dāng)提到Hadoop的時(shí)候,事情變得有點(diǎn)復(fù)雜。Hadoop包括大量的工具,用來(lái)協(xié)同工作。因此,Hadoop可用于完成許多事情,以至于,人們常常根據(jù)他們使用的方式來(lái)定義它。 對(duì)于一些人來(lái)說(shuō),Hadoop是一個(gè)數(shù)據(jù)管理系統(tǒng)。他們認(rèn)為Hadoop是數(shù)據(jù)分析的核心,匯集了結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù),這些數(shù)據(jù)分布在傳統(tǒng)的企業(yè)數(shù)據(jù)棧的每一層。對(duì)于其他人,Hadoop是一個(gè)大規(guī)模并行處理框架,擁有超級(jí)計(jì)算能力,定位于推動(dòng)企業(yè)級(jí)應(yīng)用的執(zhí)行。還有一些人認(rèn)為Hadoop作為一個(gè)開(kāi)源社區(qū),主要為解決大數(shù)據(jù)的問(wèn)題提供工具和軟件。因?yàn)镠adoop可以用來(lái)解決很多問(wèn)題,所以很多人認(rèn)為Hadoop是一個(gè)基本框架。 雖然Hadoop提供了這么多的功能,但是仍然應(yīng)該把它歸類為多個(gè)組件組成的Hadoop生態(tài)圈,這些組件包括數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)集成、數(shù)據(jù)處理和其它進(jìn)行數(shù)據(jù)分析的專門工具。 1.3 HADOOP核心部件隨著時(shí)間的推移,Hadoop生態(tài)圈越來(lái)越大,圖1-1給出了Hadoop核心組件。
圖1:Hadoop生態(tài)圈的核心組成組件 從圖1-1的底部開(kāi)始,Hadoop生態(tài)圈由以下內(nèi)容組成:
Hadoop的生態(tài)圈還包括以下幾個(gè)框架,用來(lái)與其它企業(yè)融合:
除了在圖1-1所示的核心部件外,Hadoop生態(tài)圈正在不斷增長(zhǎng),以提供更新功能和組件,如以下內(nèi)容:
Hadoop家族成員正在逐步增加。在本書(shū)中,主要涉及到了三個(gè)新的Apache Hadoop孵化項(xiàng)目。 孵化項(xiàng)目演變到Apach項(xiàng)目的過(guò)程 下面將會(huì)簡(jiǎn)要介紹Apache基金會(huì)的運(yùn)作方式,以及Apache各種項(xiàng)目及其彼此之間的聯(lián)系。Apache的個(gè)人會(huì)員共同治理整個(gè)組織,Apache提供項(xiàng)目的創(chuàng)建、成熟和回收。 新的項(xiàng)目開(kāi)始于“孵化器”。建立Apache孵化器,是為了幫助新項(xiàng)目加入Apache。Apache提供管理和檢驗(yàn),經(jīng)過(guò)篩選后,再建立新的項(xiàng)目或者子項(xiàng)目。在創(chuàng)建孵化項(xiàng)目后,Apache會(huì)評(píng)估項(xiàng)目的成熟度,并負(fù)責(zé)將孵化器中的項(xiàng)目“畢業(yè)”到Apache項(xiàng)目或子項(xiàng)目。孵化器也會(huì)由于各種原因而終止一些項(xiàng)目。 要查看孵化器中項(xiàng)目(當(dāng)前的、孵化成功的、暫時(shí)停止的和回收的)的完整列表,可以通過(guò)此網(wǎng)址:http://incubator./projects/index.html。 當(dāng)今大多數(shù)的Hadoop方面的書(shū)籍,要么專注于Hadoop生態(tài)圈中某個(gè)獨(dú)立組件的描述,要么介紹如何使用Hadoop業(yè)務(wù)分析工具(如Pig和Hive)。盡管這些方面也很重要,但是這些書(shū)籍通常沒(méi)有進(jìn)行深入的描述,并不能幫助架構(gòu)師建立基于Hadoop的企業(yè)級(jí)應(yīng)用或復(fù)雜應(yīng)用。 1.4 Hadoop發(fā)行版本雖然Hadoop是開(kāi)源的Apache(和現(xiàn)在GitHub)項(xiàng)目,但是在Hadoop行業(yè),仍然出現(xiàn)了大量的新興公司,以幫助人們更方便地使用Hadoop為目標(biāo)。這些企業(yè)大多將Hadoop發(fā)行版進(jìn)行打包、改進(jìn),以確保所有的軟件一起工作,并提供技術(shù)支持。現(xiàn)在,Apache自己也在開(kāi)發(fā)更多的工具來(lái)簡(jiǎn)化Hadoop的使用,并擴(kuò)展其功能。這些工具是專有的,并有所差異。有的工具成為了Apache Hadoop家族中新項(xiàng)目的基礎(chǔ)。其中,有些是經(jīng)過(guò)Apache2許可的開(kāi)源GitHub項(xiàng)目。盡管所有這些公司都基于Apache Hadoop發(fā)行版,但是他們都與Hadoop的愿景有了細(xì)微的不同——應(yīng)該選取哪個(gè)方向,怎樣完成它。 這些公司之間最大的區(qū)別是:Apache源代碼的使用。除了MapR公司之外,都認(rèn)為Hadoop應(yīng)該由Apache項(xiàng)目的代碼定義。相反,MapR認(rèn)為Apache的代碼只是實(shí)施參考,可以基于Apache提供的API來(lái)實(shí)現(xiàn)自己的需求。這種方法使得MapR做出了很大的創(chuàng)新,特別是在HDFS和HBase方面,MapR讓這兩個(gè)基本Hadoop的存儲(chǔ)機(jī)制更加可靠、更加高性能。MapR還推出了高速網(wǎng)絡(luò)文件系統(tǒng)(NFS),可以訪問(wèn)HDFS,從而大大簡(jiǎn)化了一些企業(yè)級(jí)應(yīng)用的集成。 有兩個(gè)關(guān)注度較高的Hadoop發(fā)行版,分別由亞馬遜和微軟發(fā)布。兩者都提供Hadoop的預(yù)安裝版本,運(yùn)行于相應(yīng)的云服務(wù)平臺(tái)(Amazon or Azure),提供PaaS服務(wù)。它們都提供了擴(kuò)展服務(wù),允許開(kāi)發(fā)人員不僅能夠利用Hadoop的本地HDFS,也可以通過(guò)HDFS映射利用微軟和雅虎的數(shù)據(jù)存儲(chǔ)機(jī)制(Amazon的S3,和Azure的Windows Azure存儲(chǔ)機(jī)制)。亞馬遜還提供了,在S3上面保存和恢復(fù)HBase內(nèi)容的功能。 表1-1展示了主要的Hadoop發(fā)行版的主要特點(diǎn)。 表1: 不同的Hadoop供應(yīng)商
當(dāng)然,大量的發(fā)行版讓你疑惑“我應(yīng)該使用哪個(gè)發(fā)行版?”當(dāng)公司/部門決定采用一個(gè)具體的版本時(shí),應(yīng)該考慮以下幾點(diǎn): 技術(shù)細(xì)節(jié)——包括Hadoop的版本、組件、專有功能部件等等。 易于部署——使用工具箱來(lái)實(shí)現(xiàn)管理的部署、版本升級(jí)、打補(bǔ)丁等等。 易于維護(hù)——主要包括集群管理、多中心的支持、災(zāi)難恢復(fù)支持等等。 成本——包括針發(fā)行版的實(shí)施成本、計(jì)費(fèi)模式和許可證。 企業(yè)集成的支持——Hadoop應(yīng)用程序與企業(yè)中其他部分的集成。 版本的選擇依賴于,你打算利用Hadoop來(lái)解決哪些問(wèn)題。本書(shū)中的討論與版本無(wú)關(guān),因?yàn)楣P者看中的是每個(gè)發(fā)行版提供的價(jià)值。 1.5 用Hadoop開(kāi)發(fā)企業(yè)級(jí)應(yīng)用為了滿足大數(shù)據(jù)帶來(lái)的新挑戰(zhàn),需要重新思考構(gòu)建數(shù)據(jù)分析的程序的方式。傳統(tǒng)的在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù),構(gòu)建應(yīng)用程序的方法,對(duì)于大數(shù)據(jù)處理將不再有效。主要因?yàn)椋?/p>
因此,一個(gè)典型的基于Hadoop的企業(yè)級(jí)應(yīng)用如圖1-2所示。在這些應(yīng)用中,包括數(shù)據(jù)存儲(chǔ)層、數(shù)據(jù)處理層、實(shí)時(shí)訪問(wèn)層和安全層。要實(shí)現(xiàn)這種體系結(jié)構(gòu),不僅需要理解Hadoop組件所涉及的API,而且需要理解他們的功能和局限性,以及每個(gè)組件在整體架構(gòu)中的作用。 如圖1-2所示,數(shù)據(jù)存儲(chǔ)層包括源數(shù)據(jù)和中間數(shù)據(jù)。源數(shù)據(jù)主要來(lái)自這些外部數(shù)據(jù)源,外部數(shù)據(jù)源包括企業(yè)應(yīng)用程序、外部數(shù)據(jù)庫(kù)、執(zhí)行日志和其它數(shù)據(jù)源。中間數(shù)據(jù)結(jié)果來(lái)自Hadoop的執(zhí)行過(guò)程,它們被Hadoop的實(shí)時(shí)應(yīng)用程序使用,并交付給其他應(yīng)用程序和終端用戶。 圖1-2: Hadoop企業(yè)級(jí)應(yīng)用 可以使用不同的機(jī)制將源數(shù)據(jù)轉(zhuǎn)移到Hadoop,包括:Sqoop,F(xiàn)lume,直接安裝HDFS作為一個(gè)網(wǎng)絡(luò)文件系統(tǒng)(NFS),或者利用Hadoop的實(shí)時(shí)服務(wù)和應(yīng)用程序。在HDFS中,新的數(shù)據(jù)不會(huì)覆蓋現(xiàn)有數(shù)據(jù),而是新建一個(gè)數(shù)據(jù)版本。這一點(diǎn)很重要,因?yàn)镠DFS是一個(gè)“寫(xiě)一次”的文件系統(tǒng)。 對(duì)于數(shù)據(jù)處理層,Oozie預(yù)處理源數(shù)據(jù),并將其轉(zhuǎn)換為中間數(shù)據(jù)。不同于源數(shù)據(jù),中間數(shù)據(jù)會(huì)被覆蓋,沒(méi)有多個(gè)版本,所以中間數(shù)據(jù)量不會(huì)很大。 對(duì)于實(shí)時(shí)訪問(wèn)層,Hadoop的實(shí)時(shí)應(yīng)用程序既支持直接數(shù)據(jù)訪問(wèn),也支持基于數(shù)據(jù)集的訪問(wèn)。這些應(yīng)用程序讀取基于Hadoop的中間數(shù)據(jù),并將源數(shù)據(jù)存儲(chǔ)在Hadoop。該應(yīng)用程序也可以用于服務(wù)用戶,或者用于其它企業(yè)的Hadoop集成。 源數(shù)據(jù)用來(lái)存儲(chǔ)和初步處理數(shù)據(jù),中間數(shù)據(jù)用于傳遞和整合數(shù)據(jù)。因?yàn)椴捎昧嗽磾?shù)據(jù)和中間數(shù)據(jù)完全分離的結(jié)構(gòu),所以允許開(kāi)發(fā)人員在沒(méi)有任何事務(wù)處理需求的情況下,構(gòu)建任何虛擬和復(fù)雜的應(yīng)用程序。通過(guò)中間預(yù)處理過(guò)程,明顯減少了服務(wù)數(shù)據(jù)量,使得實(shí)時(shí)數(shù)據(jù)訪問(wèn)更加靈活。 HADOOP擴(kuò)充性 雖然許多文章認(rèn)為,對(duì)于開(kāi)發(fā)人員來(lái)講,Hadoop隱藏了底層的復(fù)雜性。但是,其實(shí)是這些文章沒(méi)有充分認(rèn)識(shí)到Hadoop的可擴(kuò)展。 通過(guò)設(shè)計(jì)Hadoop的實(shí)現(xiàn)方式,可以使開(kāi)發(fā)人員輕松、無(wú)縫地集成新的功能到Hadoop中執(zhí)行。Hadoop明確指定一些類庫(kù)來(lái)負(fù)責(zé)MapReduce執(zhí)行的不同階段。通過(guò)這種方式,滿足了開(kāi)發(fā)者執(zhí)行特定問(wèn)題的要求,從而確保每一個(gè)作業(yè)以最低成本、最高性能性能來(lái)執(zhí)行。 可以自定義Hadoop執(zhí)行的以下內(nèi)容:
本書(shū)有一部分內(nèi)容,在他人工作成果的基礎(chǔ)上,對(duì)自定義方法,以及實(shí)現(xiàn)方式進(jìn)行了專門的描述。 本書(shū)涵蓋了Hadoop企業(yè)級(jí)應(yīng)用的所有主要層,如圖1-2所示。 第2章介紹了構(gòu)建數(shù)據(jù)層的方法,包括HDFS和HBase(架構(gòu)和API)。然后,對(duì)兩者進(jìn)行對(duì)比分析,以及如何將HDFS和HBase相結(jié)合。本章還介紹了Avro(Hadoop的新的序列化框架),以及它在存儲(chǔ)或訪問(wèn)數(shù)據(jù)中的作用。最后,你將了解HCatalog,以及用它來(lái)做廣告和訪問(wèn)數(shù)據(jù)的方式。 本書(shū)將對(duì)數(shù)據(jù)處理進(jìn)行了大量的描述。對(duì)于應(yīng)用程序的數(shù)據(jù)處理部分,筆者建議使用MapReduce和Oozie。 在本書(shū)中,為什么以MapReduce源碼為核心? 你可能會(huì)問(wèn),為什么本書(shū)將重點(diǎn)放在MapReduce源碼上,而不是可以讓MapReduce編程變得更簡(jiǎn)單的高級(jí)語(yǔ)言上面。你可以在網(wǎng)上或者Hadoop社區(qū)內(nèi),找到很多關(guān)于這方面的討論。在這些討論中給出的解釋是,MapReduce源碼量(就代碼行數(shù)而言)比提供相同的功能的Pig源碼量通常要多很多。盡管這是一個(gè)不爭(zhēng)的事實(shí),不過(guò)還有一些其他因素:
在第3章中,您將了解MapReduce的架構(gòu)、主要構(gòu)成和編程模型。本章介紹了MapReduce的應(yīng)用程序設(shè)計(jì)、設(shè)計(jì)模式和MapReduce注意事項(xiàng)。本章還講介紹MapReduce的執(zhí)行是如何實(shí)現(xiàn)的。正如所提到的,MapReduce最強(qiáng)的特征之一是它可以自定義執(zhí)行。第4章會(huì)介紹自定義選項(xiàng)的詳細(xì)信息,并舉例說(shuō)明。第5章通過(guò)演示實(shí)例,對(duì)MapReduce進(jìn)一步討論,構(gòu)建可靠的MapReduce應(yīng)用。 盡管MapReduce功能很強(qiáng)大,但是對(duì)于一個(gè)切實(shí)可行的解決方案,通常需要將多個(gè)MapReduce應(yīng)用集合到在一起。這個(gè)過(guò)程非常復(fù)雜,通過(guò)使用Hadoop的Workflow/Coordinator(工作流/協(xié)調(diào)員)引擎,可以被大大簡(jiǎn)化MapReduce應(yīng)用的集成。 Oozie的價(jià)值 Oozie是Hadoop中最容易被低估的組件。很少有人(甚至沒(méi)有)在Hadoop書(shū)籍討論這個(gè)極其重要的組件。本書(shū)不但彰顯了Oozie什么可以做,而且還提供了一個(gè)端到端的例子,用來(lái)展示如何利用Oozie功能來(lái)解決實(shí)際問(wèn)題。類似于Hadoop的其余部分,Oozie的功能也具有很好的擴(kuò)展性。開(kāi)發(fā)者可以通過(guò)不同的方法來(lái)擴(kuò)展Oozie的功能。 在Hadoop中,最容易被低估的挑戰(zhàn)是:將Hadoop執(zhí)行與企業(yè)處理的其余部分進(jìn)行整合。使用Oozie來(lái)協(xié)調(diào)MapReduce應(yīng)用,并通過(guò)公開(kāi)Oozie API的方式公開(kāi)了Hadoop進(jìn)程。通過(guò)這種方式,你會(huì)很容易就找到更好的集成方法,對(duì)Hadoop處理和企業(yè)處理部分進(jìn)行集成。 第6章描述了Oozie是什么,Oozie的體系結(jié)構(gòu)、主要組成、編程語(yǔ)言和執(zhí)行模型。為了更好地解釋每個(gè)Oozie組件的功能和角色,第7章通過(guò)使用Oozie應(yīng)用解決端到端的實(shí)際問(wèn)題。第8章中,通過(guò)展示Oozie的一些高級(jí)功能,對(duì)Oozie進(jìn)一步描述。這些高級(jí)功能包括自定義Workflow活動(dòng)、動(dòng)態(tài)生成Workflow和支持超級(jí)JAR文件(一個(gè)包含了所有的包及其依賴關(guān)系的JAR文件)。 第9章主要講解實(shí)時(shí)訪問(wèn)層。該章首先介紹了一個(gè)工業(yè)中實(shí)時(shí)Hadoop應(yīng)用實(shí)例,然后針對(duì)實(shí)現(xiàn)方式提出了整體架構(gòu)。接著,介紹了建立這種實(shí)現(xiàn)的三種主要方法——基于HBase的應(yīng)用程序、實(shí)時(shí)查詢以及基于流的處理。本章介紹了總體架構(gòu),并提供了基于HBase實(shí)時(shí)應(yīng)用的兩個(gè)例子。然后,描述了一個(gè)實(shí)時(shí)查詢體系結(jié)構(gòu),并討論了兩個(gè)具體的實(shí)現(xiàn)——Apache Drill 和 Cloudera’s Impala。還介紹了實(shí)時(shí)查詢和MapReduce的對(duì)比。最后,您將了解基于Hadoop的復(fù)雜事件處理,以及兩個(gè)具體的實(shí)現(xiàn)——Strom和HFlame。 開(kāi)發(fā)企業(yè)級(jí)應(yīng)用需要大量的規(guī)劃,以及信息安全方面的策略。第10章將重點(diǎn)講解Hadoop的安全模型。 隨著云計(jì)算的發(fā)展,許多企業(yè)嘗試將他們的Hadoop運(yùn)行在云上。第11章的重點(diǎn)是,通過(guò)使用EMR實(shí)現(xiàn),在亞馬遜的云上運(yùn)行Hadoop應(yīng)用;并且介紹了其它AWS服務(wù)(如S3),用來(lái)補(bǔ)充Hadoop的功能。本章還介紹了,通過(guò)使用不同的方法來(lái)運(yùn)行云上的Hadoop,并討論了最佳實(shí)踐方案。 除了Hadoop自身的安全問(wèn)題外,通常Hadoop還需要集成其他企業(yè)的組件,來(lái)實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入和導(dǎo)出。第12章將重點(diǎn)介紹,如何才能維護(hù)好那些使用了Hadoop的企業(yè)級(jí)應(yīng)用,并提供了示例和最佳安全實(shí)踐,來(lái)確保所有Hadoop企業(yè)級(jí)應(yīng)用的安全運(yùn)行。 1.6 總結(jié)本章高度概括了大數(shù)據(jù)和Hadoop之間的關(guān)系。并介紹了大數(shù)據(jù)及其價(jià)值,還介紹了企業(yè)面臨的大數(shù)據(jù)挑戰(zhàn),包括數(shù)據(jù)存儲(chǔ)和處理的挑戰(zhàn)。通過(guò)本章,你還了解了Hadoop及其歷史。 通過(guò)本章,你了解了Hadoop特點(diǎn),并知道了為什么Hadoop如此適合大數(shù)據(jù)處理。本章還概述了Hadoop的主要組件,并介紹了一些例子,用來(lái)展示Hadoop如何簡(jiǎn)化數(shù)據(jù)科學(xué),簡(jiǎn)化創(chuàng)建企業(yè)應(yīng)用程序的過(guò)程。 本章介紹了關(guān)于Hadoop發(fā)行版本的基礎(chǔ)知識(shí),以及為什么許多企業(yè)傾向于選擇特定供應(yīng)商的發(fā)行版。因?yàn)樗麄儾幌M幚鞟pache項(xiàng)目中的兼容問(wèn)題,或者他們需要供應(yīng)商的技術(shù)支持。 最后,本章討論了一種分層的方法和模型,用于開(kāi)發(fā)基于Hadoop的企業(yè)級(jí)應(yīng)用。 第2章開(kāi)始將深入講解Hadoop的細(xì)節(jié),以及如何存儲(chǔ)你的數(shù)據(jù)。 |
|