一、為什么需要hadoop?
在數(shù)據(jù)量很大的情況下,單機的處理能力無法勝任,必須采用分布式集群的方式進行處理,而用分布式集群的方式處理數(shù)據(jù),實現(xiàn)的復雜度呈級數(shù)增加。所以,在海量數(shù)據(jù)處理的需求下,一個通用的分布式數(shù)據(jù)處理技術(shù)框架能大大降低應用開發(fā)難點和減少工作量。
我們先來看這么一個例子:我們要從一個用戶使用app的日志數(shù)據(jù)中統(tǒng)計每個用戶搜索了哪些關(guān)鍵詞,這個日志文件有21G大,而我們的一個服務器只有8G內(nèi)存,很顯然一臺服務器無法干這活。那么我們的處理方案應該是這樣,見圖一:

從圖一我們知道,要順利完成這么一個集群工作,它存在幾個問題:
1)如何分發(fā)業(yè)務應用到集群的各臺服務器上
2)設置好每臺服務器的運算環(huán)境
3)業(yè)務邏輯要進行適應性的改造,需要一個專門的匯總程序來處理各臺服務器的結(jié)果
4)任務的監(jiān)控和容錯,比如B服務器掛掉了就需要重新分配一個服務器去處理B服務器中的1/3數(shù)據(jù)
5)如何處理中間結(jié)果數(shù)據(jù)的緩存、調(diào)度和傳輸
等等...
要我們自己編寫一個程序來處理以上的問題是極其復雜的,我曾經(jīng)寫過一個腳本完成“如何分發(fā)業(yè)務應用到集群的各臺服務器上”這個問題,復雜度也是不小的。
而hadoop卻可以幫助我們處理上面的所有問題,我們只需要編寫我們的業(yè)務程序即可。
二、hadoop是什么?
hadoop是用于處理(運算分析)海量數(shù)據(jù)的技術(shù)平臺,并且是采用分布式集群的方式。

hadoop有兩大功能:
1)提供海量數(shù)據(jù)的存儲服務。
2)提供分析海量數(shù)據(jù)框架及運行平臺。
關(guān)鍵詞為存儲、分析海量數(shù)據(jù)和運行平臺。
hadoop三大核心組件:
1)HDFS:hadoop分布式文件系統(tǒng)海量數(shù)據(jù)存儲(集群服務)。
2)MapReduce:分布式運算框架(編程框架),海量數(shù)據(jù)運算分析。
3)Yarn:資源調(diào)度管理集群(可以理解為一個分布式的操作系統(tǒng),管理和分配集群硬件資源)。
用MapReduce編寫一個程序,到Y(jié)arn運行平臺上去運行。
hadoop兩大使用角度:
1)可以把hadoop理解為一個編程框架,類比struts、spring、mybatis,有著自己特定的api封裝和用戶編程規(guī)范,用戶可借助這些api來實現(xiàn)數(shù)據(jù)處理邏輯。
2)從另一個角度,hadoop可以理解為一個提供服務的軟件,類比數(shù)據(jù)庫服務的oracle/mysql、索引服務solr、緩存服務redis,用戶程序通過客戶端向hadoop集群請求服務來實現(xiàn)特定的功能。