?一、hadoop是什么?
(1)Hadoop是一個(gè)開發(fā)和運(yùn)行處理大規(guī)模數(shù)據(jù)的軟件平臺(tái),可編寫和運(yùn)行分布式應(yīng)用處理大規(guī)模數(shù)據(jù),是Appach的一個(gè)用java語(yǔ)言實(shí)現(xiàn)開源軟件框架,實(shí)現(xiàn)在大量計(jì)算機(jī)組成的集群中對(duì)海量數(shù)據(jù)進(jìn)行分布式計(jì)算(或?qū)殡x線和大規(guī)模數(shù)據(jù)分析而設(shè)計(jì)的)并不適合那種對(duì)幾個(gè)記錄隨機(jī)讀寫的在線事務(wù)處理模式。
Hadoop=HDFS(文件系統(tǒng),數(shù)據(jù)存儲(chǔ)技術(shù)相關(guān))+ Mapreduce(數(shù)據(jù)處理),Hadoop的數(shù)據(jù)來(lái)源可以是任何形式,在處理半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)上與關(guān)系型數(shù)據(jù)庫(kù)相比有更好的性能,具有更靈活的處理能力,不管任何數(shù)據(jù)形式最終會(huì)轉(zhuǎn)化為key/value,key/value是基本數(shù)據(jù)單元。用函數(shù)式變成Mapreduce代替SQL,SQL是查詢語(yǔ)句,而Mapreduce則是使用腳本和代碼,而對(duì)于適用于關(guān)系型數(shù)據(jù)庫(kù),習(xí)慣SQL的Hadoop有開源工具h(yuǎn)ive代替。
(2)Hadoop就是一個(gè)分布式計(jì)算的解決方案。
Hadoop框架中最核心設(shè)計(jì)就是:HDFS和MapReduce.HDFS提供了海量數(shù)據(jù)的存儲(chǔ),MapReduce提供了對(duì)數(shù)據(jù)的計(jì)算。
數(shù)據(jù)在Hadoop中處理的流程可以簡(jiǎn)單的按照下圖來(lái)理解:數(shù)據(jù)通過Haddop的集群處理后得到結(jié)果。
?
優(yōu)點(diǎn)
Hadoop是一個(gè)能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架。 Hadoop 以一種可靠、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理。
Hadoop 是可靠的,因?yàn)樗僭O(shè)計(jì)算元素和存儲(chǔ)會(huì)失敗,因此它維護(hù)多個(gè)工作數(shù)據(jù)副本,確保能夠針對(duì)失敗的節(jié)點(diǎn)重新分布處理。
Hadoop 是高效的,因?yàn)樗圆⑿械姆绞焦ぷ?,通過并行處理加快處理速度。
Hadoop 還是可伸縮的,能夠處理 PB 級(jí)數(shù)據(jù)。
此外,Hadoop 依賴于社區(qū)服務(wù),因此它的成本比較低,任何人都可以使用。
Hadoop是一個(gè)能夠讓用戶輕松架構(gòu)和使用的分布式計(jì)算平臺(tái)。用戶可以輕松地在Hadoop上開發(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是開源的,項(xiàng)目的軟件成本因此會(huì)大大降低。
Hadoop帶有用Java語(yǔ)言編寫的框架,因此運(yùn)行在 Linux 生產(chǎn)平臺(tái)上是非常理想的。Hadoop 上的應(yīng)用程序也可以使用其他語(yǔ)言編寫,比如 C++。
?
hadoop大數(shù)據(jù)處理的意義
Hadoop得以在大數(shù)據(jù)處理應(yīng)用中廣泛應(yīng)用得益于其自身在數(shù)據(jù)提取、變形和加載(ETL)方面上的天然優(yōu)勢(shì)。Hadoop的分布式架構(gòu),將大數(shù)據(jù)處理引擎盡可能的靠近存儲(chǔ),對(duì)例如像ETL這樣的批處理操作相對(duì)合適,因?yàn)轭愃七@樣操作的批處理結(jié)果可以直接走向存儲(chǔ)。Hadoop的MapReduce功能實(shí)現(xiàn)了將單個(gè)任務(wù)打碎,并將碎片任務(wù)(Map)發(fā)送到多個(gè)節(jié)點(diǎn)上,之后再以單個(gè)數(shù)據(jù)集的形式加載(Reduce)到數(shù)據(jù)倉(cāng)庫(kù)。
hadoop能做什么?
hadoop擅長(zhǎng)日志分析,facebook就用Hive來(lái)進(jìn)行日志分析,2009年時(shí)facebook就有非編程人員的30%的人使用HiveQL進(jìn)行數(shù)據(jù)分析;淘寶搜索中的 自定義篩選也使用的Hive;利用Pig還可以做高級(jí)的數(shù)據(jù)處理,包括Twitter、LinkedIn 上用于發(fā)現(xiàn)您可能認(rèn)識(shí)的人,可以實(shí)現(xiàn)類似Amazon.com的協(xié)同過濾的推薦效果。淘寶的商品推薦也是!在Yahoo!的40%的Hadoop作業(yè)是用pig運(yùn)行的,包括垃圾郵件的識(shí)別和過濾,還有用戶特征建模。(2012年8月25新更新,天貓的推薦系統(tǒng)是hive,少量嘗試mahout?。?/p>
下面舉例說(shuō)明:
設(shè)想一下這樣的應(yīng)用場(chǎng)景。 我有一個(gè)100M 的數(shù)據(jù)庫(kù)備份的sql 文件。我現(xiàn)在想在不導(dǎo)入到數(shù)據(jù)庫(kù)的情況下直接用grep操作通過正則過濾出我想要的內(nèi)容。例如:某個(gè)表中 含有相同關(guān)鍵字的記錄那么有幾種方式,一種是直接用linux的命令 grep 還有一種就是通過編程來(lái)讀取文件,然后對(duì)每行數(shù)據(jù)進(jìn)行正則匹配得到結(jié)果好了 現(xiàn)在是100M 的數(shù)據(jù)庫(kù)備份。上述兩種方法都可以輕松應(yīng)對(duì)。
那么如果是1G , 1T 甚至 1PB 的數(shù)據(jù)呢 ,上面2種方法還能行得通嗎? 答案是不能。畢竟單臺(tái)服務(wù)器的性能總有其上限。那么對(duì)于這種 超大數(shù)據(jù)文件怎么得到我們想要的結(jié)果呢?
有種方法 就是分布式計(jì)算, 分布式計(jì)算的核心就在于 利用分布式算法 把運(yùn)行在單臺(tái)機(jī)器上的程序擴(kuò)展到多臺(tái)機(jī)器上并行運(yùn)行。從而使數(shù)據(jù)處理能力成倍增加。但是這種分布式計(jì)算一般對(duì)編程人員要求很高,而且對(duì)服務(wù)器也有要求。導(dǎo)致了成本變得非常高。
Haddop 就是為了解決這個(gè)問題誕生的.Haddop 可以很輕易的把 很多l(xiāng)inux的廉價(jià)pc 組成 分布式結(jié)點(diǎn),然后編程人員也不需要知道分布式算法之類,只需要根據(jù)mapreduce的規(guī)則定義好接口方法,剩下的就交給Haddop. 它會(huì)自動(dòng)把相關(guān)的計(jì)算分布到各個(gè)結(jié)點(diǎn)上去,然后得出結(jié)果。
例如上述的例子 : Hadoop 要做的事 首先把 1PB的數(shù)據(jù)文件導(dǎo)入到 HDFS中, 然后編程人員定義好 map和reduce, 也就是把文件的行定義為key,每行的內(nèi)容定義為value , 然后進(jìn)行正則匹配,匹配成功則把結(jié)果 通過reduce聚合起來(lái)返回.Hadoop 就會(huì)把這個(gè)程序分布到N 個(gè)結(jié)點(diǎn)去并行的操作。
那么原本可能需要計(jì)算好幾天,在有了足夠多的結(jié)點(diǎn)之后就可以把時(shí)間縮小到幾小時(shí)之內(nèi)。
這也就是所謂的 大數(shù)據(jù) 云計(jì)算了。如果還是不懂的話再舉個(gè)簡(jiǎn)單的例子
比如 1億個(gè) 1 相加 得出計(jì)算結(jié)果, 我們很輕易知道結(jié)果是 1億。但是計(jì)算機(jī)不知道。那么單臺(tái)計(jì)算機(jī)處理的方式做一個(gè)一億次的循環(huán)每次結(jié)果+1
那么分布式的處理方式則變成 我用 1萬(wàn)臺(tái) 計(jì)算機(jī),每個(gè)計(jì)算機(jī)只需要計(jì)算 1萬(wàn)個(gè) 1 相加 然后再有一臺(tái)計(jì)算機(jī)把 1萬(wàn)臺(tái)計(jì)算機(jī)得到的結(jié)果再相加從而得到最后的結(jié)果。
理論上講, 計(jì)算速度就提高了 1萬(wàn)倍。 當(dāng)然上面可能是一個(gè)不恰當(dāng)?shù)睦?。但所謂分布式,大數(shù)據(jù),云計(jì)算 大抵也就是這么回事了。
?
hadoop是什么語(yǔ)言開發(fā)的
(1)Hadoop的創(chuàng)始人是Doug Cutting, 同時(shí)也是著名的基于Java的檢索引擎庫(kù)Apache Lucene的創(chuàng)始人。Hadoop本來(lái)是用于著名的開源搜索引擎Apache Nutch,而Nutch本身是基于Lucene的,而且也是Lucene的一個(gè)子項(xiàng)目。因此Hadoop基于Java就很理所當(dāng)然了。
(2)用其他語(yǔ)言開發(fā)的Hadoop應(yīng)用大多數(shù)是使用Hadoop-Streaming來(lái)和框架對(duì)接的。 因?yàn)镾treaming會(huì)fork一個(gè)java進(jìn)程來(lái)讀寫Python/Perl/C++的stdin/stdout,開銷會(huì)大一些。較大的任務(wù)、長(zhǎng)期運(yùn)行的任務(wù),推薦使用Java。
?
評(píng)論
查看更多