Hadoop教程:Hadoop在大數(shù)據(jù)中的角色

Henry和我正在進(jìn)行一項檢查大數(shù)據(jù)以及其真正意義的工作。大數(shù)據(jù)是一個流行語。和許多流行語一樣,大數(shù)據(jù)這個詞用得有些濫了,但是它包含了一些真正的有用性和技術(shù)。我們決定在這個主題上對大數(shù)據(jù)進(jìn)行一番分析,努力挖掘其中的真實性以及它們對存儲解決方案的意義。
Henry用一個很好的介紹開始了這個系列。他對大數(shù)據(jù)的定義是我所見過的最好的定義。因此,我將重復(fù)這個定義:
大數(shù)據(jù)是將數(shù)據(jù)變?yōu)樾畔⑷缓笞優(yōu)橹R的過程。
這個定義很恰當(dāng),因為形容詞“大”可以表達(dá)很多種意思。一些人將“大”想象成他們所專注的領(lǐng)域中的意思,而我們則專注于你可以在這個數(shù)據(jù)上做什么以及為什么。
Henry和我決定用兩個部分來進(jìn)行這個討論。Henry從最基本的硬件本身開始,然后向上討論堆棧。更準(zhǔn)確的是,他想知道的是硬件的哪些方面對大數(shù)據(jù)而言很重要,以及哪些技術(shù)是重要的。我則從大數(shù)據(jù)堆棧的頂端開始,也就是應(yīng)用程序,然后向下討論堆棧。我們將在中間某處會合,然后將我們的想法和評論歸納到最終的一篇文章中。
從頂端開始并不容易,我原來的文章變得很長。因此,我們一起決定將它分成三個部分。第一個部分從討論堆棧頂端的一些基本問題開始,包括將數(shù)據(jù)引入到存儲系統(tǒng)以供使用的重要性(這個部分比大部分人所認(rèn)識到的還要重要)。它還討論了大數(shù)據(jù)最常見的工具——NoSQL數(shù)據(jù)庫。第二個部分分析了8個使用于大數(shù)據(jù)并影響存儲的NoSQL數(shù)據(jù)庫類型。最后一個關(guān)于堆棧頂端的部分則將討論Hadoop在大數(shù)據(jù)中的角色以及所有這些東西是如何聯(lián)系到R這樣的分析工具。
與Hadoop的聯(lián)系
在以前的文章中所提到過的所有的數(shù)據(jù)庫都需要一個地方來存儲它們的數(shù)據(jù),同時性能也是它們的一個重要組成部分。我們所提到過的一些工具與將Hadoop作為存儲平臺有聯(lián)系。Hadoop實際上不是一個文件系統(tǒng),實際上,它是一個軟件框架,支持?jǐn)?shù)據(jù)密集型分布式應(yīng)用程序,比如這里所討論的一些以及以前的文章所討論過的一些應(yīng)用程序。在與MapReduce在一起協(xié)同工作的時候,Hadoop可以成為一個針對數(shù)據(jù)密集型應(yīng)用程序的非常有效的解決方案。
Hadoop File System(HDFS:Hadoop文件系統(tǒng))是一個發(fā)端于谷歌文件系統(tǒng)(GFS:Google File System)的開源文件系統(tǒng)。但是,GFS是谷歌專用的。Hadoop是用Java編寫的,是一個分布式文件系統(tǒng),是真正的元文件系統(tǒng)——換句話說,是一個可以作用于底層文件系統(tǒng)頂端的文件系統(tǒng)。它的設(shè)計旨在成為一個容錯的文件系統(tǒng),讓數(shù)據(jù)的副本可以存儲在文件系統(tǒng)內(nèi)不同的地點上,因此從錯誤的數(shù)據(jù)副本或宕機(jī)的服務(wù)器中恢復(fù)數(shù)據(jù)就變得相當(dāng)容易。不過,這些副本也可以用于改善性能。
Hadoop的基本構(gòu)建塊就是所謂的“datanode”(數(shù)據(jù)節(jié)點)。這是一個一臺服務(wù)器與一些存儲和網(wǎng)絡(luò)的組合。存儲通常是服務(wù)器內(nèi)部的或直接 連接到服務(wù)器的存儲(DAS)。每個datanode使用專門的面向HDFS的塊協(xié)議來在網(wǎng)絡(luò)(以太網(wǎng))上提供數(shù)據(jù)。一定數(shù)量的datanode分布在多 個機(jī)架上,而每個datanode可以通過它所在機(jī)架被部分識別。Hadoop還有元數(shù)據(jù)服務(wù)器,即所謂的“Namenode”(命名節(jié)點)。 Namenode同時也是HDFS的管理節(jié)點。此外,HDFS還有二級Namenode,不過它不是故障復(fù)原元數(shù)據(jù)服務(wù)器,而是用于其他文件系統(tǒng)任務(wù),比 如快照主Namenode的目錄信息以幫助減少宕機(jī)時間——如果一個Namenode發(fā)生故障的話。由于只有一個Namenode,它可能會成為一個潛在 的瓶頸或HDFS的單故障點。
HDFS的一個重要特點就是數(shù)據(jù)復(fù)制到多個datanode上以幫助提高彈性。HDFS缺省情況下會將三個數(shù)據(jù)副本存儲在不同的datanode 上。兩個副本是在同一個機(jī)架上,另一個在不同的機(jī)架上(因此,即使一個機(jī)架壞了,你還可以訪問你的數(shù)據(jù))。你可以在那些擁有所需數(shù)據(jù)的datanode上 ——缺省情況下?lián)碛袛?shù)據(jù)副本的三個datanode之一——運行制定好的任務(wù)(注意,這些datanode在存儲數(shù)據(jù)和提供數(shù)據(jù)的同時也可以運行任務(wù))。
這就是許多人所指的:“將任務(wù)移到數(shù)據(jù)上,而不是將數(shù)據(jù)移到任務(wù)上”。這樣做可以減少數(shù)據(jù)遷移,減少網(wǎng)絡(luò)負(fù)擔(dān),因為數(shù)據(jù)不用遷移來遷移去以運行任 務(wù)。一旦任務(wù)開始運行,所有的數(shù)據(jù)訪問都是本地進(jìn)行的,因此不需要datanode條帶化或使用多個數(shù)據(jù)服務(wù)器來滿足并行數(shù)據(jù)訪問。Hadoop的并行性 體現(xiàn)在應(yīng)用程序的性能上,同一個應(yīng)用程序的多個副本可以被同時運行并訪問不同的數(shù)據(jù)集。此外,由于你有三個數(shù)據(jù)副本,你可以在同一時間運行三個人物來訪問 同一個文件,因此性能也得到了改善。
在后端,datanode可以和其他datanode通信,使用RPC(遠(yuǎn)程過程調(diào)用)來執(zhí)行一系列任務(wù):
- 在遵守數(shù)據(jù)復(fù)制規(guī)定的前提下,實現(xiàn)datanode之間的容量均衡;
- 互相之間比較文件,以便用正確的副本覆蓋損壞的文件副本;
- 檢查數(shù)據(jù)副本的數(shù)量,如果必要,增加額外副本;
- 需要注意的是HDFS不是一個POSIX(可移植操作系統(tǒng)接口)兼容文件系統(tǒng),這主要是因為性能可以提高。
如果你使用Java API(應(yīng)用程序編程接口)、Thrift API、命令行界面或在HTTP上通過HDFS-UI界面瀏覽,在HDFS中訪問數(shù)據(jù)還是相當(dāng)簡單的。除了這個,在操作系統(tǒng)上直接載入HDFS是不行的。唯一的解決方案是使用Linux FUSE客戶端來加載文件系統(tǒng)。
記住,Hadoop是基于谷歌文件系統(tǒng)(GFS)的,后者是用來支持谷歌的BigTable,而BigTable是面向列的數(shù)據(jù)庫。因此,Hadoop更可能支持前文所提到的那些Column Store工具。在此前提到的工具中,許多工具已經(jīng)開發(fā)了面向Hadoop的界面,因此它們可以利用Hadoop來存儲數(shù)據(jù)。
來源:存儲在線