作者:Cloudera創(chuàng)始人兼CTO Amr Awadallah |
Cloudera創(chuàng)始人兼CTO Amr Awadallah
誕生于2005年的Hadoop,目前已經(jīng)成為全球IT產(chǎn)業(yè)的寵兒,但是云計算時代Hadoop又有什么作為呢?Cloudera創(chuàng)始人兼CTO Amr Awadallah帶來了《Hadoop的前世今生》主題演講。他指出Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架,就是因為具備可靠、高效、可伸縮的特點,Hadoop目前已經(jīng)成為云計算和大數(shù)據(jù)系統(tǒng)中的關(guān)鍵部分,本次演講Amr Awadallah不僅展示最新的Hadoop實踐應(yīng)用案例,還為大家?guī)淼谝皇值腍adoop經(jīng)驗分享。
文字實錄如下:
為什么有這么多人采納Hadoop?為什么大數(shù)據(jù)是一個新的東西?這是我周三談的,如果你沒有聽到,你可以看一下我的視頻錄像。關(guān)于Hadoop,這里我想談一下它的歷史,然后我想談一下Hadoop將來會發(fā)生什么,希望給大家一個基礎(chǔ)知識關(guān)于Hadoop如何進行運行,希望大家不會感到枯燥。
Hadoop的起源
事實上,我們很多東西都是從零開始做起的,在Hadoop的歷史之前,我想跟大家講一下我自己,我是Cloudera的創(chuàng)始人兼CTO。
在2002年之前開始在一個項目上合作,目的是建立起網(wǎng)絡(luò),從網(wǎng)絡(luò)上建立起很多信息,然后用這樣的一些網(wǎng)頁給這個世界備受關(guān)注的。因為當時他們看了Google文件,就是在2003年和2004年有這樣的一個文件。然后他們有這樣的一個網(wǎng)絡(luò)使用的文件,像這樣一些論文你可以在網(wǎng)上下載和讀一下。Google并不是這個系統(tǒng)的源代碼 ,它只是把這個論文出版了,然后在那之后它們把這個文件中的一些概念放到了這個項目里,包括這樣一種分布的系統(tǒng)等。
2005年,雅虎掙扎了一年,因為他們針對自己的內(nèi)部系統(tǒng)做了一些改進,而他們的成本非常高,所以他們所做的最后引擎的項目并不是非常成功,他們并沒有賺到很多的錢。因為他們必須得從基礎(chǔ)架構(gòu)開始,所以他們是完全不一樣的架構(gòu)方式。我當時在雅虎工作就已經(jīng)在爭論這件事情,我們到底是從零做起來建立自己的系統(tǒng),還是我們可以作為雅虎這樣一個公司,來利用開源代碼 。這樣一來我們就可以占有更多技術(shù)方面的資源,占有開源代碼,通過這樣的方式節(jié)省一些人力物力和財力。
當時有一個雅虎的同事 ,后來跳槽去微軟了。我們談?wù)撨^我們所使用的方法,我們建立文件系統(tǒng)的方式,這是我們的武器,但是這些武器妨礙了雅虎的創(chuàng)新速度,而現(xiàn)在Google的創(chuàng)新速度還是非常快,尤其在網(wǎng)絡(luò)應(yīng)用這一塊。當時我們在公司內(nèi)部做了一些討論和爭論,我們希望能夠使用開源代碼 ,因為現(xiàn)在Google用了很多開源代碼,如果我們也能用到這些開源代碼,雅虎也能獲得像Google一樣的成功。
還有一位創(chuàng)始人是從Facebook跳過來的,他加入了我,建立了這個Cloudera公司。后來另外一位也加入了Cloudera,那時候我們很多技術(shù)都還不是非常成熟,也為Hadoop的開發(fā)鋪墊了一些基礎(chǔ)。2008年,Hadoop出現(xiàn)。事實上,Hadoop技術(shù)先出現(xiàn)的,名字是稍后出現(xiàn)的,名字這個東西很怪異。是我們其中一人,他兒子有一個玩具象,就給他的玩具大象起了名字叫Hadoop,然后他就拿小孩說的這個名字來命名了,這個技術(shù)已經(jīng)非常流行了。在2008年時,我們蜂窩的技術(shù)中使用了Hadoop技術(shù)。
Hadoop的主要功能
剛才我已經(jīng)給大家介紹了Hadoop的起源,你們知道不知道Hadoop分布式系統(tǒng)是什么?你們了解不了解Hadoop分布式文件系統(tǒng)?Hadoop有兩個主要功能。第一個功能是Hadoop分布式文件系統(tǒng),另一個是減少鏡像。這個所謂的分布式文件系統(tǒng),不管是微軟,還是其他的公司,它們是把文件存儲起來叫做文件系統(tǒng),然后在這個文件系統(tǒng)上面運行很多應(yīng)用程序。不管哪個公司,它們的做法都是一樣的,所有的應(yīng)用程序都是在文件系統(tǒng)上跑的。Hadoop它做的是一個開放式的數(shù)據(jù)中心的文件系統(tǒng),也就是說你的應(yīng)用程序不是在單機上的文件系統(tǒng)上運行的,它是在多個分布式文件系統(tǒng)上運行的。周三的時候我在這方面已經(jīng)說到了,這個分布式文件系統(tǒng)的好處就是具有靈活性、可擴展性以及經(jīng)濟性,就是你可以隨時隨地、隨心所欲地存儲數(shù)據(jù),擴展性就是你可以無限多的增加節(jié)點。還有是開源代碼 ,這樣你就不需要付很多錢安裝。靈活性、可擴展性、經(jīng)濟性是Hadoop的特點。
Hadoop在這個系統(tǒng)中位于核心部位,在這個上可以發(fā)布一系列應(yīng)用程序,Apache FLUME已經(jīng)在連接上發(fā)揮很大的作用,同時可以通過它的這個接口和微軟的程序訪問起來。Apache可以減少使用Hadoop的延時。Google所發(fā)布的文件叫“Google大表”,在大表方面也有非常好的應(yīng)用性。所有的系統(tǒng)和每個主線都是在Hadoop里面做的,你可以在Hadoop里面進行開發(fā),然后把它安裝在這個系統(tǒng)當中,它跟這個數(shù)據(jù)連接有關(guān)。你可以在云上運行Hadoop,只要你有良好的API接口,不管怎么說,你在這個平臺上都可以很輕松地創(chuàng)建Hadoop。所以你應(yīng)該關(guān)注一下Apache是什么,Apache跟雅虎有關(guān),它是一個基本框架,Apache框架現(xiàn)在已經(jīng)為很多的技術(shù)所使用了,而且Apache它能夠讓域名節(jié)點的可獲得性得到很大的提高,也就是說現(xiàn)在所做的是基礎(chǔ)架構(gòu)的工作,所有的基礎(chǔ)架構(gòu)程序都是在Apache上走的。比方說你有作業(yè)1、作業(yè)2、作業(yè)3,那么它可以順序地進行執(zhí)行,而且它使用的編程語言也是非常簡單的。Apache AHOUT是另外一個項目,我們做了一些關(guān)于建立一個跟操作系統(tǒng)比較像的東西,如果我們使用的是Linux的話,那么我們就可以充分使用開源系統(tǒng)帶來的好處。
HDFS是Hadoop分布式系統(tǒng),就是給您一個文件,它可以分成幾個部分放在不同的區(qū)存儲,我們對于每一個文件我們都有三個備份,備份1、備份2、備份3分別存在不同的地方。那么應(yīng)用程序是你可以放在文件,比方說有一些文件是經(jīng)常被訪問的,叫“熱文件”,這種文件你可以給它分配10或者20的備份,備份能給你帶來什么好處?首先是可持久性,你做的不是全文本的復(fù)制或者復(fù)本,你只是按照一種更加穩(wěn)妥的方式進行文件的存儲,而且不需要創(chuàng)建更多的備份。還有是你可以通過非??色@得性的方式存儲這些文件的備份。同時,你可以把你機架從三個減少到一個半。還有一點,就是可持續(xù)性和可獲得性,因為對文件你有很多不同的備份,那么一個備份宕掉了,但是我還是可以執(zhí)行我的應(yīng)用程序,因為我的文件備份在另外一個機器上可以找得到。如果我沒有進行這樣方式的備份的話,那么一個文件宕掉了,那么我一定要指望這個交換機恢復(fù)了以后才能繼續(xù)執(zhí)行這個程序。還有一點,就是我們在同樣的一個分區(qū)上可以跑很多個應(yīng)用程序,對于經(jīng)常訪問 的文件增加它的備份,通過這種方式增加了它的本地訪問量,也做好本地化了,不需要占用很多的帶寬。
HDFS還減少延時,減少讀取和寫進的東西,在這樣的文件系統(tǒng)當中,你可能在這個文件當中進行讀取和改變。如果你想這樣做的話你就要進行鎖定 ,這樣其他的用戶就不能改變這個文件。我們不允許你去改變這個文件,你要想改變這個文件的話,你把你想改變的文件做成一個副本,這樣我們就不會把這個文件鎖住和影響其他人訪問 這個文件,這就是HDFS的好處,這就是我們所提供的HDFS的機制。還有是在HDFS上經(jīng)常會檢查分區(qū),在后臺運行的,而且很慢,它查得是所有分區(qū),可以看到檢查結(jié)果,看到三個副本之間是不是已經(jīng)不匹配 了,如果不匹配了說明一個副本已經(jīng)發(fā)生改變了,這樣一來會造成故障。HDFS能做的是什么?它能夠讓你以最低的成本使用硬件,并且能夠保持最好的實時的可獲得性。這樣一來就可以盡可能多的吸納數(shù)據(jù)。還有一點,是當出現(xiàn)故障的時候都幾乎隱藏了,你也不需要擔(dān)心。
Hadoop可擴展的秘密
MapReduce系統(tǒng)有這樣一個模型,這是MapReduce整體的編程,這是分布式系統(tǒng)的管理。在這個系統(tǒng)下,要改變這個系統(tǒng)。實際上MapReduce是當你有這樣一個工作,然后再看一下你想去訪問這其中哪一個,然后會看一下它的數(shù)據(jù)、它的位置,這是一個秘密,為什么Hadoop會這么強大,這么可擴展的秘密,因為它總是要努力的去把你的任務(wù)進行排成,就是盡可能的讓它和你的數(shù)據(jù)有一個很密切的聯(lián)系。所以說它會有這樣一些線索知道數(shù)據(jù)在哪里,然后我希望我的這個工作也是在這里進行。我希望有另一個服務(wù)器非常近,因為有的時候這個機架如果被封閉的話那么就有延遲和流量的阻塞。它在機群中看一下,然后獲得很好的加強。
HDFS和MapReduce要去分解征服每個不同,所以我會看一下五個不同的。1這在里,另一個在2,另一個在3,那么就會看每一個任務(wù)的進程,如果有一個任務(wù)延遲了,那像2會在其他的計算速度之后,它有一個延遲,那我就把它掛起,它可能負載過大了,或者其他的原因。它可以保護這樣的一些延遲的任務(wù)。在機群中有一些百分比任務(wù)有滯后現(xiàn)象,所以一個工作完成了,其他的工作還在進行之中,你就希望其他的這些工作能有這種重新的分配。這樣的話可以在高層排成。
首先有高階的系統(tǒng)的架構(gòu),有1.0、2.0的模型,這個是在我們的同一個機群中的東西,它知道在機群中所處的位置。哪一個文件還是編碼怎樣,還有哪一個服務(wù)器有這樣的一個副本,所以它得告訴你這個數(shù)據(jù)在哪。它的源數(shù)據(jù)在Hadoop1.0中可以有很強的復(fù)制性,可以進行重建。如果有問題的話就是能力的問題了。如果1.0癱瘓 了,那么你大概需要5-3分鐘讓機群重新啟動。 在機群中的工作在哪里,所有在機群中的工作必須重新再啟動,這是很大的問題,這個大的問題在Hadoop2.0已經(jīng)解決。
關(guān)于Hadoop 2.0
現(xiàn)在我們有兩個Name Node,有一個活動的,另一個是待命的,那么這兩者之間的區(qū)別是什么?主要的Name Node如果出現(xiàn)故障可以被探測,會告訴大家這個Name Node出現(xiàn)問題,然后告訴第二個Name Node啟動,這樣可以給一些時間讓第一個Name Node進行恢復(fù)。但如果要是待命的出現(xiàn)問題那就有問題了,所以要逐漸的改變HDFS。活躍的跟待命的進行溝通,所以你要有一個系統(tǒng),如果系統(tǒng)達到100G,那么它們之間可以很好的進行通訊,它們都是服務(wù)同一個文件系統(tǒng)的。如果只有這樣一個原始的,你要重新購買另一個硬盤加入新的Name Node。另外一個非常關(guān)鍵的事情,就是Hadoop 2.0有這樣的一個聯(lián)合,文件系統(tǒng)是5000個節(jié)點,這是一個限制,很多公司已經(jīng)把它進行了突破,如果比4000個節(jié)點多的話就有一種聯(lián)合在Hadoop里,這樣就可以有1000個節(jié)點,可以有很多的機群,你可以把它建成統(tǒng)一的HDFS的機群,然后可以有一個全球 通用的系統(tǒng),它會有更多的Name Node。Name Node可以把故障進行割禮,如果一個機群有故障了,你可以有解決方案和復(fù)制。一個機群有問題并不意味著所有機群都出現(xiàn)鼓掌,所以它可以控制機群的故障范圍。每1000個Name Node都可以進行分離的出現(xiàn)故障的Name Node。
關(guān)于MapReduce ,它非常年輕,它是一個編程的Node在MapReduce,可以以一種比較廉價的方式運行。這個可以提供的是運行其他編程在這個MapReduce,現(xiàn)在數(shù)據(jù)的排成能力不僅僅可以讓你使用MapReduce,在其他的地方也可以使用。另外一塊MapReduce1.0里的關(guān)鍵點中可以把它進行分離,這樣可以增加很多效率。在這,你可以有這個池,可以作為一個集群使用,所以它的效率更高。它的可用性更高,它的可擴展性更高,并不是只有一個。而且你現(xiàn)在可以把它分配作業(yè)的方式在升級方面或者擴展沒有任何的障礙。兩個月以前我們提供一個新的版本,我們已經(jīng)有2.0版本,有社區(qū)發(fā)布了。
另外一個是我們有非常穩(wěn)健的18工程師組成 的工程團隊,他們同樣跟所有的社區(qū)進行團隊合作。,我們也得到其他很多網(wǎng)絡(luò)公司的幫助。我們在名字節(jié)點方面進行了重新的改編,因為我們知道名字節(jié)點它在任何時候都可能宕掉,都可能失效。那我們現(xiàn)在使用這個方式,就可能當這個節(jié)點或者磁盤出現(xiàn)問題的時候能夠馬上恢復(fù)。同樣是關(guān)于作業(yè)故障,每一個作業(yè)追蹤器追蹤到一個作業(yè),這樣一來就可以提供系統(tǒng)的穩(wěn)定性。我今天早上已經(jīng)談到過這個問題了,現(xiàn)在很明顯的趨勢是現(xiàn)在掛很多的硬盤 ,有的時候一個節(jié)點上可能掛24個盤,一個盤壞掉的話我們就把整個名字節(jié)點廢掉,然后把所有的名字節(jié)點數(shù)據(jù)進行復(fù)制。如果你只有4個盤好辦,但是我們不能這樣做,也就是說我們不能下面一個盤壞了,然后把其他沒壞的盤進行復(fù)制,這樣工作量太大了,這并不是好的方式。還有另外的一點,就是在可獲得性方面。我們現(xiàn)在可以有多機群的備份方式,也就是說現(xiàn)在你可以有2-3個機群,然后他們都可以進行實時的相互支持。這樣一來的話就會不會再有死循環(huán)的情況出現(xiàn)了,讓可獲得性得到提高。
這個所謂的可獲得性我們可以看到,Hadoop可以提供,而且已經(jīng)得到了極大的改善。還有就是可擴展性,現(xiàn)在HDFS的聯(lián)合方式可以進行水平的擴展,而且可以增加很多的節(jié)點,增加多少都可以,但是現(xiàn)在每個作業(yè)追蹤器負責(zé)一個作業(yè),這樣一來不管你增加幾個節(jié)點都沒有限制,你甚至可以增加4000個節(jié)點。還有就是性能方面的提高,我們知道,現(xiàn)在所使用的THF這些性能都有所提高,而且都提高了起碼百分之百 ,也就是說性能翻了一倍。還有我們這種隨機尋找的方式、搜索的方式性能也提高了百分之百。而且你使用的其實是一種半結(jié)構(gòu)的語言,不管是JAVA還是其他的語言進行搜索。
還有其他的一些性能表現(xiàn)方面的提高,比方說HDFS的輸出性能也有所提高,這樣一來數(shù)據(jù)它就離它的任務(wù)更加近了,而且數(shù)據(jù)之間的競爭就減少了。還有其他的一些改善,比方說以前的數(shù)據(jù)挖掘功能,因為我們現(xiàn)在發(fā)現(xiàn)比方說這個Windows或者其他的Hadoop的工具,ODBC的驅(qū)動器,它現(xiàn)在已經(jīng)得到BI工具,通過這種方式它就可以用于很多BI工具上去,得到很多高的安全性能方面的加強。這樣一來的話,作業(yè)的調(diào)配的方面,你在申請一個資源的話,你都可以把你的優(yōu)秀性提高,通過這種方式你就能夠達到這個作業(yè)的執(zhí)行權(quán)?,F(xiàn)在我們可以加這個數(shù)據(jù)的快照,通過這種方式來備份數(shù)據(jù)。還有,我們可以通過不同的方式進行數(shù)據(jù)的處理,并且我們也可以進行工作負荷的管理,而且我們可以進行數(shù)據(jù)的分析,尤其是源數(shù)據(jù)的管理。還有就是可以通過這種交互式的方式提供這些數(shù)據(jù)。我想接下來的兩年,所有這些性能都會體現(xiàn)出來,而且能夠?qū)崿F(xiàn)更高的穩(wěn)定性,而且能夠?qū)崿F(xiàn)比較低的延時