Hadoop
Hadoop是一個(gè)由Apache基金會(huì)所開(kāi)發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。
用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開(kāi)發(fā)分布式程序。充分利用集群的威力進(jìn)行高速運(yùn)算和存儲(chǔ)。
Hadoop實(shí)現(xiàn)了一個(gè)分布式文件系統(tǒng)(Hadoop Distributed File System),簡(jiǎn)稱HDFS。HDFS有高容錯(cuò)性的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(wèn)(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
Hadoop特點(diǎn)和優(yōu)缺點(diǎn)
一、 Hadoop 特點(diǎn)
1、支持超大文件
一般來(lái)說(shuō),HDFS存儲(chǔ)的文件可以支持TB和PB級(jí)別的數(shù)據(jù)。
2、檢測(cè)和快速應(yīng)對(duì)硬件故障
在集群環(huán)境中,硬件故障是常見(jiàn)性問(wèn)題。因?yàn)橛猩锨_(tái)服務(wù)器連在一起,故障率高,因此故障檢測(cè)和自動(dòng)恢復(fù)hdfs文件系統(tǒng)的一個(gè)設(shè)計(jì)目標(biāo)。假設(shè)某一個(gè)datanode節(jié)點(diǎn)掛掉之后,因?yàn)閿?shù)據(jù)備份,還可以從其他節(jié)點(diǎn)里找到。namenode通過(guò)心跳機(jī)制來(lái)檢測(cè)datanode是否還存在
3、流式數(shù)據(jù)訪問(wèn)
HDFS的數(shù)據(jù)處理規(guī)模比較大,應(yīng)用一次需要大量的數(shù)據(jù),同時(shí)這些應(yīng)用一般都是批量處理,而不是用戶交互式處理,應(yīng)用程序能以流的形式訪問(wèn)數(shù)據(jù)庫(kù)。主要的是數(shù)據(jù)的吞吐量,而不是訪問(wèn)速度。訪問(wèn)速度最終是要受制于網(wǎng)絡(luò)和磁盤的速度,機(jī)器節(jié)點(diǎn)再多,也不能突破物理的局限,HDFS不適合于低延遲的數(shù)據(jù)訪問(wèn),HDFS的是高吞吐量。
4、簡(jiǎn)化的一致性模型
對(duì)于外部使用用戶,不需要了解hadoop底層細(xì)節(jié),比如文件的切塊,文件的存儲(chǔ),節(jié)點(diǎn)的管理。
一個(gè)文件存儲(chǔ)在HDFS上后,適合一次寫入,多次寫出的場(chǎng)景once-write-read-many。因?yàn)榇鎯?chǔ)在HDFS上的文件都是超大文件,當(dāng)上傳完這個(gè)文件到hadoop集群后,會(huì)進(jìn)行文件切塊,分發(fā),復(fù)制等操作。如果文件被修改,會(huì)導(dǎo)致重新出發(fā)這個(gè)過(guò)程,而這個(gè)過(guò)程耗時(shí)是最長(zhǎng)的。所以在hadoop里,不允許對(duì)上傳到HDFS上文件做修改(隨機(jī)寫),在2.0版本時(shí)可以在后面追加數(shù)據(jù)。但不建議。
5、高容錯(cuò)性
數(shù)據(jù)自動(dòng)保存多個(gè)副本,副本丟失后自動(dòng)恢復(fù)??蓸?gòu)建在廉價(jià)機(jī)上,實(shí)現(xiàn)線性(橫向)擴(kuò)展,當(dāng)集群增加新節(jié)點(diǎn)之后,namenode也可以感知,將數(shù)據(jù)分發(fā)和備份到相應(yīng)的節(jié)點(diǎn)上。
6、商用硬件
Hadoop并不需要運(yùn)行在昂貴且高可靠的硬件上,它是設(shè)計(jì)運(yùn)行在商用硬件的集群上的,因此至少對(duì)于龐大的集群來(lái)說(shuō),節(jié)點(diǎn)故障的幾率還是非常高的。HDFS遇到上述故障時(shí),被設(shè)計(jì)成能夠繼續(xù)運(yùn)行且不讓用戶察覺(jué)到明顯的中斷。
二、HDFS缺點(diǎn)
1、不能做到低延遲
由于hadoop針對(duì)高數(shù)據(jù)吞吐量做了優(yōu)化,犧牲了獲取數(shù)據(jù)的延遲,所以對(duì)于低延遲數(shù)據(jù)訪問(wèn),不適合hadoop,對(duì)于低延遲的訪問(wèn)需求,HBase是更好的選擇,
2、不適合大量的小文件存儲(chǔ)
由于namenode將文件系統(tǒng)的元數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此該文件系統(tǒng)所能存儲(chǔ)的文件總數(shù)受限于namenode的內(nèi)存容量,根據(jù)經(jīng)驗(yàn),每個(gè)文件、目錄和數(shù)據(jù)塊的存儲(chǔ)信息大約占150字節(jié)。因此,如果大量的小文件存儲(chǔ),每個(gè)小文件會(huì)占一個(gè)數(shù)據(jù)塊,會(huì)使用大量的內(nèi)存,有可能超過(guò)當(dāng)前硬件的能力。
3、不適合多用戶寫入文件,修改文件
Hadoop2.0雖然支持文件的追加功能,但是還是不建議對(duì)HDFS上的 文件進(jìn)行修改,因?yàn)樾实汀?/p>
對(duì)于上傳到HDFS上的文件,不支持修改文件,HDFS適合一次寫入,多次讀取的場(chǎng)景。
HDFS不支持多用戶同時(shí)執(zhí)行寫操作,即同一時(shí)間,只能有一個(gè)用戶執(zhí)行寫操作。
三、HDFS優(yōu)點(diǎn)
Hadoop是一個(gè)能夠讓用戶輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。用戶可以輕松地在Hadoop上開(kāi)發(fā)和運(yùn)行處理海量數(shù)據(jù)的應(yīng)用程序。它主要有以下幾個(gè)優(yōu)點(diǎn):
高可靠性。Hadoop按位存儲(chǔ)和處理數(shù)據(jù)的能力值得人們信賴。
高擴(kuò)展性。Hadoop是在可用的計(jì)算機(jī)集簇間分配數(shù)據(jù)并完成計(jì)算任務(wù)的,這些集簇可以方便地?cái)U(kuò)展到數(shù)以千計(jì)的節(jié)點(diǎn)中。
高效性。Hadoop能夠在節(jié)點(diǎn)之間動(dòng)態(tài)地移動(dòng)數(shù)據(jù),并保證各個(gè)節(jié)點(diǎn)的動(dòng)態(tài)平衡,因此處理速度非常快。
高容錯(cuò)性。Hadoop能夠自動(dòng)保存數(shù)據(jù)的多個(gè)副本,并且能夠自動(dòng)將失敗的任務(wù)重新分配。
低成本。與一體機(jī)、商用數(shù)據(jù)倉(cāng)庫(kù)以及QlikView、Yonghong Z-Suite等數(shù)據(jù)集市相比,hadoop是開(kāi)源的,項(xiàng)目的軟件成本因此會(huì)大大降低。
Hadoop帶有用Java語(yǔ)言編寫的框架,因此運(yùn)行在 Linux 生產(chǎn)平臺(tái)上是非常理想的。Hadoop 上的應(yīng)用程序也可以使用其他語(yǔ)言編寫,比如 C++。
評(píng)論
查看更多