轉載
原文地址:https://cloud.tencent.com/developer/article/1131482
一、為什么需要hadoop?
在數據量很大的情況下,單機的處理能力無法勝任,必須采用分布式集群的方式進行處理,而用分布式集群的方式處理數據,實現的復雜度呈級數增加。所以,在海量數據處理的需求下,一個通用的分布式數據處理技術框架能大大降低應用開發難點和減少工作量。
我們先來看這么一個例子:我們要從一個用戶使用app的日志數據中統計每個用戶搜索了哪些關鍵詞,這個日志文件有21G大,而我們的一個服務器只有8G內存,很顯然一台服務器無法干這活。那么我們的處理方案應該是這樣,見圖一:
圖一:自己搭建一個集群
從圖一我們知道,要順利完成這么一個集群工作,它存在幾個問題:
1)如何分發業務應用到集群的各台服務器上 2)設置好每台服務器的運算環境 3)業務邏輯要進行適應性的改造,需要一個專門的匯總程序來處理各台服務器的結果 4)任務的監控和容錯,比如B服務器掛掉了就需要重新分配一個服務器去處理B服務器中的1/3數據 5)如何處理中間結果數據的緩存、調度和傳輸 等等...
要我們自己編寫一個程序來處理以上的問題是極其復雜的,我曾經寫過一個腳本完成“如何分發業務應用到集群的各台服務器上”這個問題,復雜度也是不小的。
而hadoop卻可以幫助我們處理上面的所有問題,我們只需要編寫我們的業務程序即可。
二、hadoop是什么?
hadoop是用於處理(運算分析)海量數據的技術平台,並且是采用分布式集群的方式。
圖二:功能、核心組建、使用
hadoop有兩大功能:
1)提供海量數據的存儲服務。
2)提供分析海量數據框架及運行平台。 關鍵詞為存儲、分析海量數據和運行平台。
hadoop三大核心組件:
1)HDFS:hadoop分布式文件系統海量數據存儲(集群服務)。
2)MapReduce:分布式運算框架(編程框架),海量數據運算分析。
3)Yarn:資源調度管理集群(可以理解為一個分布式的操作系統,管理和分配集群硬件資源)。 用MapReduce編寫一個程序,到Yarn運行平台上去運行。
hadoop兩大使用角度:
1)可以把hadoop理解為一個編程框架,類比struts、spring、mybatis,有着自己特定的api封裝和用戶編程規范,用戶可借助這些api來實現數據處理邏輯。
2)從另一個角度,hadoop可以理解為一個提供服務的軟件,類比數據庫服務的oracle/mysql、索引服務solr、緩存服務redis,用戶程序通過客戶端向hadoop集群請求服務來實現特定的功能。